package com.faforever.client.achievements; import com.faforever.client.api.AchievementDefinition; import com.faforever.client.api.AchievementState; import com.faforever.client.api.AchievementType; import com.faforever.client.api.PlayerAchievement; import com.faforever.client.i18n.I18n; import com.faforever.client.preferences.Preferences; import com.faforever.client.preferences.PreferencesService; import com.faforever.client.test.AbstractPlainJavaFxTest; import javafx.scene.effect.ColorAdjust; import javafx.scene.image.Image; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; import static com.faforever.client.theme.ThemeService.DEFAULT_ACHIEVEMENT_IMAGE; import static org.hamcrest.CoreMatchers.instanceOf; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.CoreMatchers.nullValue; import static org.junit.Assert.*; import static org.mockito.Mockito.when; public class AchievementItemControllerTest extends AbstractPlainJavaFxTest { private AchievementItemController instance; @Mock private PreferencesService preferencesService; @Mock private Preferences preferences; @Mock private I18n i18n; @Mock private AchievementService achievementService; @Before public void setUp() throws Exception { instance = loadController("achievement_item.fxml"); instance.preferencesService = preferencesService; instance.i18n = i18n; instance.achievementService = achievementService; } @Test public void testGetRoot() throws Exception { assertThat(instance.getRoot(), is(instance.achievementItemRoot)); assertThat(instance.getRoot().getParent(), is(nullValue())); } @Test public void testSetAchievementDefinition() throws Exception { AchievementDefinition achievementDefinition = AchievementDefinitionBuilder.create().defaultValues().get(); when(achievementService.getRevealedIcon(achievementDefinition)).thenReturn(new Image(getThemeFile(DEFAULT_ACHIEVEMENT_IMAGE))); instance.setAchievementDefinition(achievementDefinition); assertThat(instance.nameLabel.getText(), is(achievementDefinition.getName())); assertThat(instance.descriptionLabel.getText(), is(achievementDefinition.getDescription())); assertThat(instance.pointsLabel.getText(), is(String.format("%d", achievementDefinition.getExperiencePoints()))); assertThat(instance.imageView.getImage(), notNullValue()); assertThat(instance.imageView.getEffect(), is(instanceOf(ColorAdjust.class))); assertThat(instance.imageView.getOpacity(), is(0.5)); assertThat(instance.progressBar.isVisible(), is(true)); } @Test public void testSetAchievementDefinitionStandardHasNoProgress() throws Exception { instance.setAchievementDefinition(AchievementDefinitionBuilder.create().defaultValues() .type(AchievementType.STANDARD) .get()); assertThat(instance.progressBar.isVisible(), is(false)); assertThat(instance.progressLabel.isVisible(), is(false)); } @Test public void testSetPlayerAchievementStandardDoesntUpdateProgress() throws Exception { instance.setAchievementDefinition(AchievementDefinitionBuilder.create().defaultValues() .type(AchievementType.STANDARD) .get()); PlayerAchievement playerAchievement = PlayerAchievementBuilder.create().defaultValues() .state(AchievementState.UNLOCKED) .currentSteps(50) .get(); instance.setPlayerAchievement(playerAchievement); assertThat(instance.progressBar.getProgress(), is(0.0)); } @Test(expected = IllegalStateException.class) public void testSetPlayerAchievementWithUnsetAchievementThrowsIse() throws Exception { instance.setPlayerAchievement(new PlayerAchievement()); } @Test(expected = IllegalStateException.class) public void testSetPlayerAchievementIdDoesntMatch() throws Exception { instance.setAchievementDefinition(AchievementDefinitionBuilder.create().defaultValues().get()); PlayerAchievement playerAchievement = PlayerAchievementBuilder.create().defaultValues() .achievementId("foobar") .get(); instance.setPlayerAchievement(playerAchievement); } @Test public void testSetPlayerAchievementRevealed() throws Exception { instance.setAchievementDefinition(AchievementDefinitionBuilder.create().defaultValues().get()); PlayerAchievement playerAchievement = PlayerAchievementBuilder.create().defaultValues() .state(AchievementState.REVEALED) .get(); instance.setPlayerAchievement(playerAchievement); assertThat(instance.imageView.getEffect(), is(instanceOf(ColorAdjust.class))); assertThat(instance.imageView.getOpacity(), is(0.5)); } @Test public void testSetPlayerAchievementUnlocked() throws Exception { instance.setAchievementDefinition(AchievementDefinitionBuilder.create().defaultValues().get()); PlayerAchievement playerAchievement = PlayerAchievementBuilder.create().defaultValues() .state(AchievementState.UNLOCKED) .currentSteps(50) .get(); instance.setPlayerAchievement(playerAchievement); assertThat(instance.imageView.getEffect(), is(nullValue())); assertThat(instance.imageView.getOpacity(), is(1.0)); assertThat(instance.progressBar.isVisible(), is(true)); assertThat(instance.progressBar.getProgress(), is(0.5)); } }