package com.faforever.client.chat; import com.faforever.client.audio.AudioController; import com.faforever.client.i18n.I18n; import com.faforever.client.notification.NotificationService; import com.faforever.client.notification.TransientNotification; import com.faforever.client.player.PlayerService; import com.faforever.client.preferences.ChatPrefs; import com.faforever.client.preferences.Preferences; import com.faforever.client.preferences.PreferencesService; import com.faforever.client.test.AbstractPlainJavaFxTest; import com.sun.javafx.scene.control.skin.TabPaneSkin; import javafx.scene.control.TabPane; import javafx.stage.Stage; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; import org.mockito.Mock; import org.testfx.util.WaitForAsyncUtils; import java.io.IOException; import java.time.Instant; import static junit.framework.TestCase.assertTrue; import static org.junit.Assert.*; import static org.mockito.Matchers.any; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyZeroInteractions; import static org.mockito.Mockito.when; public class PrivateChatTabControllerTest extends AbstractPlainJavaFxTest { @Mock PreferencesService preferencesService; @Mock Preferences preferences; @Mock ChatPrefs chatPrefs; @Mock PlayerService playerService; @Mock AudioController audioController; @Mock NotificationService notificationService; @Mock I18n i18n; private PrivateChatTabController instance; private String playerName; @Before public void setUp() throws IOException { instance = loadController("private_chat_tab.fxml"); instance.preferencesService = preferencesService; instance.playerService = playerService; instance.audioController = audioController; instance.notificationService = notificationService; instance.i18n = i18n; WaitForAsyncUtils.waitForAsyncFx(3000, () -> instance.stage = new Stage()); playerName = "testUser"; PlayerInfoBean playerInfoBean = new PlayerInfoBean(playerName); instance.setReceiver(playerName); when(preferencesService.getPreferences()).thenReturn(preferences); when(preferences.getChat()).thenReturn(chatPrefs); when(playerService.getPlayerForUsername(playerName)).thenReturn(playerInfoBean); TabPane tabPane = new TabPane(); tabPane.setSkin(new TabPaneSkin(tabPane)); WaitForAsyncUtils.waitForAsyncFx(5000, () -> { getRoot().getChildren().setAll(tabPane); tabPane.getTabs().add(instance.getRoot()); }); } @Test public void testOnChatMessageUnfocusedTriggersNotification() throws Exception { WaitForAsyncUtils.waitForAsyncFx(5000, () -> getRoot().getScene().getWindow().hide()); instance.onChatMessage(new ChatMessage(playerName, Instant.now(), playerName, "Test message")); verify(notificationService).addNotification(any(TransientNotification.class)); } @Test public void testOnChatMessageFocusedDoesntTriggersNotification() throws Exception { instance.onChatMessage(new ChatMessage(playerName, Instant.now(), playerName, "Test message")); verifyZeroInteractions(notificationService); } @Test public void onChatMessageTestNotFoeShowFoe() { when(chatPrefs.getHideFoeMessages()).thenReturn(false); instance.onChatMessage(new ChatMessage(playerName, Instant.now(), playerName, "Test message")); } @Ignore("Not yet implemented") @Test public void onChatMessageTestNotFoeHideFoe() { } @Ignore("Not yet implemented") @Test public void onChatMessageTestIsFoeShowFoe() { } @Ignore("Not yet implemented") @Test public void onChatMessageTestIsFoeHideFoe() { } @Test public void onPlayerConnectedTest() { assertFalse(instance.isUserOffline()); instance.onPlayerDisconnected(playerName, null); instance.onPlayerConnected(playerName, null); assertFalse(instance.isUserOffline()); } @Test public void onPlayerDisconnected() { assertFalse(instance.isUserOffline()); instance.onPlayerDisconnected(playerName, null); assertTrue(instance.isUserOffline()); } }