PickupCommandTest.java 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. package cz.davza.studentadventure.commands;
  2. import cz.davza.studentadventure.Items.Book;
  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 org.junit.jupiter.api.BeforeEach;
  8. import org.junit.jupiter.api.Test;
  9. import static cz.davza.studentadventure.TestHelpers.execute;
  10. import static org.junit.jupiter.api.Assertions.*;
  11. class PickupCommandTest {
  12. private GameData context;
  13. @BeforeEach
  14. void setUp() {
  15. context = TestHelpers.buildGameData();
  16. // Bedroom starts with a Bed and Money — add a Book for pickup tests
  17. context.getMap().getCurrentRoom().getItems().Add(new Book(), 3);
  18. }
  19. @Test
  20. void pickupItemAddsToInventory() {
  21. execute("pickup book", context);
  22. assertNotNull(context.getPlayer().getInventory().GetByItemCode("book"));
  23. }
  24. @Test
  25. void pickupItemRemovesFromRoom() {
  26. int before = context.getMap().getCurrentRoom().getItems().GetByItemCode("book").getAmount();
  27. execute("pickup book", context);
  28. int after = context.getMap().getCurrentRoom().getItems().GetByItemCode("book").getAmount();
  29. assertEquals(before - 1, after);
  30. }
  31. @Test
  32. void pickupSpecificAmountPicksCorrectNumber() {
  33. execute("pickup book 2", context);
  34. assertEquals(2, context.getPlayer().getInventory().GetByItemCode("book").getAmount());
  35. }
  36. @Test
  37. void pickupReturnsSuccessState() {
  38. CommandResult result = execute("pickup book", context);
  39. assertEquals(CommandState.SUCCESS, result.getResultState());
  40. }
  41. @Test
  42. void pickupNonExistentItemReturnsItemNotFound() {
  43. CommandResult result = execute("pickup energy_drink", context);
  44. assertEquals(CommandState.ITEM_NOT_FOUND, result.getResultState());
  45. }
  46. @Test
  47. void pickupNonCollectableReturnsNotCollectable() {
  48. // Bed is in bedroom and is not collectable
  49. CommandResult result = execute("pickup bed", context);
  50. assertEquals(CommandState.ITEM_NOT_COLLECTABLE, result.getResultState());
  51. }
  52. @Test
  53. void pickupWithNoParamsReturnsInvalidParams() {
  54. CommandResult result = execute("pickup", context);
  55. assertEquals(CommandState.INVALID_PARAMS, result.getResultState());
  56. }
  57. @Test
  58. void pickupWhenInventoryFullReturnsInventoryFull() {
  59. // Fill inventory: capacity 20, book bulk 3 → 6 books fill 18, 7th won't all fit
  60. context.getMap().getCurrentRoom().getItems().Add(new Book(), 10);
  61. // Add 6 books to inventory (uses 18 capacity, 2 remaining — not enough for another book at bulk 3)
  62. context.getPlayer().getInventory().Add(new Book(), 6);
  63. CommandResult result = execute("pickup book 1", context);
  64. assertEquals(CommandState.INVENTORY_FULL, result.getResultState());
  65. }
  66. @Test
  67. void pickupWithNonNumberAmountReturnsInvalidParams() {
  68. CommandResult result = execute("pickup book abc", context);
  69. assertEquals(CommandState.INVALID_PARAMS, result.getResultState());
  70. }
  71. @Test
  72. void pickupDefaultsToOneWhenNoAmountGiven() {
  73. execute("pickup book", context);
  74. assertEquals(1, context.getPlayer().getInventory().GetByItemCode("book").getAmount());
  75. }
  76. }