package com.flexpoker.game.command.aggregate;
import static org.junit.Assert.assertEquals;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import org.junit.Test;
import com.flexpoker.exception.FlexPokerException;
import com.flexpoker.game.command.events.GameCreatedEvent;
import com.flexpoker.game.command.events.GameMovedToStartingStageEvent;
import com.flexpoker.game.command.events.GameStartedEvent;
import com.flexpoker.game.command.events.GameTablesCreatedAndPlayersAssociatedEvent;
import com.flexpoker.game.command.framework.GameEvent;
public class JoinGameTest {
@Test
public void testJoinGameSuccessFirstPlayerJoins() {
List<GameEvent> events = new ArrayList<>();
events.add(new GameCreatedEvent(UUID.randomUUID(), 1, "test", 2, 2,
UUID.randomUUID(), 10));
Game game = new DefaultGameFactory().createFrom(events);
game.joinGame(UUID.randomUUID());
assertEquals(2, game.fetchAppliedEvents().size());
assertEquals(1, game.fetchNewEvents().size());
assertEquals(2, game.fetchNewEvents().get(0).getVersion());
}
@Test
public void testJoinGameSuccessGameStarting() {
List<GameEvent> events = new ArrayList<>();
events.add(new GameCreatedEvent(UUID.randomUUID(), 1, "test", 2, 2,
UUID.randomUUID(), 10));
Game game = new DefaultGameFactory().createFrom(events);
game.joinGame(UUID.randomUUID());
game.joinGame(UUID.randomUUID());
assertEquals(6, game.fetchAppliedEvents().size());
assertEquals(5, game.fetchNewEvents().size());
assertEquals(2, game.fetchNewEvents().get(0).getVersion());
assertEquals(3, game.fetchNewEvents().get(1).getVersion());
assertEquals(4, game.fetchNewEvents().get(2).getVersion());
assertEquals(5, game.fetchNewEvents().get(3).getVersion());
assertEquals(6, game.fetchNewEvents().get(4).getVersion());
assertEquals(GameMovedToStartingStageEvent.class,
game.fetchNewEvents().get(2).getClass());
assertEquals(GameTablesCreatedAndPlayersAssociatedEvent.class,
game.fetchNewEvents().get(3).getClass());
assertEquals(GameStartedEvent.class,
game.fetchNewEvents().get(4).getClass());
}
@Test(expected = FlexPokerException.class)
public void testJoinGameAttemptToJoinTwice() {
List<GameEvent> events = new ArrayList<>();
events.add(new GameCreatedEvent(UUID.randomUUID(), 1, "test", 2, 2,
UUID.randomUUID(), 10));
UUID playerId = UUID.randomUUID();
Game game = new DefaultGameFactory().createFrom(events);
game.joinGame(playerId);
game.joinGame(playerId);
}
@Test(expected = FlexPokerException.class)
public void testJoinGameAttemptToJoinMoreThanMax() {
List<GameEvent> events = new ArrayList<>();
events.add(new GameCreatedEvent(UUID.randomUUID(), 1, "test", 2, 2,
UUID.randomUUID(), 10));
Game game = new DefaultGameFactory().createFrom(events);
game.joinGame(UUID.randomUUID());
game.joinGame(UUID.randomUUID());
game.joinGame(UUID.randomUUID());
}
}