class Game: def __init__(self, slack_client): self.slack_client = slack_client self.game_state = GameState(slack_client) self.invalid_handler = InvalidHandler(self.game_state) def process(self, data): # TODO: quit handler try: is_invalid = self.invalid_handler.is_invalid(data) if is_invalid and not isinstance(self.game_state.handler, InvalidHandler): self.game_state.interrupt_handler(self.invalid_handler) self.invalid_handler.request_invalid_confirmation(data['user']) else: if self.game_state.handler: self.game_state.handler.process(data) except GameEndException: self.__init__(self.slack_client) def tick(self): try: if self.game_state.handler: self.game_state.handler.tick() except GameEndException: self.__init__(self.slack_client)
class TestInvalidHandler(unittest.TestCase): def setUp(self): random = RandomMock() self.slack_client = MockSlackClient() self.game_state = GameState(self.slack_client, random_func=random, chat=Chat(self.slack_client, "chat_chanel"), channel="chat_chanel") self.handler = InvalidHandler(self.game_state) self._add_players(self.slack_client, self.game_state) def _add_players(self, slack_client, game_state): manager = game_state.team_manager manager.add_player(Player("p1", slack_client)) # red team manager.add_player(Player("p2", slack_client)) manager.add_player(Player("p3", slack_client)) # blue team manager.add_player(Player("p4", slack_client)) manager.add_player(Player("p5", slack_client)) manager.pick_teams() def test_is_invalid(self): data = {'text': 'cn invalid clue', 'channel': 'chat_chanel'} result = self.handler.is_invalid(data) self.assertTrue(result) def test_process(self): data = {'text': 'cn invalid clue', 'channel': 'chat_chanel'} self.handler.process(data) self.assertFalse( isinstance(self.game_state.handler, ResolveInvalidHandler)) data = {'text': 'cn invalid agree', 'channel': 'chat_chanel'} self.handler.process(data) self.assertTrue( isinstance(self.game_state.handler, ResolveInvalidHandler)) self.assertEqual("Clue deemed invalid! Red Team will gets a freebie", self.slack_client.api_calls[-2][1])
class TestInvalidHandler(unittest.TestCase): def setUp(self): random = RandomMock() self.slack_client = MockSlackClient() self.game_state = GameState(self.slack_client, random_func=random, chat=Chat(self.slack_client, "chat_chanel"), channel="chat_chanel") self.handler = InvalidHandler(self.game_state) self._add_players(self.slack_client, self.game_state) def _add_players(self, slack_client, game_state): manager = game_state.team_manager manager.add_player(Player("p1", slack_client)) # red team manager.add_player(Player("p2", slack_client)) manager.add_player(Player("p3", slack_client)) # blue team manager.add_player(Player("p4", slack_client)) manager.add_player(Player("p5", slack_client)) manager.pick_teams() def test_is_invalid(self): data = {'text': 'cn invalid clue', 'channel': 'chat_chanel'} result = self.handler.is_invalid(data) self.assertTrue(result) def test_process(self): data = {'text': 'cn invalid clue', 'channel': 'chat_chanel'} self.handler.process(data) self.assertFalse(isinstance(self.game_state.handler, ResolveInvalidHandler)) data = {'text': 'cn invalid agree', 'channel': 'chat_chanel'} self.handler.process(data) self.assertTrue(isinstance(self.game_state.handler, ResolveInvalidHandler)) self.assertEqual("Clue deemed invalid! Red Team will gets a freebie", self.slack_client.api_calls[-2][1])