package com.flexpoker.game.command.aggregate.tablebalancer;
import static com.flexpoker.game.command.aggregate.tablebalancer.TableBalancerTestUtils.createDefaultChipMapForSubjectTable;
import static com.flexpoker.game.command.aggregate.tablebalancer.TableBalancerTestUtils.createTableToPlayersMap;
import static org.junit.Assert.assertEquals;
import java.util.Collections;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.UUID;
import org.junit.Test;
import com.flexpoker.game.command.aggregate.TableBalancer;
import com.flexpoker.game.command.events.PlayerMovedToNewTableEvent;
import com.flexpoker.game.command.events.TablePausedForBalancingEvent;
import com.flexpoker.game.command.framework.GameEvent;
public class TableBalancerPausedTableTest {
@Test
public void testTwoTablesOneAndTwoPlayersCantMerge() {
UUID subjectTableId = UUID.randomUUID();
Map<UUID, Set<UUID>> tableToPlayersMap = createTableToPlayersMap(
subjectTableId, 1, 2);
TableBalancer tableBalancer = new TableBalancer(UUID.randomUUID(), 2);
Optional<GameEvent> event = tableBalancer.createSingleBalancingEvent(1,
subjectTableId, Collections.emptySet(), tableToPlayersMap,
createDefaultChipMapForSubjectTable(subjectTableId,
tableToPlayersMap));
assertEquals(TablePausedForBalancingEvent.class,
event.get().getClass());
}
@Test
public void testTwoTablesOneAndThreePlayersCantMerge() {
UUID subjectTableId = UUID.randomUUID();
Map<UUID, Set<UUID>> tableToPlayersMap = createTableToPlayersMap(
subjectTableId, 1, 3);
TableBalancer tableBalancer = new TableBalancer(UUID.randomUUID(), 3);
Optional<GameEvent> event = tableBalancer.createSingleBalancingEvent(1,
subjectTableId, Collections.emptySet(), tableToPlayersMap,
createDefaultChipMapForSubjectTable(subjectTableId,
tableToPlayersMap));
assertEquals(TablePausedForBalancingEvent.class,
event.get().getClass());
}
@Test
public void testTwoTablesImbalancedByTwoCantMergeSubjectIsSmallerTableNoPaused() {
UUID subjectTableId = UUID.randomUUID();
Map<UUID, Set<UUID>> tableToPlayersMap = createTableToPlayersMap(
subjectTableId, 5, 7);
TableBalancer tableBalancer = new TableBalancer(UUID.randomUUID(), 9);
Optional<GameEvent> event = tableBalancer.createSingleBalancingEvent(1,
subjectTableId, Collections.emptySet(), tableToPlayersMap,
createDefaultChipMapForSubjectTable(subjectTableId,
tableToPlayersMap));
assertEquals(TablePausedForBalancingEvent.class,
event.get().getClass());
assertEquals(subjectTableId,
((TablePausedForBalancingEvent) event.get()).getTableId());
}
@Test
public void testTwoTablesImbalancedByTwoCantMergeSubjectIsLargerTableNoPaused() {
UUID subjectTableId = UUID.randomUUID();
Map<UUID, Set<UUID>> tableToPlayersMap = createTableToPlayersMap(
subjectTableId, 7, 5);
UUID otherTableId = tableToPlayersMap.keySet().stream()
.filter(x -> !x.equals(subjectTableId)).findFirst().get();
TableBalancer tableBalancer = new TableBalancer(UUID.randomUUID(), 9);
Optional<GameEvent> event = tableBalancer.createSingleBalancingEvent(1,
subjectTableId, Collections.emptySet(), tableToPlayersMap,
createDefaultChipMapForSubjectTable(subjectTableId,
tableToPlayersMap));
assertEquals(PlayerMovedToNewTableEvent.class, event.get().getClass());
assertEquals(subjectTableId,
((PlayerMovedToNewTableEvent) event.get()).getFromTableId());
assertEquals(otherTableId,
((PlayerMovedToNewTableEvent) event.get()).getToTableId());
}
@Test
public void testThreeTablesTwoImbalancedByTwoCantMergeSubjectIsSmallestTableNoPaused() {
UUID subjectTableId = UUID.randomUUID();
Map<UUID, Set<UUID>> tableToPlayersMap = createTableToPlayersMap(
subjectTableId, 7, 8, 9);
TableBalancer tableBalancer = new TableBalancer(UUID.randomUUID(), 9);
Optional<GameEvent> event = tableBalancer.createSingleBalancingEvent(1,
subjectTableId, Collections.emptySet(), tableToPlayersMap,
createDefaultChipMapForSubjectTable(subjectTableId,
tableToPlayersMap));
assertEquals(TablePausedForBalancingEvent.class,
event.get().getClass());
assertEquals(subjectTableId,
((TablePausedForBalancingEvent) event.get()).getTableId());
}
@Test
public void testThreeTablesTwoImbalancedByTwoCantMergeSubjectIsLargestTableNoPaused() {
UUID subjectTableId = UUID.randomUUID();
Map<UUID, Set<UUID>> tableToPlayersMap = createTableToPlayersMap(
subjectTableId, 9, 8, 7);
UUID smallestOtherTableId = tableToPlayersMap.entrySet().stream()
.filter(x -> x.getValue().size() == 7).findFirst().get()
.getKey();
TableBalancer tableBalancer = new TableBalancer(UUID.randomUUID(), 9);
Optional<GameEvent> event = tableBalancer.createSingleBalancingEvent(1,
subjectTableId, Collections.emptySet(), tableToPlayersMap,
createDefaultChipMapForSubjectTable(subjectTableId,
tableToPlayersMap));
assertEquals(PlayerMovedToNewTableEvent.class, event.get().getClass());
assertEquals(subjectTableId,
((PlayerMovedToNewTableEvent) event.get()).getFromTableId());
assertEquals(smallestOtherTableId,
((PlayerMovedToNewTableEvent) event.get()).getToTableId());
}
}