def test_flag_cannot_be_played_if_already_claimed(self):
        for number in [10, 9, 8]:
            self.engine.board_logic.addCard(
                2, Identifiers.NORTH, TroopCard(number, "color1"))

        self.engine.player1.provide_next_turn(TroopCard(1, "color2"), 3)
        self.engine.player2.provide_next_turn(TroopCard(2, "color2"), 3)
        self.engine.progress_turn()
        self.assertEquals(self.engine.last_move.flag, 1)
        self.assertEquals(self.engine.last_move.card, TroopCard(2, "color2"))
    def test_unplayed_cards_after_initialization(self):
        expected_cards = set(self.engine.get_troop_cards())
        self.assertEquals(expected_cards, set(
            self.engine.get_unplayed_cards()))
        self.__play_turn()
        expected_cards = expected_cards - \
            set([TroopCard(color="color1", number=1),
                 TroopCard(color="color1", number=2)])
        self.assertEquals(expected_cards, set(
            self.engine.get_unplayed_cards()))

        outputArray = self.__getStartingString()
        for move in self.movesList[0]:
            outputArray.append(move)

        outputArray.append("")
        self.assertEquals(self.__getOutputFileContents(),
                          "\n".join(outputArray))
    def test_invalid_moves_with_flag_and_card(self):

        self.engine.player1.provide_next_turn(TroopCard(1, "blah"), 1)
        self.engine.player2.provide_next_turn(TroopCard(11, "color1"), 1)
        self.engine.progress_turn()

        self.assertEquals([TroopCard(color="color1", number=1)],
                          self.engine.board_logic.board.get_flag(1).sides[Identifiers.NORTH])
        self.assertEquals([TroopCard(color="color1", number=2)],
                          self.engine.board_logic.board.get_flag(1).sides[Identifiers.SOUTH])

        outputArray = self.__getStartingString()
        for move in self.movesList[0]:
            outputArray.append(move)

        outputArray.append("")
        self.assertEquals(self.__getOutputFileContents(),
                          "\n".join(outputArray))
    def test_one_turn_plays_a_troop_and_draws_new_one(self):
        # make new copies of the hand
        player1_hand = [card for card in self.engine.player1.hand]
        player2_hand = [card for card in self.engine.player2.hand]

        self.__play_turn()

        self.assertHandsDifferBy1(player1_hand, self.engine.player1.hand)
        self.assertHandsDifferBy1(player2_hand, self.engine.player2.hand)
        self.assertNotIn(TroopCard(1, "color1"), self.engine.player1.hand)
        self.assertNotIn(TroopCard(2, "color1"), self.engine.player1.hand)
        outputArray = self.__getStartingString()
        for move in self.movesList[0]:
            outputArray.append(move)

        outputArray.append("")
        self.assertEquals(self.__getOutputFileContents(),
                          "\n".join(outputArray))
    def test_player2_does_not_get_turn_if_player1_wins(self):
        for flag in xrange(9):
            self.engine.board_logic.addCard(
                flag, Identifiers.SOUTH, TroopCard(1, "color1"))
            self.engine.board_logic.addCard(
                flag, Identifiers.SOUTH, TroopCard(2, "color1"))
            self.engine.board_logic.addCard(
                flag, Identifiers.SOUTH, TroopCard(3, "color1"))

        self.engine.player1.provide_next_turn(TroopCard(1, "color2"), 9)
        self.engine.player2.provide_next_turn(TroopCard(2, "color2"), 9)
        self.engine.progress_turn()
        self.assertEquals(self.engine.last_move.flag, 9)
        self.assertEquals(self.engine.last_move.card, TroopCard(1, "color2"))
    def test_invalid_moves_still_produce_a_valid_move(self):
        for i in xrange(4):
            self.__play_turn()
        self.assertEquals([TroopCard(color="color1", number=1),
                           TroopCard(color="color1", number=3),
                           TroopCard(color="color1", number=5)],
                          self.engine.board_logic.board.get_flag(1).sides[Identifiers.NORTH])
        self.assertEquals([TroopCard(color="color1", number=2),
                           TroopCard(color="color1", number=4),
                           TroopCard(color="color1", number=6)],
                          self.engine.board_logic.board.get_flag(1).sides[Identifiers.SOUTH])
        self.assertEquals([TroopCard(color="color1", number=7)],
                          self.engine.board_logic.board.get_flag(2).sides[Identifiers.NORTH])
        self.assertEquals([TroopCard(color="color1", number=8)],
                          self.engine.board_logic.board.get_flag(2).sides[Identifiers.SOUTH])

        outputArray = self.__getStartingString()
        for turn in self.movesList[:4]:
            for move in turn:
                outputArray.append(move)
        outputArray.append("")
        self.assertEquals(self.__getOutputFileContents(),
                          "\n".join(outputArray))
 def test_board_deck_should_have_all_sixty_cards_to_start_with(self):
     colors = ["RED", "GREEN", "ORANGE", "YELLOW", "BLUE", "PURPLE"]
     all_troops = [TroopCard(number, color) for color, number in sorted(
         product(colors, range(1, 11)), reverse=True)]
     return sorted(all_troops) == sorted(self.engine.troop_deck.deck)
 def test_player2_does_not_get_turn_if_player1_wins(self):
     self.engine.board_logic.addCard(
         1, Identifiers.NORTH, TroopCard(10, "color1"))
     self.engine.board_logic.addCard(
         1, Identifiers.NORTH, TroopCard(9, "color1"))
     self.engine.board_logic.addCard(
         1, Identifiers.NORTH, TroopCard(8, "color1"))
     self.engine.board_logic.addCard(
         2, Identifiers.NORTH, TroopCard(10, "color4"))
     self.engine.board_logic.addCard(
         2, Identifiers.NORTH, TroopCard(9, "color4"))
     self.engine.board_logic.addCard(
         2, Identifiers.NORTH, TroopCard(8, "color4"))
     self.engine.board_logic.addCard(
         3, Identifiers.NORTH, TroopCard(10, "color3"))
     self.engine.board_logic.addCard(
         3, Identifiers.NORTH, TroopCard(9, "color3"))
     self.engine.board_logic.addCard(
         3, Identifiers.NORTH, TroopCard(8, "color3"))
     self.engine.player1.provide_next_turn(TroopCard(1, "color2"), 9)
     self.engine.player2.provide_next_turn(TroopCard(2, "color2"), 9)
     self.engine.progress_turn()
     self.assertEquals(self.engine.last_move.flag, 9)
     self.assertEquals(self.engine.last_move.card, TroopCard(1, "color2"))
 def __play_turn(self):
     self.engine.player1.provide_next_turn(TroopCard(1, "color1"), 1)
     self.engine.player2.provide_next_turn(TroopCard(2, "color1"), 1)
     self.engine.progress_turn()
    def test_each_player_starts_with_names_and_with_7_cards_after_initialization(self):
        self.assertEquals([TroopCard(1, "color1"),
                           TroopCard(3, "color1"),
                           TroopCard(5, "color1"),
                           TroopCard(7, "color1"),
                           TroopCard(9, "color1"),
                           TroopCard(1, "color2"),
                           TroopCard(3, "color2")], self.engine.player1.hand)
        self.assertEquals([TroopCard(2, "color1"),
                           TroopCard(4, "color1"),
                           TroopCard(6, "color1"),
                           TroopCard(8, "color1"),
                           TroopCard(10, "color1"),
                           TroopCard(2, "color2"),
                           TroopCard(4, "color2")], self.engine.player2.hand)

        trueStartingString = self.__getStartingString()
        trueStartingString.append("")
        self.assertEquals(
            self.__getOutputFileContents(), "\n".join(trueStartingString))

        '''