package com.flexpoker.game.command.aggregate;
import static org.junit.Assert.assertEquals;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
import org.junit.Test;
import com.flexpoker.game.command.events.GameCreatedEvent;
import com.flexpoker.game.command.events.GameJoinedEvent;
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 NewHandIsClearedToStartTest {
@Test
public void testJoinGameSuccessFirstPlayerJoins() {
UUID gameId = UUID.randomUUID();
UUID tableId = UUID.randomUUID();
UUID player1Id = UUID.randomUUID();
UUID player2Id = UUID.randomUUID();
Map<UUID, Set<UUID>> tableToPlayersMap = new HashMap<>();
Set<UUID> playerIds = new HashSet<>();
playerIds.add(player1Id);
playerIds.add(player2Id);
tableToPlayersMap.put(tableId, playerIds);
Set<UUID> tableIds = tableToPlayersMap.keySet();
List<GameEvent> events = new ArrayList<>();
events.add(new GameCreatedEvent(gameId, 1, "test", 2, 2,
UUID.randomUUID(), 10));
events.add(new GameJoinedEvent(gameId, 2, player1Id));
events.add(new GameJoinedEvent(gameId, 3, player2Id));
events.add(new GameMovedToStartingStageEvent(gameId, 4));
events.add(new GameTablesCreatedAndPlayersAssociatedEvent(gameId, 5, tableToPlayersMap, 2));
events.add(new GameStartedEvent(gameId, 6, tableIds, new BlindSchedule(10)));
Game game = new DefaultGameFactory().createFrom(events);
Map<UUID, Integer> playersToChipsMap = new HashMap<>();
playersToChipsMap.put(player1Id, 100);
playersToChipsMap.put(player2Id, 100);
game.attemptToStartNewHand(tableId, playersToChipsMap);
assertEquals(7, game.fetchAppliedEvents().size());
assertEquals(1, game.fetchNewEvents().size());
assertEquals(7, game.fetchNewEvents().get(0).getVersion());
}
}