ItemCollectionTest.java 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  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.interfaces.IItem;
  5. import org.junit.jupiter.api.BeforeEach;
  6. import org.junit.jupiter.api.Test;
  7. import static org.junit.jupiter.api.Assertions.*;
  8. class ItemCollectionTest {
  9. private PlayerInventory inventory;
  10. private IItem book;
  11. private IItem drink;
  12. @BeforeEach
  13. void setUp() {
  14. inventory = new PlayerInventory(20); // capacity of 20 bulk
  15. book = new Book(); // bulk = 3
  16. drink = new EnergyDrink();// bulk = 2
  17. }
  18. // ── Add ──────────────────────────────────────────────────────────
  19. @Test
  20. void addItemStoresIt() {
  21. inventory.Add(book, 1);
  22. assertNotNull(inventory.GetByItemCode("book"));
  23. }
  24. @Test
  25. void addItemReturnsZeroLeftoverWhenFits() {
  26. int leftOver = inventory.Add(book, 1);
  27. assertEquals(0, leftOver);
  28. }
  29. @Test
  30. void addItemDecreasesRemainingCapacity() {
  31. inventory.Add(book, 1); // bulk 3
  32. assertEquals(17, inventory.GetRemainingCapacity());
  33. }
  34. @Test
  35. void addMultipleOfSameItemStacksTogether() {
  36. inventory.Add(book, 2);
  37. assertEquals(2, inventory.GetByItemCode("book").getAmount());
  38. }
  39. @Test
  40. void addReturnsLeftoverWhenCapacityExceeded() {
  41. // capacity 20, book bulk 3 → fits 6 (uses 18), 7th overflows
  42. int leftOver = inventory.Add(book, 7);
  43. assertEquals(1, leftOver);
  44. }
  45. @Test
  46. void addDifferentItemsTrackSeparately() {
  47. inventory.Add(book, 1);
  48. inventory.Add(drink, 1);
  49. assertNotNull(inventory.GetByItemCode("book"));
  50. assertNotNull(inventory.GetByItemCode("energy_drink"));
  51. }
  52. @Test
  53. void addZeroItemsDoesNothing() {
  54. // capacity / bulk = 20/3 = 6, asking for 0 → canInsert = min(0, 6) = 0
  55. inventory.Add(book, 0);
  56. assertNull(inventory.GetByItemCode("book"));
  57. assertEquals(20, inventory.GetRemainingCapacity());
  58. }
  59. // ── Remove ───────────────────────────────────────────────────────
  60. @Test
  61. void removeReducesStackAmount() {
  62. inventory.Add(book, 3);
  63. inventory.Remove("book", 1);
  64. assertEquals(2, inventory.GetByItemCode("book").getAmount());
  65. }
  66. @Test
  67. void removeRestoresCapacity() {
  68. inventory.Add(book, 2); // uses 6
  69. inventory.Remove("book", 1); // frees 3
  70. assertEquals(17, inventory.GetRemainingCapacity());
  71. }
  72. @Test
  73. void removeEntireStackCleansUpEntry() {
  74. inventory.Add(book, 1);
  75. inventory.Remove("book", 1);
  76. assertNull(inventory.GetByItemCode("book"));
  77. }
  78. @Test
  79. void removeMoreThanStackRemovesAll() {
  80. inventory.Add(book, 2);
  81. inventory.Remove("book", 10);
  82. assertNull(inventory.GetByItemCode("book"));
  83. }
  84. @Test
  85. void removeMissingCodeIsNoOp() {
  86. assertDoesNotThrow(() -> inventory.Remove("nonexistent", 1));
  87. }
  88. @Test
  89. void removeFullyRestoresCapacityToInitial() {
  90. inventory.Add(book, 2);
  91. inventory.Remove("book", 2);
  92. assertEquals(20, inventory.GetRemainingCapacity());
  93. }
  94. // ── GetByItemCode ─────────────────────────────────────────────────
  95. @Test
  96. void getByItemCodeReturnsNullForMissingItem() {
  97. assertNull(inventory.GetByItemCode("book"));
  98. }
  99. @Test
  100. void getByItemCodeReturnsCorrectStack() {
  101. inventory.Add(drink, 3);
  102. ItemStack stack = inventory.GetByItemCode("energy_drink");
  103. assertNotNull(stack);
  104. assertEquals(3, stack.getAmount());
  105. }
  106. // ── Capacity ──────────────────────────────────────────────────────
  107. @Test
  108. void getRemainingCapacityStartsAtMax() {
  109. assertEquals(20, inventory.GetRemainingCapacity());
  110. }
  111. @Test
  112. void getCapacityReturnsInitialSize() {
  113. assertEquals(20, inventory.GetCapacity());
  114. }
  115. // ── Empty ─────────────────────────────────────────────────────────
  116. @Test
  117. void emptyRemovesAllItems() {
  118. inventory.Add(book, 2);
  119. inventory.Add(drink, 1);
  120. inventory.Empty();
  121. assertTrue(inventory.GetItems().isEmpty());
  122. }
  123. @Test
  124. void emptyResetsUsedCapacity() {
  125. inventory.Add(book, 2);
  126. inventory.Empty();
  127. assertEquals(20, inventory.GetRemainingCapacity());
  128. }
  129. }