class TestPlayer(unittest.TestCase):
    def setUp(self):
        self.testPlayer = Player()

    def tearDown(self):
        del self.testPlayer

    def test_card_draw(self):
        self.testPlayer.recieve_card(Card(CardFaceType.ACE, SuitType.CLUB))
        self.testPlayer.recieve_card(Card(CardFaceType.ACE, SuitType.HEART))
        testHand = self.testPlayer.get_hand()
        self.assertEqual(len(testHand), 2,
                         "expected different number of cards")

    def test_hand_value_all_aces(self):
        self.testPlayer.recieve_card(Card(CardFaceType.ACE, SuitType.CLUB))
        self.testPlayer.recieve_card(Card(CardFaceType.ACE, SuitType.HEART))
        self.testPlayer.recieve_card(Card(CardFaceType.ACE, SuitType.SPADE))
        self.testPlayer.recieve_card(Card(CardFaceType.ACE, SuitType.CLUB))

        self.assertEqual(self.testPlayer.get_hand_value(), 14, "failed case 1")

    def test_hand_value_aces_and_twos(self):
        # this will test against having all aces and all twos
        self.testPlayer.recieve_card(Card(CardFaceType.ACE, SuitType.CLUB))
        self.testPlayer.recieve_card(Card(CardFaceType.ACE, SuitType.HEART))
        self.testPlayer.recieve_card(Card(CardFaceType.ACE, SuitType.SPADE))
        self.testPlayer.recieve_card(Card(CardFaceType.ACE, SuitType.CLUB))

        self.testPlayer.recieve_card(Card(CardFaceType.TWO, SuitType.CLUB))
        self.testPlayer.recieve_card(Card(CardFaceType.TWO, SuitType.HEART))
        self.testPlayer.recieve_card(Card(CardFaceType.TWO, SuitType.SPADE))
        self.testPlayer.recieve_card(Card(CardFaceType.TWO, SuitType.CLUB))

        self.assertEqual(len(self.testPlayer.get_hand()), 8,
                         "incorrect number of cards")

        self.assertEqual(self.testPlayer.get_hand_value(), 12,
                         "failed case2 -- all twos and aces")

    def test_hand_value_face_and_ace(self):
        self.testPlayer.recieve_card(Card(CardFaceType.JACK, SuitType.CLUB))
        self.testPlayer.recieve_card(Card(CardFaceType.ACE, SuitType.HEART))

        self.assertEqual(len(self.testPlayer.get_hand()), 2,
                         "mismatch on the number of cards")
        self.assertEqual(self.testPlayer.get_hand_value(), 21,
                         "error this should be a winning hand")

    def test_hand_value_two_face_cards_and_ace(self):
        self.testPlayer.recieve_card(Card(CardFaceType.JACK, SuitType.CLUB))
        self.testPlayer.recieve_card(Card(CardFaceType.ACE, SuitType.HEART))
        self.testPlayer.recieve_card(Card(CardFaceType.TEN, SuitType.SPADE))

        self.assertEqual(len(self.testPlayer.get_hand()), 3,
                         "mismatch on the number of cards")
        self.assertEqual(self.testPlayer.get_hand_value(), 21,
                         "error this should be a winning hand")