def test_can_receive_game_end_message(self):
     player1 = create_player_that_responds_to_first_message()
     player2 = create_player_that_responds_to_first_message()
     player1.add_to_hand(ESTATE)
     players = [player1, player2]
     engine = DominionEngine(players, FIRST_GAME)
     engine.run_until_game_end()
     self.assertEquals(
         {
             "type": "game-end",
             "winners": ["player1"],
             "scores": [4, 3]
         }, player1.last_message)
     self.assertEquals(
         {
             "type": "game-end",
             "winners": ["player1"],
             "scores": [4, 3]
         }, player2.last_message)
    def test_game_ends_if_no_player_can_make_a_move(self):
        player = Player()

        def send_message_and_await_response(json_message):
            message = json.loads(json_message)
            if message["type"] == "player-name-request":
                return json.dumps({
                    "type": "player-name-reply",
                    "player_number": message["player_number"],
                    "name": "nothing-bot",
                    "version": 1
                })
            else:
                return json.dumps({"type": "play-reply", "phase": "cleanup"})

        player.send_message_and_await_response = send_message_and_await_response
        player.send_message = lambda msg: None

        players = [player]
        engine = DominionEngine(players, FIRST_GAME)
        engine.run_until_game_end()

        self.assertEquals(3, player.get_score())
        self.assertEquals(500, player.get_number_of_turns_taken())