package com.faforever.client.update; import com.faforever.client.i18n.I18n; import com.faforever.client.io.Bytes; import com.faforever.client.notification.NotificationService; import com.faforever.client.notification.PersistentNotification; import com.faforever.client.task.TaskService; import com.faforever.client.test.AbstractPlainJavaFxTest; import org.apache.maven.artifact.versioning.ComparableVersion; import org.junit.Before; import org.junit.Test; import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.springframework.context.ApplicationContext; import java.net.URL; import java.util.concurrent.CompletableFuture; import static com.faforever.client.notification.Severity.INFO; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; import static org.mockito.Matchers.any; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import static org.mockito.Mockito.withSettings; public class ClientUpdateServiceImplTest extends AbstractPlainJavaFxTest { private ClientUpdateServiceImpl instance; @Mock private NotificationService notificationService; @Mock private I18n i18n; @Mock private TaskService taskService; @Mock private ApplicationContext applicationContext; @Before public void setUp() throws Exception { instance = new ClientUpdateServiceImpl(); instance.notificationService = notificationService; instance.i18n = i18n; instance.taskService = taskService; instance.applicationContext = applicationContext; doAnswer(invocation -> invocation.getArgumentAt(0, Object.class)).when(taskService).submitTask(any()); } /** * Never version is available on server. */ @Test @SuppressWarnings("unchecked") public void testCheckForUpdateInBackgroundUpdateAvailable() throws Exception { instance.currentVersion = new ComparableVersion("v0.4.8.0-alpha"); CheckForUpdateTask taskMock = mock(CheckForUpdateTask.class, withSettings().useConstructor()); when(applicationContext.getBean(CheckForUpdateTask.class)).thenReturn(taskMock); UpdateInfo updateInfo = new UpdateInfo("v0.4.8.1-alpha", "test.exe", new URL("http://www.example.com"), 56098816, new URL("http://www.example.com")); when(taskMock.getFuture()).thenReturn(CompletableFuture.completedFuture(updateInfo)); instance.checkForUpdateInBackground(); verify(taskService).submitTask(taskMock); ArgumentCaptor<PersistentNotification> captor = ArgumentCaptor.forClass(PersistentNotification.class); verify(notificationService).addNotification(captor.capture()); PersistentNotification persistentNotification = captor.getValue(); verify(i18n).get("clientUpdateAvailable.notification", "v0.4.8.1-alpha", Bytes.formatSize(56079360L, i18n.getLocale())); assertThat(persistentNotification.getSeverity(), is(INFO)); } }