def test_cannot_add_card_with_lower_value(self):
     card = LostCitiesCard(LostCitiesCardSuit.RED, LostCitiesCardValue.TEN)
     tableau = LostCitiesCardTableau(LostCitiesCardSuit.RED)
     tableau.add_card(card)
     lower_card = LostCitiesCard(LostCitiesCardSuit.RED, LostCitiesCardValue.NINE)
     with self.assertRaises(TypeError):
         tableau.add_card(lower_card)
 def test_tableau_add_multiple_investments(self):
     first_investment_card = LostCitiesCard(LostCitiesCardSuit.RED, LostCitiesCardValue.INVESTMENT)
     second_investment_card = LostCitiesCard(LostCitiesCardSuit.RED, LostCitiesCardValue.INVESTMENT)
     tableau = LostCitiesCardTableau(LostCitiesCardSuit.RED)
     tableau.add_card(first_investment_card)
     tableau.add_card(second_investment_card)
     self.assertEqual(second_investment_card, tableau.get_top_card())
     self.assertEqual(-20 * 3, tableau.get_total_value)
 def test_tableau_total_with_only_investment(self):
     first_investment_card = LostCitiesCard(LostCitiesCardSuit.RED, LostCitiesCardValue.INVESTMENT)
     second_investment_card = LostCitiesCard(LostCitiesCardSuit.RED, LostCitiesCardValue.INVESTMENT)
     third_investment_card = LostCitiesCard(LostCitiesCardSuit.RED, LostCitiesCardValue.INVESTMENT)
     tableau = LostCitiesCardTableau(LostCitiesCardSuit.RED)
     tableau.add_card(first_investment_card)
     tableau.add_card(second_investment_card)
     tableau.add_card(third_investment_card)
     self.assertEqual(-20 * 4, tableau.get_total_value)
 def test_tableau_total(self):
     first_card = LostCitiesCard(LostCitiesCardSuit.RED, LostCitiesCardValue.TWO)
     second_card = LostCitiesCard(LostCitiesCardSuit.RED, LostCitiesCardValue.THREE)
     third_card = LostCitiesCard(LostCitiesCardSuit.RED, LostCitiesCardValue.FOUR)
     tableau = LostCitiesCardTableau(LostCitiesCardSuit.RED)
     tableau.add_card(first_card)
     tableau.add_card(second_card)
     tableau.add_card(third_card)
     self.assertEqual(-20 + 2 + 3 + 4, tableau.get_total_value)
 def test_top_card_is_highest(self):
     first_card = LostCitiesCard(LostCitiesCardSuit.RED, LostCitiesCardValue.TWO)
     second_card = LostCitiesCard(LostCitiesCardSuit.RED, LostCitiesCardValue.THREE)
     third_card = LostCitiesCard(LostCitiesCardSuit.RED, LostCitiesCardValue.FOUR)
     tableau = LostCitiesCardTableau(LostCitiesCardSuit.RED)
     tableau.add_card(first_card)
     tableau.add_card(second_card)
     tableau.add_card(third_card)
     self.assertEqual(third_card, tableau.get_top_card(),
                      f"Top card was not {third_card.suit} {third_card.value} as expected")
 def test_tableau_total_with_single_investment(self):
     investment_card = LostCitiesCard(LostCitiesCardSuit.RED, LostCitiesCardValue.INVESTMENT)
     first_card = LostCitiesCard(LostCitiesCardSuit.RED, LostCitiesCardValue.TWO)
     second_card = LostCitiesCard(LostCitiesCardSuit.RED, LostCitiesCardValue.THREE)
     third_card = LostCitiesCard(LostCitiesCardSuit.RED, LostCitiesCardValue.FOUR)
     tableau = LostCitiesCardTableau(LostCitiesCardSuit.RED)
     tableau.add_card(investment_card)
     tableau.add_card(first_card)
     tableau.add_card(second_card)
     tableau.add_card(third_card)
     self.assertEqual((-20 + 2 + 3 + 4) * 2, tableau.get_total_value)
 def test_tableau_total_with_bonus(self):
     first_card = LostCitiesCard(LostCitiesCardSuit.RED, LostCitiesCardValue.TWO)
     second_card = LostCitiesCard(LostCitiesCardSuit.RED, LostCitiesCardValue.THREE)
     third_card = LostCitiesCard(LostCitiesCardSuit.RED, LostCitiesCardValue.FOUR)
     fourth_card = LostCitiesCard(LostCitiesCardSuit.RED, LostCitiesCardValue.FIVE)
     fifth_card = LostCitiesCard(LostCitiesCardSuit.RED, LostCitiesCardValue.SIX)
     sixth_card = LostCitiesCard(LostCitiesCardSuit.RED, LostCitiesCardValue.SEVEN)
     seventh_card = LostCitiesCard(LostCitiesCardSuit.RED, LostCitiesCardValue.EIGHT)
     eighth_card = LostCitiesCard(LostCitiesCardSuit.RED, LostCitiesCardValue.NINE)
     tableau = LostCitiesCardTableau(LostCitiesCardSuit.RED)
     tableau.add_card(first_card)
     tableau.add_card(second_card)
     tableau.add_card(third_card)
     tableau.add_card(fourth_card)
     tableau.add_card(fifth_card)
     tableau.add_card(sixth_card)
     tableau.add_card(seventh_card)
     tableau.add_card(eighth_card)
     self.assertEqual(-20 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 20, tableau.get_total_value)
 def test_tableau_total_with_bonus_and_investment(self):
     investment_card = LostCitiesCard(LostCitiesCardSuit.RED, LostCitiesCardValue.INVESTMENT)
     first_card = LostCitiesCard(LostCitiesCardSuit.RED, LostCitiesCardValue.TWO)
     second_card = LostCitiesCard(LostCitiesCardSuit.RED, LostCitiesCardValue.THREE)
     third_card = LostCitiesCard(LostCitiesCardSuit.RED, LostCitiesCardValue.FOUR)
     fourth_card = LostCitiesCard(LostCitiesCardSuit.RED, LostCitiesCardValue.FIVE)
     fifth_card = LostCitiesCard(LostCitiesCardSuit.RED, LostCitiesCardValue.SIX)
     sixth_card = LostCitiesCard(LostCitiesCardSuit.RED, LostCitiesCardValue.SEVEN)
     seventh_card = LostCitiesCard(LostCitiesCardSuit.RED, LostCitiesCardValue.EIGHT)
     tableau = LostCitiesCardTableau(LostCitiesCardSuit.RED)
     tableau.add_card(investment_card)
     tableau.add_card(first_card)
     tableau.add_card(second_card)
     tableau.add_card(third_card)
     tableau.add_card(fourth_card)
     tableau.add_card(fifth_card)
     tableau.add_card(sixth_card)
     tableau.add_card(seventh_card)
     self.assertEqual(((-20 + 2 + 3 + 4 + 5 + 6 + 7 + 8) * 2) + 20, tableau.get_total_value)
 def test_cannot_add_card_with_wrong_suit(self):
     card = LostCitiesCard(LostCitiesCardSuit.BLUE, LostCitiesCardValue.EIGHT)
     tableau = LostCitiesCardTableau(LostCitiesCardSuit.RED)
     with self.assertRaises(TypeError):
         tableau.add_card(card)
 def test_add_card(self):
     card = LostCitiesCard(LostCitiesCardSuit.RED, LostCitiesCardValue.EIGHT)
     tableau = LostCitiesCardTableau(LostCitiesCardSuit.RED)
     tableau.add_card(card)
     self.assertEqual(card, tableau.get_top_card(),
                      f"The top card of the tableau is not {card.suit} {card.value} as expected")