BuyCommandTest.java 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. package cz.davza.studentadventure.commands;
  2. import cz.davza.studentadventure.Items.EnergyDrink;
  3. import cz.davza.studentadventure.TestHelpers;
  4. import cz.davza.studentadventure.enums.CommandState;
  5. import cz.davza.studentadventure.objects.CommandResult;
  6. import cz.davza.studentadventure.objects.GameData;
  7. import cz.davza.studentadventure.objects.Player;
  8. import org.junit.jupiter.api.BeforeEach;
  9. import org.junit.jupiter.api.Test;
  10. import static cz.davza.studentadventure.TestHelpers.execute;
  11. import static org.junit.jupiter.api.Assertions.*;
  12. class BuyCommandTest {
  13. private GameData context;
  14. private Player player;
  15. @BeforeEach
  16. void setUp() {
  17. context = TestHelpers.buildGameData();
  18. player = context.getPlayer();
  19. }
  20. @Test
  21. void buyEnergyDrinkDeductsCost() {
  22. int before = player.getWallet().getMoney();
  23. execute("buy energy_drink", context);
  24. assertEquals(before - EnergyDrink.COST, player.getWallet().getMoney());
  25. }
  26. @Test
  27. void buyEnergyDrinkAddsToInventory() {
  28. execute("buy energy_drink", context);
  29. assertNotNull(player.getInventory().GetByItemCode("energy_drink"));
  30. }
  31. @Test
  32. void buyReturnsSuccessState() {
  33. CommandResult result = execute("buy energy_drink", context);
  34. assertEquals(CommandState.SUCCESS, result.getResultState());
  35. }
  36. @Test
  37. void buyWithInsufficientFundsReturnsFailed() {
  38. player.getWallet().spendMoney(player.getWallet().getMoney()); // drain wallet
  39. CommandResult result = execute("buy energy_drink", context);
  40. assertEquals(CommandState.FAILED, result.getResultState());
  41. }
  42. @Test
  43. void buyWithInsufficientFundsDoesNotAddItem() {
  44. player.getWallet().spendMoney(player.getWallet().getMoney());
  45. execute("buy energy_drink", context);
  46. assertNull(player.getInventory().GetByItemCode("energy_drink"));
  47. }
  48. @Test
  49. void buyUnknownItemReturnsFailed() {
  50. CommandResult result = execute("buy sandwich", context);
  51. assertEquals(CommandState.FAILED, result.getResultState());
  52. }
  53. @Test
  54. void buyWithNoParamsReturnsInvalidParams() {
  55. CommandResult result = execute("buy", context);
  56. assertEquals(CommandState.INVALID_PARAMS, result.getResultState());
  57. }
  58. @Test
  59. void buyWhenInventoryFullReturnsInventoryFull() {
  60. // Fill inventory: capacity 20, drink bulk 2 → 10 drinks = 20 bulk
  61. player.getInventory().Add(new EnergyDrink(), 10);
  62. CommandResult result = execute("buy energy_drink", context);
  63. assertEquals(CommandState.INVENTORY_FULL, result.getResultState());
  64. }
  65. @Test
  66. void buyDoesNotSpendMoneyWhenInventoryFull() {
  67. player.getInventory().Add(new EnergyDrink(), 10);
  68. int moneyBefore = player.getWallet().getMoney();
  69. execute("buy energy_drink", context);
  70. assertEquals(moneyBefore, player.getWallet().getMoney());
  71. }
  72. }