package com.flexpoker.table.command.aggregate.pot; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.UUID; import org.junit.Test; import com.flexpoker.model.HandRanking; import com.flexpoker.model.card.CardRank; import com.flexpoker.table.command.aggregate.HandEvaluation; public class WinningPotTest { @Test public void testBasicTwoPersonPotHasSingleWinner() { UUID player1 = UUID.randomUUID(); UUID player2 = UUID.randomUUID(); HandEvaluation handEvaluation1 = new HandEvaluation(); handEvaluation1.setPlayerId(player1); handEvaluation1.setHandRanking(HandRanking.FLUSH); handEvaluation1.setPrimaryCardRank(CardRank.EIGHT); handEvaluation1.setFirstKicker(CardRank.SEVEN); handEvaluation1.setSecondKicker(CardRank.FOUR); handEvaluation1.setThirdKicker(CardRank.THREE); handEvaluation1.setFourthKicker(CardRank.TWO); HandEvaluation handEvaluation2 = new HandEvaluation(); handEvaluation2.setPlayerId(player2); handEvaluation2.setHandRanking(HandRanking.STRAIGHT); handEvaluation2.setPrimaryCardRank(CardRank.KING); List<HandEvaluation> winningHands = new ArrayList<>(); winningHands.add(handEvaluation1); winningHands.add(handEvaluation2); Pot pot = new Pot(UUID.randomUUID(), new HashSet<>(Arrays.asList(handEvaluation1, handEvaluation2))); pot.addChips(60); assertTrue(pot.forcePlayerToShowCards(player1)); assertFalse(pot.forcePlayerToShowCards(player2)); assertEquals(60, pot.getChipsWon(player1)); assertEquals(0, pot.getChipsWon(player2)); } @Test public void testThreePersonPotHasTwoWinners() { UUID player1 = UUID.randomUUID(); UUID player2 = UUID.randomUUID(); UUID player3 = UUID.randomUUID(); HandEvaluation handEvaluation1 = new HandEvaluation(); handEvaluation1.setPlayerId(player1); handEvaluation1.setHandRanking(HandRanking.STRAIGHT); handEvaluation1.setPrimaryCardRank(CardRank.EIGHT); HandEvaluation handEvaluation2 = new HandEvaluation(); handEvaluation2.setPlayerId(player2); handEvaluation2.setHandRanking(HandRanking.STRAIGHT); handEvaluation2.setPrimaryCardRank(CardRank.KING); HandEvaluation handEvaluation3 = new HandEvaluation(); handEvaluation3.setPlayerId(player3); handEvaluation3.setHandRanking(HandRanking.STRAIGHT); handEvaluation3.setPrimaryCardRank(CardRank.KING); Pot pot = new Pot(UUID.randomUUID(), new HashSet<>(Arrays.asList(handEvaluation1, handEvaluation2, handEvaluation3))); pot.addChips(60); assertFalse(pot.forcePlayerToShowCards(player1)); assertTrue(pot.forcePlayerToShowCards(player2)); assertTrue(pot.forcePlayerToShowCards(player3)); assertEquals(0, pot.getChipsWon(player1)); assertEquals(30, pot.getChipsWon(player2)); assertEquals(30, pot.getChipsWon(player3)); } @Test public void testThreePersonPotHasTwoWinnersWithBonus() { UUID player1 = UUID.randomUUID(); UUID player2 = UUID.randomUUID(); UUID player3 = UUID.randomUUID(); HandEvaluation handEvaluation1 = new HandEvaluation(); handEvaluation1.setPlayerId(player1); handEvaluation1.setHandRanking(HandRanking.STRAIGHT); handEvaluation1.setPrimaryCardRank(CardRank.EIGHT); HandEvaluation handEvaluation2 = new HandEvaluation(); handEvaluation2.setPlayerId(player2); handEvaluation2.setHandRanking(HandRanking.STRAIGHT); handEvaluation2.setPrimaryCardRank(CardRank.KING); HandEvaluation handEvaluation3 = new HandEvaluation(); handEvaluation3.setPlayerId(player3); handEvaluation3.setHandRanking(HandRanking.STRAIGHT); handEvaluation3.setPrimaryCardRank(CardRank.KING); Pot pot = new Pot(UUID.randomUUID(), new HashSet<>(Arrays.asList(handEvaluation1, handEvaluation2, handEvaluation3))); pot.addChips(61); assertFalse(pot.forcePlayerToShowCards(player1)); assertTrue(pot.forcePlayerToShowCards(player2)); assertTrue(pot.forcePlayerToShowCards(player3)); assertEquals(0, pot.getChipsWon(player1)); if (pot.getChipsWon(player2) == 30) { assertEquals(30, pot.getChipsWon(player2)); assertEquals(31, pot.getChipsWon(player3)); } else if (pot.getChipsWon(player3) == 30) { assertEquals(31, pot.getChipsWon(player2)); assertEquals(30, pot.getChipsWon(player3)); } else { throw new IllegalStateException( "one of the pots should be 30 and the other should be 31"); } } @Test public void testThreePersonPotHasTwoWinnersButOneOfTheWinnersFolds() { UUID player1 = UUID.randomUUID(); UUID player2 = UUID.randomUUID(); UUID player3 = UUID.randomUUID(); HandEvaluation handEvaluation1 = new HandEvaluation(); handEvaluation1.setPlayerId(player1); handEvaluation1.setHandRanking(HandRanking.STRAIGHT); handEvaluation1.setPrimaryCardRank(CardRank.EIGHT); HandEvaluation handEvaluation2 = new HandEvaluation(); handEvaluation2.setPlayerId(player2); handEvaluation2.setHandRanking(HandRanking.STRAIGHT); handEvaluation2.setPrimaryCardRank(CardRank.KING); HandEvaluation handEvaluation3 = new HandEvaluation(); handEvaluation3.setPlayerId(player3); handEvaluation3.setHandRanking(HandRanking.STRAIGHT); handEvaluation3.setPrimaryCardRank(CardRank.KING); Pot pot = new Pot(UUID.randomUUID(), new HashSet<>(Arrays.asList(handEvaluation1, handEvaluation2, handEvaluation3))); pot.addChips(60); pot.removePlayer(player3); assertFalse(pot.forcePlayerToShowCards(player1)); assertTrue(pot.forcePlayerToShowCards(player2)); assertFalse(pot.forcePlayerToShowCards(player3)); assertEquals(0, pot.getChipsWon(player1)); assertEquals(60, pot.getChipsWon(player2)); assertEquals(0, pot.getChipsWon(player3)); } }