package com.flexpoker.game.command.aggregate;
import static org.junit.Assert.assertEquals;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
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.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 IncrementBlindsTest {
@Test
public void testIncrementBlindsCreatesNewEvent() {
UUID gameId = UUID.randomUUID();
Map<UUID, Set<UUID>> tableIdToPlayerIdsMap = new HashMap<>();
Set<UUID> tableIds = tableIdToPlayerIdsMap.keySet();
List<GameEvent> events = new ArrayList<>();
events.add(new GameCreatedEvent(gameId, 1, "test", 2, 2,
UUID.randomUUID(), 10));
events.add(new GameJoinedEvent(gameId, 2, UUID.randomUUID()));
events.add(new GameJoinedEvent(gameId, 3, UUID.randomUUID()));
events.add(new GameMovedToStartingStageEvent(gameId, 4));
events.add(new GameTablesCreatedAndPlayersAssociatedEvent(gameId, 5, tableIdToPlayerIdsMap, 2));
events.add(new GameStartedEvent(gameId, 6, tableIds, new BlindSchedule(10)));
Game game = new DefaultGameFactory().createFrom(events);
game.increaseBlinds();
assertEquals(7, game.fetchAppliedEvents().size());
assertEquals(1, game.fetchNewEvents().size());
assertEquals(7, game.fetchNewEvents().get(0).getVersion());
}
@Test
public void testIncrementBlindsAlreadyAtMaxLevel() {
UUID gameId = UUID.randomUUID();
Map<UUID, Set<UUID>> tableIdToPlayerIdsMap = new HashMap<>();
Set<UUID> tableIds = tableIdToPlayerIdsMap.keySet();
List<GameEvent> events = new ArrayList<>();
events.add(new GameCreatedEvent(gameId, 1, "test", 2, 2,
UUID.randomUUID(), 10));
events.add(new GameJoinedEvent(gameId, 2, UUID.randomUUID()));
events.add(new GameJoinedEvent(gameId, 3, UUID.randomUUID()));
events.add(new GameMovedToStartingStageEvent(gameId, 4));
events.add(new GameTablesCreatedAndPlayersAssociatedEvent(gameId, 5, tableIdToPlayerIdsMap, 2));
events.add(new GameStartedEvent(gameId, 6, tableIds, new BlindSchedule(10)));
Game game = new DefaultGameFactory().createFrom(events);
game.increaseBlinds();
game.increaseBlinds();
game.increaseBlinds();
game.increaseBlinds();
game.increaseBlinds();
assertEquals(10, game.fetchAppliedEvents().size());
assertEquals(4, game.fetchNewEvents().size());
assertEquals(10, game.fetchNewEvents().get(3).getVersion());
}
@Test(expected = FlexPokerException.class)
public void testFailureWhenNotInTheCorrectStage() {
UUID gameId = UUID.randomUUID();
Map<UUID, Set<UUID>> tableIdToPlayerIdsMap = new HashMap<>();
List<GameEvent> events = new ArrayList<>();
events.add(new GameCreatedEvent(gameId, 1, "test", 2, 2,
UUID.randomUUID(), 10));
events.add(new GameJoinedEvent(gameId, 2, UUID.randomUUID()));
events.add(new GameJoinedEvent(gameId, 3, UUID.randomUUID()));
events.add(new GameMovedToStartingStageEvent(gameId, 4));
events.add(new GameTablesCreatedAndPlayersAssociatedEvent(gameId, 5, tableIdToPlayerIdsMap, 2));
Game game = new DefaultGameFactory().createFrom(events);
game.increaseBlinds();
}
}