def leave_game_message(self, message): """Someone wants to leave their game.""" player = message['player'] game = self.game_for_player(player) if game: try: gametools.remove_player_named(game, player) self.send_to_frontends('left_game', player=player, game=game) self.log.debug('%s left game %d.', player, game['number']) except gametools.GameAlreadyStartedError: error = 'Game has started' detail = ('You cannot leave a game that has already started.') self.send_error(player, error, detail) if not game['players']: self.games_list.remove(game) self.send_to_frontends('game_over', game_number=game['number']) self.log.debug('Game %d is over.', game['number']) self.send_games_list_to_frontends()
def test_remove_player_from_started_game(self): gametools.add_player_named(self.game, "testwomanican") gametools.start_game(self.game) with self.assertRaises(gametools.GameAlreadyStartedError): gametools.remove_player_named(self.game, "testwomanican")
def test_remove_player_from_finished_game(self): gametools.add_player_named(self.game, "testwomanican") gametools.start_game(self.game) self.game["ended"] = True gametools.remove_player_named(self.game, "testwomanican") self.assertFalse(self.game["players"])
def test_remove_player_from_unstarted_game(self): gametools.add_player_named(self.game, "testmanican") gametools.add_player_named(self.game, "testvetica") gametools.remove_player_named(self.game, "testmanican") self.assertEqual(len(self.game["players"]), 1, self.game) self.assertEqual(self.game["players"][0]["name"], "testvetica")