public void Hand_Flush_Should_Not_Win_FullHouse()
        {
            //Arrange
            //FullHouse
            var fullHouseCards = new List<Card>();
            fullHouseCards.Add(new Card() { Suit = Card.CardSuit.Club, Value = 2 });
            fullHouseCards.Add(new Card() { Suit = Card.CardSuit.Diamond, Value = 2 });
            fullHouseCards.Add(new Card() { Suit = Card.CardSuit.Heart, Value = 2 });
            fullHouseCards.Add(new Card() { Suit = Card.CardSuit.Club, Value = 3 });
            fullHouseCards.Add(new Card() { Suit = Card.CardSuit.Diamond, Value = 3 });

            var player1Hand = new Hand();
            player1Hand.PlayerId = 1;
            player1Hand.Cards = fullHouseCards;

            //Flush
            var flushCards = new List<Card>();
            flushCards.Add(new Card() { Suit = Card.CardSuit.Club, Value = 2 });
            flushCards.Add(new Card() { Suit = Card.CardSuit.Club, Value = 4 });
            flushCards.Add(new Card() { Suit = Card.CardSuit.Club, Value = 6 });
            flushCards.Add(new Card() { Suit = Card.CardSuit.Club, Value = 8 });
            flushCards.Add(new Card() { Suit = Card.CardSuit.Club, Value = 10 });

            var player2Hand = new Hand();
            player2Hand.PlayerId = 2;
            player2Hand.Cards = flushCards;

            var hands = new List<Hand>();
            hands.Add(player1Hand);
            hands.Add(player2Hand);

            //Act
            var outcomeMsg = PokerEvaluator.Evaluate(hands);

            //Assert
            Assert.AreNotEqual("Player2 wins - Flush", outcomeMsg);
        }
        public void Hand_TwoPairs_Should_Win_Pair()
        {
            //Arrange
            var player1Hand = new Hand();
            player1Hand.PlayerId = 1;
            player1Hand.Cards = GetCardsTwoPairs();

            var player2Hand = new Hand();
            player2Hand.PlayerId = 2;
            player2Hand.Cards = GetCardsPair();

            var hands = new List<Hand>();
            hands.Add(player1Hand);
            hands.Add(player2Hand);

            //Act
            var outcomeMsg = PokerEvaluator.Evaluate(hands);

            //Assert
            Assert.AreEqual("Player1 wins - TwoPairs", outcomeMsg);
        }
        public void Hand_ThreeOfAKind_Should_Not_Win_Straight()
        {
            //Arrange
            //Straight
            var straightCards = new List<Card>();
            straightCards.Add(new Card() { Suit = Card.CardSuit.Club, Value = 2 });
            straightCards.Add(new Card() { Suit = Card.CardSuit.Diamond, Value = 3 });
            straightCards.Add(new Card() { Suit = Card.CardSuit.Heart, Value = 4 });
            straightCards.Add(new Card() { Suit = Card.CardSuit.Spade, Value = 5 });
            straightCards.Add(new Card() { Suit = Card.CardSuit.Club, Value = 6 });

            var player1Hand = new Hand();
            player1Hand.PlayerId = 1;
            player1Hand.Cards = straightCards;

            //ThreeOfAKind
            var threeOfAKindCards = new List<Card>();
            threeOfAKindCards.Add(new Card() { Suit = Card.CardSuit.Club, Value = 2 });
            threeOfAKindCards.Add(new Card() { Suit = Card.CardSuit.Diamond, Value = 1 });
            threeOfAKindCards.Add(new Card() { Suit = Card.CardSuit.Heart, Value = 3 });
            threeOfAKindCards.Add(new Card() { Suit = Card.CardSuit.Club, Value = 3 });
            threeOfAKindCards.Add(new Card() { Suit = Card.CardSuit.Diamond, Value = 3 });

            var player2Hand = new Hand();
            player2Hand.PlayerId = 2;
            player2Hand.Cards = threeOfAKindCards;

            var hands = new List<Hand>();
            hands.Add(player1Hand);
            hands.Add(player2Hand);

            //Act
            var outcomeMsg = PokerEvaluator.Evaluate(hands);

            //Assert
            Assert.AreNotEqual("Player2 wins - ThreeOfAKind", outcomeMsg);
        }
        public void Hand_StraightFlush_Should_Win_FourOfAKind()
        {
            //Arrange
            //StraightFlush
            var straightFlushCards = new List<Card>();
            straightFlushCards.Add(new Card() { Suit = Card.CardSuit.Club, Value = 2 });
            straightFlushCards.Add(new Card() { Suit = Card.CardSuit.Club, Value = 3 });
            straightFlushCards.Add(new Card() { Suit = Card.CardSuit.Club, Value = 4 });
            straightFlushCards.Add(new Card() { Suit = Card.CardSuit.Club, Value = 5 });
            straightFlushCards.Add(new Card() { Suit = Card.CardSuit.Club, Value = 6 });

            var player1Hand = new Hand();
            player1Hand.PlayerId = 1;
            player1Hand.Cards = straightFlushCards;

            //FourOfAKind
            var fourOfAKindCards = new List<Card>();
            fourOfAKindCards.Add(new Card() { Suit = Card.CardSuit.Club, Value = 2 });
            fourOfAKindCards.Add(new Card() { Suit = Card.CardSuit.Diamond, Value = 6 });
            fourOfAKindCards.Add(new Card() { Suit = Card.CardSuit.Heart, Value = 2 });
            fourOfAKindCards.Add(new Card() { Suit = Card.CardSuit.Spade, Value = 2 });
            fourOfAKindCards.Add(new Card() { Suit = Card.CardSuit.Diamond, Value = 2 });

            var player2Hand = new Hand();
            player2Hand.PlayerId = 2;
            player2Hand.Cards = fourOfAKindCards;

            var hands = new List<Hand>();
            hands.Add(player1Hand);
            hands.Add(player2Hand);

            //Act
            var outcomeMsg = PokerEvaluator.Evaluate(hands);

            //Assert
            Assert.AreEqual("Player1 wins - StraightFlush", outcomeMsg);
        }
        public void Hand_HighCard_Should_Not_Win_Pair()
        {
            //Arrange
            var player1Hand = new Hand();
            player1Hand.PlayerId = 1;
            player1Hand.Cards = GetCardsPair();

            var player2Hand = new Hand();
            player2Hand.PlayerId = 2;
            player2Hand.Cards = GetCardsHighCard();

            var hands = new List<Hand>();
            hands.Add(player1Hand);
            hands.Add(player2Hand);

            //Act
            var outcomeMsg = PokerEvaluator.Evaluate(hands);

            //Assert
            Assert.AreNotEqual("Player2 wins - HighCard", outcomeMsg);
        }
        public void Hand_FullHouse_Should_Win_Not_FourOfAKind()
        {
            //Arrange
            //FourOfAKind
            var fourOfAKindCards = new List<Card>();
            fourOfAKindCards.Add(new Card() { Suit = Card.CardSuit.Club, Value = 2 });
            fourOfAKindCards.Add(new Card() { Suit = Card.CardSuit.Diamond, Value = 6 });
            fourOfAKindCards.Add(new Card() { Suit = Card.CardSuit.Heart, Value = 2 });
            fourOfAKindCards.Add(new Card() { Suit = Card.CardSuit.Spade, Value = 2 });
            fourOfAKindCards.Add(new Card() { Suit = Card.CardSuit.Diamond, Value = 2 });

            var player1Hand = new Hand();
            player1Hand.PlayerId = 1;
            player1Hand.Cards = fourOfAKindCards;

            //FullHouse
            var fullHousecards = new List<Card>();
            fullHousecards.Add(new Card() { Suit = Card.CardSuit.Club, Value = 2 });
            fullHousecards.Add(new Card() { Suit = Card.CardSuit.Diamond, Value = 2 });
            fullHousecards.Add(new Card() { Suit = Card.CardSuit.Heart, Value = 2 });
            fullHousecards.Add(new Card() { Suit = Card.CardSuit.Club, Value = 3 });
            fullHousecards.Add(new Card() { Suit = Card.CardSuit.Diamond, Value = 3 });

            var player2Hand = new Hand();
            player2Hand.PlayerId = 2;
            player2Hand.Cards = fullHousecards;

            var hands = new List<Hand>();
            hands.Add(player1Hand);
            hands.Add(player2Hand);

            //Act
            var outcomeMsg = PokerEvaluator.Evaluate(hands);

            //Assert
            Assert.AreNotEqual("Player2 wins - FullHouse", outcomeMsg);
        }