package cz.davza.studentadventure.commands; import cz.davza.studentadventure.Items.Book; import cz.davza.studentadventure.TestHelpers; import cz.davza.studentadventure.enums.CommandState; import cz.davza.studentadventure.objects.CommandResult; import cz.davza.studentadventure.objects.GameData; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import static cz.davza.studentadventure.TestHelpers.execute; import static org.junit.jupiter.api.Assertions.*; class WalkCommandTest { private GameData context; @BeforeEach void setUp() { context = TestHelpers.buildGameData(); // starts in Bedroom } @Test void walkToValidExitSetsNextRoom() { execute("walk hallway", context); assertTrue(context.getMap().hasPendingRoomChange()); } @Test void walkToValidExitReturnsRoomChanged() { CommandResult result = execute("walk hallway", context); assertEquals(CommandState.ROOM_CHANGED, result.getResultState()); } @Test void walkAdvancesTimeByTwoHours() { int before = context.getTime().getHour(); execute("walk hallway", context); assertEquals(before + 2, context.getTime().getHour()); } @Test void walkAdvancesHoursAwake() { execute("walk hallway", context); // 1 hour awake — still NORMAL assertEquals(cz.davza.studentadventure.enums.DeprivationState.NORMAL, context.getPlayer().getDeprivationState()); } @Test void walkToInvalidExitReturnsFailed() { CommandResult result = execute("walk narnia", context); assertEquals(CommandState.FAILED, result.getResultState()); } @Test void walkWithNoParamsReturnsInvalidParams() { CommandResult result = execute("walk", context); assertEquals(CommandState.INVALID_PARAMS, result.getResultState()); } @Test void walkToClassroomWithoutBookReturnsFailed() { // Bedroom → hallway (commit) → classroom (no book) execute("walk hallway", context); context.getMap().commitRoomChange(); CommandResult result = execute("walk classroom", context); assertEquals(CommandState.FAILED, result.getResultState()); } @Test void walkToClassroomWithoutBookAppliesStressPenalty() { execute("walk hallway", context); context.getMap().commitRoomChange(); int stressBefore = context.getPlayer().getStress().getValue(); execute("walk classroom", context); assertTrue(context.getPlayer().getStress().getValue() > stressBefore); } @Test void walkToClassroomWithBookReturnsRoomChanged() { context.getPlayer().getInventory().Add(new Book(), 1); execute("walk hallway", context); context.getMap().commitRoomChange(); CommandResult result = execute("walk classroom", context); assertEquals(CommandState.ROOM_CHANGED, result.getResultState()); } @Test void walkToExamRoomReturnsActionPending() { // Bedroom → hallway → classroom (with book) → examroom context.getPlayer().getInventory().Add(new Book(), 1); execute("walk hallway", context); context.getMap().commitRoomChange(); execute("walk classroom", context); context.getMap().commitRoomChange(); CommandResult result = execute("walk examroom", context); assertEquals(CommandState.ACTION_PENDING, result.getResultState()); } }