package cz.davza.studentadventure.objects; import cz.davza.studentadventure.enums.DeprivationState; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; class PlayerTest { private Player player; @BeforeEach void setUp() { player = new Player("Dave", 20); } @Test void startsWithDefaultStats() { assertEquals(5, player.getIntelligence().getValue()); assertEquals(100, player.getEnergy().getValue()); assertEquals(0, player.getStress().getValue()); } @Test void startsWithStartingMoney() { assertEquals(50, player.getWallet().getMoney()); } @Test void nameIsSet() { assertEquals("Dave", player.getName()); } @Test void idIsNotNull() { assertNotNull(player.getId()); } @Test void addHoursAwakeAccumulates() { player.addHoursAwake(5); player.addHoursAwake(5); assertEquals(DeprivationState.NORMAL, player.getDeprivationState()); // 10 < tired threshold 14 } @Test void deprivationStateTiredAt14Hours() { player.addHoursAwake(14); assertEquals(DeprivationState.TIRED, player.getDeprivationState()); } @Test void deprivationStateDeprivedAt20Hours() { player.addHoursAwake(20); assertEquals(DeprivationState.DEPRIVED, player.getDeprivationState()); } @Test void resetHoursAwakeSetsToNormal() { player.addHoursAwake(25); player.resetHoursAwake(); assertEquals(DeprivationState.NORMAL, player.getDeprivationState()); } @Test void multiplierIs1WhenNormal() { assertEquals(1.0, player.getDeprivationMultiplier(), 0.001); } @Test void multiplierIs1point3WhenTired() { player.addHoursAwake(14); assertEquals(1.3, player.getDeprivationMultiplier(), 0.001); } @Test void multiplierIncreasesWhenDeprived() { player.addHoursAwake(21); // 1 hour past deprived threshold assertTrue(player.getDeprivationMultiplier() > 1.3); } @Test void multiplierCapsAt3() { player.addHoursAwake(100); assertEquals(3.0, player.getDeprivationMultiplier(), 0.001); } @Test void printStatsContainsMoneyFromWallet() { String stats = player.printStats(); assertTrue(stats.contains("50 coins")); } @Test void printStatsContainsAllStatNames() { String stats = player.printStats(); assertTrue(stats.contains("Intelligence")); assertTrue(stats.contains("Energy")); assertTrue(stats.contains("Stress")); } }