package dev.llan.model.pieces.player;
import dev.llan.model.Game;
import dev.llan.model.GameContainer;
import dev.llan.model.board.Grid;
import dev.llan.model.board.Point;
import dev.llan.model.board.Tile;
import dev.llan.model.board.pathfinding.Path;
import dev.llan.events.GameEvent;
import dev.llan.events.PlayerUpdatedEvent;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import java.util.Optional;
import static org.junit.jupiter.api.Assertions.*;
class MainCharacterTest {
private MainCharacter player;
private Game game;
@BeforeEach
void setUp() {
GameContainer.getInstance().initGame();
game = GameContainer.getInstance().getCurrentGame();
player = (MainCharacter) game.getPlayer();
}
@Test
void setActivePath() {
Path path = new Path();
GameEvent event = player.setActivePath(Optional.of(path));
assertTrue(player.getActivePath().isPresent());
assertInstanceOf(PlayerUpdatedEvent.class, event);
}
@Test
void generateActivePath() {
Optional<Path> generated = player.generateActivePath(new Point(7, 7));
player.setActivePath(generated);
assertTrue(player.getActivePath().isPresent());
Path generatedPath = generated.get();
assertEquals(7, generatedPath.getPath().size());
}
@Test
void recalculateActivePath() {
Optional<Path> generated = player.generateActivePath(new Point(7, 7));
player.setActivePath(generated);
game.getMap().getGrid().tileAt(new Point(5, 5)).setType(Tile.TileType.UNMOVABLE);
Optional<GameEvent> event = player.recalculateActivePath();
assertTrue(event.isPresent());
assertInstanceOf(PlayerUpdatedEvent.class, event.get());
assertNotEquals(7, player.getActivePath().get().getPath().size());
}
@Test
void testClone() {
Optional<Path> generated = player.generateActivePath(new Point(5, 5));
player.setActivePath(generated);
Grid gridClone = game.getMap().cloneGrid();
Player clone = player.clone(gridClone);
assertNotEquals(player, clone);
assertNotEquals(player.getInventory(), clone.getInventory());
assertNotEquals(player.getActivePath(), clone.getActivePath());
assertNotEquals(player.getStats(), clone.getStats());
assertNotSame(player.getPosition(), clone.getPosition());
assertEquals(player.getInventory().getCoins(), clone.getInventory().getCoins());
assertEquals(
player.getActivePath().get().getPath().size(),
clone.getActivePath().get().getPath().size());
assertEquals(player.getStats().getHealth(), clone.getStats().getHealth());
assertEquals(player.getStats().getMovement(), clone.getStats().getMovement());
assertEquals(player.getPosition().getRow(), clone.getPosition().getRow());
assertEquals(player.getPosition().getCol(), clone.getPosition().getCol());
}
}