package dev.llan.model.pieces.inanimates; import dev.llan.model.Game; import dev.llan.model.GameContainer; import dev.llan.model.board.Grid; import dev.llan.model.pieces.player.Player; import dev.llan.events.GameEvent; import dev.llan.events.GridUpdatedEvent; import dev.llan.events.PlayerUpdatedEvent; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import java.util.List; import static org.junit.jupiter.api.Assertions.*; class TreasureChestTest { private TreasureChest treasureChest; private Game game; @BeforeEach void setUp() { GameContainer.getInstance().initGame(); game = GameContainer.getInstance().getCurrentGame(); game.getInanimates().stream() .filter(inanimate -> (inanimate instanceof TreasureChest)) .findFirst() .ifPresent(inanimate -> treasureChest = (TreasureChest) inanimate); } @Test void collect() { assertFalse(treasureChest.getCollected()); treasureChest.collect(); assertTrue(treasureChest.getCollected()); } @Test void interact() { List events = treasureChest.interact(); assertNotNull(events); assertEquals(2, events.size()); assertInstanceOf(PlayerUpdatedEvent.class, events.get(0)); assertInstanceOf(GridUpdatedEvent.class, events.get(1)); } @Test void testClone() { Grid clonedGrid = game.getMap().cloneGrid(); Player clonedPlayer = game.getPlayer().clone(clonedGrid); TreasureChest clone = (TreasureChest) treasureChest.clone(clonedGrid, clonedPlayer); assertNotSame(treasureChest, clone); assertNotSame(treasureChest.playerInventory, clone.playerInventory); assertNotSame(treasureChest.tile, clone.tile); assertEquals(treasureChest.getPosition(), clone.getPosition()); assertEquals(treasureChest.getCollected(), clone.getCollected()); } }