package org.mafagafogigante.dungeon.achievements; import org.mafagafogigante.dungeon.achievements.comparators.UnlockedAchievementComparators; import org.mafagafogigante.dungeon.date.Date; import org.mafagafogigante.dungeon.date.DungeonTimeUnit; import org.mafagafogigante.dungeon.game.Id; import org.mafagafogigante.dungeon.game.Point; import org.mafagafogigante.dungeon.stats.Statistics; import org.mafagafogigante.dungeon.util.CounterMap; import org.junit.Assert; import org.junit.Test; import java.util.Collections; import java.util.Comparator; import java.util.List; public class AchievementTrackerTest { @Test public void testGetUnlockedCountShouldReturnZeroInNewAchievementTracker() throws Exception { AchievementTracker achievementTracker = new AchievementTracker(new Statistics()); Assert.assertEquals(0, achievementTracker.getUnlockedCount()); } @Test public void testGetUnlockedCountShouldBeUpdatedAsExpected() throws Exception { AchievementBuilder achievementBuilder = new AchievementBuilder(); achievementBuilder.setId("ACHIEVEMENT"); List<Achievement> achievements = Collections.singletonList(achievementBuilder.createAchievement()); AchievementStore achievementStore = AchievementStoreFactory.makeAchievementStore(achievements); AchievementTracker achievementTracker = new AchievementTracker(new Statistics()); Assert.assertEquals(0, achievementTracker.getUnlockedCount()); achievementTracker.update(achievementStore, new Date(1, 1, 1)); Assert.assertEquals(1, achievementTracker.getUnlockedCount()); } @Test public void testGetUnlockedAchievementsReturnsTheExpectedUnlockedAchievements() throws Exception { AchievementBuilder achievementBuilder = new AchievementBuilder(); achievementBuilder.setId("ACHIEVEMENT"); final String name = "Name"; final String info = "Info"; achievementBuilder.setName(name); achievementBuilder.setInfo(info); List<Achievement> achievements = Collections.singletonList(achievementBuilder.createAchievement()); AchievementStore achievementStore = AchievementStoreFactory.makeAchievementStore(achievements); AchievementTracker tracker = new AchievementTracker(new Statistics()); final Date date = new Date(1, 1, 1); tracker.update(achievementStore, date); Comparator<UnlockedAchievement> defaultComparator = UnlockedAchievementComparators.getDefaultComparator(); List<UnlockedAchievement> unlocked = tracker.getUnlockedAchievements(defaultComparator); for (UnlockedAchievement unlockedAchievement : unlocked) { Assert.assertEquals(name, unlockedAchievement.getName()); Assert.assertEquals(info, unlockedAchievement.getInfo()); Assert.assertEquals(date, unlockedAchievement.getDate()); } } @Test public void testHasNotBeenUnlocked() throws Exception { final Statistics statistics = new Statistics(); final AchievementTracker tracker = new AchievementTracker(statistics); AchievementBuilder achievementBuilder = new AchievementBuilder(); achievementBuilder.setId("ACHIEVEMENT"); final String name = "Name"; final String info = "Info"; achievementBuilder.setName(name); achievementBuilder.setInfo(info); achievementBuilder.setText("Text"); CounterMap<Id> counterMap = new CounterMap<>(); counterMap.incrementCounter(new Id("PLACE")); achievementBuilder.setVisitedLocations(counterMap); Achievement achievement = achievementBuilder.createAchievement(); List<Achievement> achievements = Collections.singletonList(achievement); AchievementStore achievementStore = AchievementStoreFactory.makeAchievementStore(achievements); final Date date = new Date(1, 1, 1); tracker.update(achievementStore, date); Assert.assertTrue(tracker.hasNotBeenUnlocked(achievement)); statistics.getExplorationStatistics().addVisit(new Point(0, 0, 0), new Id("PLACE")); Assert.assertTrue(tracker.hasNotBeenUnlocked(achievement)); tracker.update(achievementStore, date.plus(1, DungeonTimeUnit.SECOND)); Assert.assertFalse(tracker.hasNotBeenUnlocked(achievement)); } }