package com.faforever.client.chat; import com.faforever.client.achievements.AchievementDefinitionBuilder; import com.faforever.client.achievements.AchievementItemController; import com.faforever.client.achievements.AchievementService; import com.faforever.client.achievements.PlayerAchievementBuilder; import com.faforever.client.api.AchievementState; import com.faforever.client.api.RatingType; import com.faforever.client.domain.RatingHistoryDataPoint; import com.faforever.client.events.EventService; import com.faforever.client.i18n.I18n; import com.faforever.client.player.PlayerInfoBeanBuilder; import com.faforever.client.preferences.Preferences; import com.faforever.client.preferences.PreferencesService; import com.faforever.client.stats.StatisticsService; import com.faforever.client.test.AbstractPlainJavaFxTest; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; import org.springframework.context.ApplicationContext; import java.time.LocalDateTime; import java.util.Arrays; import java.util.HashMap; import java.util.Locale; import java.util.concurrent.CompletableFuture; import static java.util.Arrays.asList; import static java.util.Collections.singletonList; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.nullValue; import static org.junit.Assert.assertThat; import static org.mockito.Matchers.any; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; public class UserInfoWindowControllerTest extends AbstractPlainJavaFxTest { private static final String PLAYER_NAME = "junit"; private static final int PLAYER_ID = 123; private UserInfoWindowController instance; private Locale locale = Locale.US; @Mock private CountryFlagService countryFlagService; @Mock private I18n i18n; @Mock private StatisticsService statisticsService; @Mock private AchievementService achievementService; @Mock private EventService eventService; @Mock private ApplicationContext applicationContext; @Mock private PreferencesService preferencesService; @Mock private Preferences preferences; @Mock private AchievementItemController achievementItemController; @Before public void setUp() throws Exception { instance = loadController("user_info_window.fxml"); instance.countryFlagService = countryFlagService; instance.locale = locale; instance.i18n = i18n; instance.statisticsService = statisticsService; instance.achievementService = achievementService; instance.eventService = eventService; instance.applicationContext = applicationContext; instance.preferencesService = preferencesService; when(preferencesService.getPreferences()).thenReturn(preferences); when(preferences.getThemeName()).thenReturn("default"); when(statisticsService.getRatingHistory(any(), eq(PLAYER_ID))).thenReturn(CompletableFuture.completedFuture(Arrays.asList( new RatingHistoryDataPoint(LocalDateTime.now(), 1500, 50), new RatingHistoryDataPoint(LocalDateTime.now().plusDays(1), 1500, 50) ))); } @Test public void testSetPlayerInfoBeanNoAchievementUnlocked() throws Exception { when(achievementService.getAchievementDefinitions()).thenReturn(CompletableFuture.completedFuture(singletonList( AchievementDefinitionBuilder.create().defaultValues().get() ))); when(applicationContext.getBean(AchievementItemController.class)).thenReturn(achievementItemController); when(achievementService.getPlayerAchievements(PLAYER_NAME)).thenReturn(CompletableFuture.completedFuture( singletonList(PlayerAchievementBuilder.create().defaultValues().get()) )); when(eventService.getPlayerEvents(PLAYER_NAME)).thenReturn(CompletableFuture.completedFuture(new HashMap<>())); instance.setPlayerInfoBean(PlayerInfoBeanBuilder.create(PLAYER_NAME).id(PLAYER_ID).get()); verify(achievementService).getAchievementDefinitions(); verify(achievementService).getPlayerAchievements(PLAYER_NAME); verify(eventService).getPlayerEvents(PLAYER_NAME); assertThat(instance.mostRecentAchievementPane.isVisible(), is(false)); } @Test public void testGetRoot() throws Exception { assertThat(instance.getRoot(), is(instance.userInfoRoot)); assertThat(instance.getRoot().getParent(), is(nullValue())); } @Test public void testSetPlayerInfoBean() throws Exception { when(achievementService.getAchievementDefinitions()).thenReturn(CompletableFuture.completedFuture(asList( AchievementDefinitionBuilder.create().id("foo-bar").get(), AchievementDefinitionBuilder.create().defaultValues().get() ))); when(applicationContext.getBean(AchievementItemController.class)).thenReturn(achievementItemController); when(achievementService.getPlayerAchievements(PLAYER_NAME)).thenReturn(CompletableFuture.completedFuture(asList( PlayerAchievementBuilder.create().defaultValues().achievementId("foo-bar").state(AchievementState.UNLOCKED).get(), PlayerAchievementBuilder.create().defaultValues().get() ))); when(eventService.getPlayerEvents(PLAYER_NAME)).thenReturn(CompletableFuture.completedFuture(new HashMap<>())); instance.setPlayerInfoBean(PlayerInfoBeanBuilder.create(PLAYER_NAME).id(PLAYER_ID).get()); verify(achievementService).getAchievementDefinitions(); verify(achievementService).getPlayerAchievements(PLAYER_NAME); verify(eventService).getPlayerEvents(PLAYER_NAME); assertThat(instance.mostRecentAchievementPane.isVisible(), is(true)); } @Test public void testOnGlobalRatingButtonClicked() throws Exception { testSetPlayerInfoBean(); instance.globalButtonClicked(); verify(statisticsService, times(2)).getRatingHistory(RatingType.GLOBAL, PLAYER_ID); } @Test public void testOn1v1RatingButtonClicked() throws Exception { testSetPlayerInfoBean(); instance.ladder1v1ButtonClicked(); verify(statisticsService).getRatingHistory(RatingType.LADDER_1V1, PLAYER_ID); } }