| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- package cz.davza.studentadventure.objects;
- import cz.davza.studentadventure.Items.Book;
- import cz.davza.studentadventure.Items.EnergyDrink;
- import cz.davza.studentadventure.Items.StickyNote;
- import org.junit.jupiter.api.BeforeEach;
- import org.junit.jupiter.api.Test;
- import static org.junit.jupiter.api.Assertions.*;
- /**
- * Tests ItemCollectionBase behaviour through PlayerInventory.
- * Inventory capacity = 20 bulk units.
- * Book bulk = 3, EnergyDrink bulk = 2, StickyNote bulk = 1.
- */
- class ItemCollectionBaseTest {
- private PlayerInventory inventory;
- @BeforeEach
- void setUp() {
- inventory = new PlayerInventory(20);
- }
- // ── Add ──────────────────────────────────────────────────────────────────
- @Test
- void addItemIncreasesUsedCapacity() {
- inventory.Add(new Book(), 1);
- assertEquals(20 - 3, inventory.GetRemainingCapacity());
- }
- @Test
- void addMultipleItemsStackUnderSameKey() {
- inventory.Add(new Book(), 2);
- ItemStack stack = inventory.GetByItemCode("book");
- assertNotNull(stack);
- assertEquals(2, stack.getAmount());
- }
- @Test
- void addReturnsZeroWhenAllFit() {
- int leftOver = inventory.Add(new Book(), 2); // costs 6 bulk, capacity 20
- assertEquals(0, leftOver);
- }
- @Test
- void addReturnsLeftoverWhenCapacityExceeded() {
- // capacity 20, book bulk 3 → can fit 6 books (18 bulk), 7th won't fit
- int leftOver = inventory.Add(new Book(), 7);
- assertEquals(1, leftOver);
- }
- @Test
- void addToExistingStackMergesCorrectly() {
- inventory.Add(new Book(), 2);
- inventory.Add(new Book(), 1);
- ItemStack stack = inventory.GetByItemCode("book");
- assertEquals(3, stack.getAmount());
- }
- @Test
- void addZeroBulkItemAlwaysFits() {
- // StickyNote has bulk 1 actually — test with a full inventory of high-bulk items
- // fill to 18 bulk (6 books), then add sticky note (bulk 1) — still 2 bulk remaining
- inventory.Add(new Book(), 6);
- int leftOver = inventory.Add(new StickyNote("test"), 1);
- assertEquals(0, leftOver);
- }
- // ── Remove ───────────────────────────────────────────────────────────────
- @Test
- void removeDecreasesStackAmount() {
- inventory.Add(new Book(), 3);
- inventory.Remove("book", 1);
- assertEquals(2, inventory.GetByItemCode("book").getAmount());
- }
- @Test
- void removeDecrementsUsedCapacity() {
- inventory.Add(new Book(), 2); // 6 bulk used
- inventory.Remove("book", 1); // 3 bulk freed
- assertEquals(20 - 3, inventory.GetRemainingCapacity());
- }
- @Test
- void removeEntireStackClearsEntry() {
- inventory.Add(new Book(), 2);
- inventory.Remove("book", 2);
- assertNull(inventory.GetByItemCode("book"));
- }
- @Test
- void removeMoreThanStackSizeClearsEntry() {
- inventory.Add(new Book(), 1);
- inventory.Remove("book", 99);
- assertNull(inventory.GetByItemCode("book"));
- }
- @Test
- void removeNonExistentCodeDoesNotThrow() {
- assertDoesNotThrow(() -> inventory.Remove("nonexistent", 1));
- }
- @Test
- void removeRestoresCapacityCorrectly() {
- inventory.Add(new EnergyDrink(), 3); // 6 bulk used
- inventory.Remove("energy_drink", 3); // all removed
- assertEquals(20, inventory.GetRemainingCapacity());
- }
- // ── GetByItemCode ────────────────────────────────────────────────────────
- @Test
- void getByItemCodeReturnsNullWhenNotPresent() {
- assertNull(inventory.GetByItemCode("book"));
- }
- @Test
- void getByItemCodeReturnsCorrectStack() {
- inventory.Add(new Book(), 2);
- ItemStack stack = inventory.GetByItemCode("book");
- assertNotNull(stack);
- assertEquals("book", stack.getItem().getCode());
- }
- // ── Capacity ─────────────────────────────────────────────────────────────
- @Test
- void remainingCapacityStartsAtFullCapacity() {
- assertEquals(20, inventory.GetRemainingCapacity());
- }
- @Test
- void capacityReturnsConfiguredMax() {
- assertEquals(20, inventory.GetCapacity());
- }
- // ── Empty ────────────────────────────────────────────────────────────────
- @Test
- void emptyClearsAllItems() {
- inventory.Add(new Book(), 2);
- inventory.Add(new EnergyDrink(), 1);
- inventory.Empty();
- assertNull(inventory.GetByItemCode("book"));
- assertNull(inventory.GetByItemCode("energy_drink"));
- }
- @Test
- void emptyResetsUsedCapacity() {
- inventory.Add(new Book(), 3);
- inventory.Empty();
- assertEquals(20, inventory.GetRemainingCapacity());
- }
- // ── GetItems ─────────────────────────────────────────────────────────────
- @Test
- void getItemsReturnsOnlyOccupiedEntries() {
- inventory.Add(new Book(), 1);
- inventory.Add(new EnergyDrink(), 1);
- assertEquals(2, inventory.GetItems().size());
- }
- @Test
- void getItemsIsEmptyWhenInventoryEmpty() {
- assertTrue(inventory.GetItems().isEmpty());
- }
- }
|