package cz.davza.studentadventure.commands; import cz.davza.studentadventure.Items.Book; import cz.davza.studentadventure.Items.Computer; 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 InteractCommandTest { private GameData context; @BeforeEach void setUp() { context = TestHelpers.buildGameData(); // Walk to computer lab: bedroom → hallway → studyroom → computerlab context.getMap().setNextRoom(context.getMap().getCurrentRoom().getExit("hallway")); context.getMap().commitRoomChange(); context.getMap().setNextRoom(context.getMap().getCurrentRoom().getExit("studyroom")); context.getMap().commitRoomChange(); context.getMap().setNextRoom(context.getMap().getCurrentRoom().getExit("computerlab")); context.getMap().commitRoomChange(); } @Test void interactWithComputerReturnsActionPending() { CommandResult result = execute("interact computer", context); assertEquals(CommandState.ACTION_PENDING, result.getResultState()); } @Test void interactWithComputerSetsNewHandler() { CommandResult result = execute("interact computer", context); assertNotNull(result.getNewCommandHandler()); } @Test void interactWithNonExistentItemReturnsNotInteractable() { CommandResult result = execute("interact ghost", context); assertEquals(CommandState.ITEM_NOT_INTERACTABLE, result.getResultState()); } @Test void interactWithCollectableReturnsNotInteractable() { // Book is in computer lab and is collectable, not interactable CommandResult result = execute("interact book", context); assertEquals(CommandState.ITEM_NOT_INTERACTABLE, result.getResultState()); } @Test void interactWithNoParamsReturnsInvalidParams() { CommandResult result = execute("interact", context); assertEquals(CommandState.INVALID_PARAMS, result.getResultState()); } }