public void Should_Return_Full_House()
        {
            HandValueService handValueService = new HandValueService();

            List<Card> playerCards = new List<Card>()
            {
                new Card() { Number = 5, Suit = Suit.Hearts },
                new Card() { Number = 2, Suit = Suit.Diamonds }
            };

            List<Card> board = new List<Card>()
            {
                new Card() { Number = 10, Suit = Suit.Hearts },
                new Card() { Number = 2, Suit = Suit.Clubs },
                new Card() { Number = 7, Suit = Suit.Hearts },
                new Card() { Number = 7, Suit = Suit.Clubs },
                new Card() { Number = 2, Suit = Suit.Spades}
            };

            HandValue handValue = handValueService.CalculateHandValue(playerCards, board);

            handValue.Type.Should().Be(HandValue.HandType.FullHouse);
            handValue.Kickers.Should().ContainInOrder(2, 2, 2, 7, 7);
        }
        public void Should_Return_4_Of_A_Kind()
        {
            HandValueService handValueService = new HandValueService();

            List<Card> playerCards = new List<Card>()
            {
                new Card() { Number = 7, Suit = Suit.Clubs },
                new Card() { Number = 10, Suit = Suit.Diamonds }
            };

            List<Card> board = new List<Card>()
            {
                new Card() { Number = 10, Suit = Suit.Hearts },
                new Card() { Number = 10, Suit = Suit.Clubs },
                new Card() { Number = 7, Suit = Suit.Hearts },
                new Card() { Number = 12, Suit = Suit.Clubs },
                new Card() { Number = 10, Suit = Suit.Spades}
            };

            HandValue handValue = handValueService.CalculateHandValue(playerCards, board);

            handValue.Type.Should().Be(HandValue.HandType.FourOfAKind);
            handValue.Kickers.Should().ContainInOrder(10, 10, 10, 10, 12);
        }
        public void Should_Return_Flush()
        {
            HandValueService handValueService = new HandValueService();

            List<Card> playerCards = new List<Card>()
            {
                new Card() { Number = 6, Suit = Suit.Spades },
                new Card() { Number = 7, Suit = Suit.Spades }
            };

            List<Card> board = new List<Card>()
            {
                new Card() { Number = 12, Suit = Suit.Spades },
                new Card() { Number = 2, Suit = Suit.Clubs },
                new Card() { Number = 7, Suit = Suit.Hearts },
                new Card() { Number = 9, Suit = Suit.Spades },
                new Card() { Number = 2, Suit = Suit.Spades}
            };

            HandValue handValue = handValueService.CalculateHandValue(playerCards, board);

            handValue.Type.Should().Be(HandValue.HandType.Flush);
            handValue.Kickers.Should().ContainInOrder(12, 9, 7, 6, 2);
        }
        public void Should_Return_High_Card()
        {
            HandValueService handValueService = new HandValueService();

            List<Card> playerCards = new List<Card>()
            {
                new Card() { Number = 9, Suit = Suit.Diamonds },
                new Card() { Number = 10, Suit = Suit.Diamonds }
            };

            List<Card> board = new List<Card>()
            {
                new Card() { Number = 6, Suit = Suit.Spades },
                new Card() { Number = 14, Suit = Suit.Clubs },
                new Card() { Number = 2, Suit = Suit.Hearts },
                new Card() { Number = 4, Suit = Suit.Clubs },
                new Card() { Number = 11, Suit = Suit.Diamonds}
            };

            HandValue handValue = handValueService.CalculateHandValue(playerCards, board);

            handValue.Type.Should().Be(HandValue.HandType.HighCard);
            handValue.Kickers.Should().ContainInOrder(14, 11, 10, 9, 6);
        }
        public void When_6_Of_One_Suit_Should_Return_Flush_With_Highest_5_Kickers()
        {
            HandValueService handValueService = new HandValueService();

            List<Card> playerCards = new List<Card>()
            {
                new Card() { Number = 9, Suit = Suit.Diamonds },
                new Card() { Number = 10, Suit = Suit.Diamonds }
            };

            List<Card> board = new List<Card>()
            {
                new Card() { Number = 6, Suit = Suit.Spades },
                new Card() { Number = 6, Suit = Suit.Diamonds },
                new Card() { Number = 2, Suit = Suit.Diamonds },
                new Card() { Number = 4, Suit = Suit.Diamonds },
                new Card() { Number = 14, Suit = Suit.Diamonds}
            };

            HandValue handValue = handValueService.CalculateHandValue(playerCards, board);

            handValue.Type.Should().Be(HandValue.HandType.Flush);
            handValue.Kickers.Should().ContainInOrder(14, 10, 9, 6, 4);
        }
        public void Should_Return_Two_Pair()
        {
            HandValueService handValueService = new HandValueService();

            List<Card> playerCards = new List<Card>()
            {
                new Card() { Number = 3, Suit = Suit.Clubs },
                new Card() { Number = 5, Suit = Suit.Spades }
            };

            List<Card> board = new List<Card>()
            {
                new Card() { Number = 6, Suit = Suit.Spades },
                new Card() { Number = 9, Suit = Suit.Clubs },
                new Card() { Number = 3, Suit = Suit.Hearts },
                new Card() { Number = 11, Suit = Suit.Hearts },
                new Card() { Number = 5, Suit = Suit.Diamonds}
            };

            HandValue handValue = handValueService.CalculateHandValue(playerCards, board);

            handValue.Type.Should().Be(HandValue.HandType.TwoPair);
            handValue.Kickers.Should().ContainInOrder(5, 5, 3, 3, 11);
        }
        public void Should_Return_Straight_Flush()
        {
            HandValueService handValueService = new HandValueService();

            List<Card> playerCards = new List<Card>()
            {
                new Card() { Number = 10, Suit = Suit.Hearts },
                new Card() { Number = 6, Suit = Suit.Hearts }
            };

            List<Card> board = new List<Card>()
            {
                new Card() { Number = 9, Suit = Suit.Hearts },
                new Card() { Number = 14, Suit = Suit.Clubs },
                new Card() { Number = 7, Suit = Suit.Hearts },
                new Card() { Number = 8, Suit = Suit.Hearts },
                new Card() { Number = 3, Suit = Suit.Clubs}
            };

            HandValue handValue = handValueService.CalculateHandValue(playerCards, board);

            handValue.Type.Should().Be(HandValue.HandType.StraightFlush);
            handValue.Kickers.Should().ContainInOrder(10, 9, 8, 7, 6);
        }
        public void Should_Return_Straight()
        {
            HandValueService handValueService = new HandValueService();

            List<Card> playerCards = new List<Card>()
            {
                new Card() { Number = 4, Suit = Suit.Diamonds },
                new Card() { Number = 8, Suit = Suit.Spades }
            };

            List<Card> board = new List<Card>()
            {
                new Card() { Number = 6, Suit = Suit.Spades },
                new Card() { Number = 13, Suit = Suit.Clubs },
                new Card() { Number = 7, Suit = Suit.Hearts },
                new Card() { Number = 5, Suit = Suit.Clubs },
                new Card() { Number = 3, Suit = Suit.Spades}
            };

            HandValue handValue = handValueService.CalculateHandValue(playerCards, board);

            handValue.Type.Should().Be(HandValue.HandType.Straight);
            handValue.Kickers.Should().ContainInOrder(8, 7, 6, 5, 4);
        }
        public void Should_Return_Royal_Flush()
        {
            HandValueService handValueService = new HandValueService();

            List<Card> playerCards = new List<Card>()
            {
                new Card() { Number = 14, Suit = Suit.Clubs },
                new Card() { Number = 13, Suit = Suit.Clubs }
            };

            List<Card> board = new List<Card>()
            {
                new Card() { Number = 4, Suit = Suit.Diamonds },
                new Card() { Number = 10, Suit = Suit.Clubs },
                new Card() { Number = 7, Suit = Suit.Hearts },
                new Card() { Number = 12, Suit = Suit.Clubs },
                new Card() { Number = 11, Suit = Suit.Clubs}
            };

            HandValue handValue = handValueService.CalculateHandValue(playerCards, board);

            handValue.Type.Should().Be(HandValue.HandType.RoyalFlush);
            handValue.Kickers.Should().ContainInOrder(14, 13, 12, 11, 10);
        }