ItemCollectionBaseTest.java 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. package cz.davza.studentadventure.objects;
  2. import cz.davza.studentadventure.Items.Book;
  3. import cz.davza.studentadventure.Items.EnergyDrink;
  4. import cz.davza.studentadventure.Items.StickyNote;
  5. import org.junit.jupiter.api.BeforeEach;
  6. import org.junit.jupiter.api.Test;
  7. import static org.junit.jupiter.api.Assertions.*;
  8. /**
  9. * Tests ItemCollectionBase behaviour through PlayerInventory.
  10. * Inventory capacity = 20 bulk units.
  11. * Book bulk = 3, EnergyDrink bulk = 2, StickyNote bulk = 1.
  12. */
  13. class ItemCollectionBaseTest {
  14. private PlayerInventory inventory;
  15. @BeforeEach
  16. void setUp() {
  17. inventory = new PlayerInventory(20);
  18. }
  19. // ── Add ──────────────────────────────────────────────────────────────────
  20. @Test
  21. void addItemIncreasesUsedCapacity() {
  22. inventory.Add(new Book(), 1);
  23. assertEquals(20 - 3, inventory.GetRemainingCapacity());
  24. }
  25. @Test
  26. void addMultipleItemsStackUnderSameKey() {
  27. inventory.Add(new Book(), 2);
  28. ItemStack stack = inventory.GetByItemCode("book");
  29. assertNotNull(stack);
  30. assertEquals(2, stack.getAmount());
  31. }
  32. @Test
  33. void addReturnsZeroWhenAllFit() {
  34. int leftOver = inventory.Add(new Book(), 2); // costs 6 bulk, capacity 20
  35. assertEquals(0, leftOver);
  36. }
  37. @Test
  38. void addReturnsLeftoverWhenCapacityExceeded() {
  39. // capacity 20, book bulk 3 → can fit 6 books (18 bulk), 7th won't fit
  40. int leftOver = inventory.Add(new Book(), 7);
  41. assertEquals(1, leftOver);
  42. }
  43. @Test
  44. void addToExistingStackMergesCorrectly() {
  45. inventory.Add(new Book(), 2);
  46. inventory.Add(new Book(), 1);
  47. ItemStack stack = inventory.GetByItemCode("book");
  48. assertEquals(3, stack.getAmount());
  49. }
  50. @Test
  51. void addZeroBulkItemAlwaysFits() {
  52. // StickyNote has bulk 1 actually — test with a full inventory of high-bulk items
  53. // fill to 18 bulk (6 books), then add sticky note (bulk 1) — still 2 bulk remaining
  54. inventory.Add(new Book(), 6);
  55. int leftOver = inventory.Add(new StickyNote("test"), 1);
  56. assertEquals(0, leftOver);
  57. }
  58. // ── Remove ───────────────────────────────────────────────────────────────
  59. @Test
  60. void removeDecreasesStackAmount() {
  61. inventory.Add(new Book(), 3);
  62. inventory.Remove("book", 1);
  63. assertEquals(2, inventory.GetByItemCode("book").getAmount());
  64. }
  65. @Test
  66. void removeDecrementsUsedCapacity() {
  67. inventory.Add(new Book(), 2); // 6 bulk used
  68. inventory.Remove("book", 1); // 3 bulk freed
  69. assertEquals(20 - 3, inventory.GetRemainingCapacity());
  70. }
  71. @Test
  72. void removeEntireStackClearsEntry() {
  73. inventory.Add(new Book(), 2);
  74. inventory.Remove("book", 2);
  75. assertNull(inventory.GetByItemCode("book"));
  76. }
  77. @Test
  78. void removeMoreThanStackSizeClearsEntry() {
  79. inventory.Add(new Book(), 1);
  80. inventory.Remove("book", 99);
  81. assertNull(inventory.GetByItemCode("book"));
  82. }
  83. @Test
  84. void removeNonExistentCodeDoesNotThrow() {
  85. assertDoesNotThrow(() -> inventory.Remove("nonexistent", 1));
  86. }
  87. @Test
  88. void removeRestoresCapacityCorrectly() {
  89. inventory.Add(new EnergyDrink(), 3); // 6 bulk used
  90. inventory.Remove("energy_drink", 3); // all removed
  91. assertEquals(20, inventory.GetRemainingCapacity());
  92. }
  93. // ── GetByItemCode ────────────────────────────────────────────────────────
  94. @Test
  95. void getByItemCodeReturnsNullWhenNotPresent() {
  96. assertNull(inventory.GetByItemCode("book"));
  97. }
  98. @Test
  99. void getByItemCodeReturnsCorrectStack() {
  100. inventory.Add(new Book(), 2);
  101. ItemStack stack = inventory.GetByItemCode("book");
  102. assertNotNull(stack);
  103. assertEquals("book", stack.getItem().getCode());
  104. }
  105. // ── Capacity ─────────────────────────────────────────────────────────────
  106. @Test
  107. void remainingCapacityStartsAtFullCapacity() {
  108. assertEquals(20, inventory.GetRemainingCapacity());
  109. }
  110. @Test
  111. void capacityReturnsConfiguredMax() {
  112. assertEquals(20, inventory.GetCapacity());
  113. }
  114. // ── Empty ────────────────────────────────────────────────────────────────
  115. @Test
  116. void emptyClearsAllItems() {
  117. inventory.Add(new Book(), 2);
  118. inventory.Add(new EnergyDrink(), 1);
  119. inventory.Empty();
  120. assertNull(inventory.GetByItemCode("book"));
  121. assertNull(inventory.GetByItemCode("energy_drink"));
  122. }
  123. @Test
  124. void emptyResetsUsedCapacity() {
  125. inventory.Add(new Book(), 3);
  126. inventory.Empty();
  127. assertEquals(20, inventory.GetRemainingCapacity());
  128. }
  129. // ── GetItems ─────────────────────────────────────────────────────────────
  130. @Test
  131. void getItemsReturnsOnlyOccupiedEntries() {
  132. inventory.Add(new Book(), 1);
  133. inventory.Add(new EnergyDrink(), 1);
  134. assertEquals(2, inventory.GetItems().size());
  135. }
  136. @Test
  137. void getItemsIsEmptyWhenInventoryEmpty() {
  138. assertTrue(inventory.GetItems().isEmpty());
  139. }
  140. }