mourning-ember / src / test / java / dev / llan / model / pieces / inanimates / TreasureChestTest.java
TreasureChestTest.java
Raw
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());
  }
}