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<GameEvent> 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());
}
}