package cz.davza.studentadventure.commands; import cz.davza.studentadventure.Items.Book; import cz.davza.studentadventure.Items.EnergyDrink; import cz.davza.studentadventure.TestHelpers; import cz.davza.studentadventure.enums.CommandState; import cz.davza.studentadventure.objects.CommandResult; import cz.davza.studentadventure.objects.GameData; import cz.davza.studentadventure.objects.Player; 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 ConsumeCommandTest { private GameData context; private Player player; @BeforeEach void setUp() { context = TestHelpers.buildGameData(); player = context.getPlayer(); player.getInventory().Add(new EnergyDrink(), 2); } @Test void consumeAppliesItemEffect() { player.getEnergy().decrease(50); int before = player.getEnergy().getValue(); execute("consume energy_drink", context); assertEquals(before + EnergyDrink.ENERGY_RESTORE, player.getEnergy().getValue()); } @Test void consumeRemovesOneFromStack() { execute("consume energy_drink", context); assertEquals(1, player.getInventory().GetByItemCode("energy_drink").getAmount()); } @Test void consumeLastItemClearsInventoryEntry() { player.getInventory().Add(new EnergyDrink(), 1); // inventory has 2 from setUp + 1 = 3 total execute("consume energy_drink", context); execute("consume energy_drink", context); execute("consume energy_drink", context); assertNull(player.getInventory().GetByItemCode("energy_drink")); } @Test void consumeRestoresInventoryCapacity() { int before = player.getInventory().GetRemainingCapacity(); execute("consume energy_drink", context); assertEquals(before + new EnergyDrink().getBulk(), player.getInventory().GetRemainingCapacity()); } @Test void consumeReturnsSuccessState() { CommandResult result = execute("consume energy_drink", context); assertEquals(CommandState.SUCCESS, result.getResultState()); } @Test void consumeItemNotInInventoryReturnsItemNotFound() { CommandResult result = execute("consume mouldy_cheese", context); assertEquals(CommandState.ITEM_NOT_FOUND, result.getResultState()); } @Test void consumeNonConsumableReturnsFailed() { player.getInventory().Add(new Book(), 1); CommandResult result = execute("consume book", context); assertEquals(CommandState.FAILED, result.getResultState()); } @Test void consumeWithNoParamsReturnsInvalidParams() { CommandResult result = execute("consume", context); assertEquals(CommandState.INVALID_PARAMS, result.getResultState()); } @Test void consumeEnergyCappsAt100() { // energy already at 100 — drink shouldn't push above 100 execute("consume energy_drink", context); assertEquals(100, player.getEnergy().getValue()); } }