package com.flexpoker.table.command.aggregate.singlehand.threeplayer; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import java.util.UUID; import java.util.stream.Collectors; import org.junit.Test; import com.flexpoker.table.command.aggregate.Table; import com.flexpoker.table.command.aggregate.testhelpers.TableTestUtils; import com.flexpoker.table.command.events.HandDealtEvent; import com.flexpoker.table.command.events.TableCreatedEvent; public class ThreePlayerSeatPositionsAndButtonAndBlindsTest { @Test public void test() { UUID tableId = UUID.randomUUID(); UUID player1Id = UUID.randomUUID(); UUID player2Id = UUID.randomUUID(); UUID player3Id = UUID.randomUUID(); Table table = TableTestUtils.createBasicTableAndStartHand(tableId, player1Id, player2Id, player3Id); // check seat positions Map<Integer, UUID> seatPositionToPlayerIdMap = ((TableCreatedEvent) table .fetchNewEvents().get(0)).getSeatPositionToPlayerMap(); seatPositionToPlayerIdMap = seatPositionToPlayerIdMap.entrySet() .stream().filter(x -> x.getValue() != null) .collect(Collectors.toMap(x -> x.getKey(), x -> x.getValue())); List<UUID> player1MatchList = seatPositionToPlayerIdMap.values().stream() .filter(x -> x.equals(player1Id)).collect(Collectors.toList()); List<UUID> player2MatchList = seatPositionToPlayerIdMap.values().stream() .filter(x -> x.equals(player2Id)).collect(Collectors.toList()); List<UUID> player3MatchList = seatPositionToPlayerIdMap.values().stream() .filter(x -> x.equals(player3Id)).collect(Collectors.toList()); // verify that each player id is only in one seat position and that // those are the only three filled-in positions assertEquals(1, player1MatchList.size()); assertEquals(1, player2MatchList.size()); assertEquals(1, player3MatchList.size()); long numberOfOtherPlayerPositions = seatPositionToPlayerIdMap.values().stream() .filter(x -> !x.equals(player1Id)).filter(x -> !x.equals(player2Id)) .filter(x -> !x.equals(player3Id)).distinct().count(); assertEquals(0, numberOfOtherPlayerPositions); // check blinds int player1Position = seatPositionToPlayerIdMap.entrySet().stream() .filter(x -> x.getValue().equals(player1Id)).findAny().get().getKey() .intValue(); int player2Position = seatPositionToPlayerIdMap.entrySet().stream() .filter(x -> x.getValue().equals(player2Id)).findAny().get().getKey() .intValue(); int player3Position = seatPositionToPlayerIdMap.entrySet().stream() .filter(x -> x.getValue().equals(player3Id)).findAny().get().getKey() .intValue(); HandDealtEvent handDealtEvent = ((HandDealtEvent) table.fetchNewEvents().get(2)); assertFalse(handDealtEvent.getButtonOnPosition() == handDealtEvent .getSmallBlindPosition()); assertFalse(handDealtEvent.getSmallBlindPosition() == handDealtEvent .getBigBlindPosition()); assertFalse(handDealtEvent.getButtonOnPosition() == handDealtEvent .getBigBlindPosition()); Set<Integer> buttonAndBlindPositions = new HashSet<>(); buttonAndBlindPositions .add(Integer.valueOf(handDealtEvent.getButtonOnPosition())); buttonAndBlindPositions.add(Integer.valueOf(handDealtEvent .getSmallBlindPosition())); buttonAndBlindPositions .add(Integer.valueOf(handDealtEvent.getBigBlindPosition())); assertTrue(buttonAndBlindPositions.contains(Integer.valueOf(player1Position))); assertTrue(buttonAndBlindPositions.contains(Integer.valueOf(player2Position))); assertTrue(buttonAndBlindPositions.contains(Integer.valueOf(player3Position))); } }