From daad7f24e46319fe2f98a55a3cee757c036b397c Mon Sep 17 00:00:00 2001 From: derAnfaenger Date: Wed, 1 Nov 2017 13:04:54 +0100 Subject: [PATCH] bots: Set JSON as default serializer for StateHandler. With this change, StateHandler.put() does only accept JSON-able objects by default. The incrementor test tried to store the return value of send_reply(), a non-JSON-able MockObject, in the state. Therefore, this commits also sets functional default test return values for send_message() and send_reply(). Finally, it fixes the tictactoe bot which relied on directly modifying the state_ attribute. --- zulip_bots/zulip_bots/bots/tictactoe/tictactoe.py | 1 + zulip_bots/zulip_bots/lib.py | 4 ++-- zulip_bots/zulip_bots/test_lib.py | 2 ++ 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/zulip_bots/zulip_bots/bots/tictactoe/tictactoe.py b/zulip_bots/zulip_bots/bots/tictactoe/tictactoe.py index 88d244f..d02f988 100644 --- a/zulip_bots/zulip_bots/bots/tictactoe/tictactoe.py +++ b/zulip_bots/zulip_bots/bots/tictactoe/tictactoe.py @@ -299,6 +299,7 @@ class ticTacToeHandler(object): return_content = TicTacToeGame.detailed_help_message elif (user_game) and TicTacToeGame.check_validity(user_game, TicTacToeGame.sanitize_move(user_game, command)): return_content = TicTacToeGame.tictactoe(user_game, user_board, command) + storage.put(original_sender, user_board) elif (user_game) and command == 'quit': storage.put(original_sender, None) return_content = "You've successfully quit the game." diff --git a/zulip_bots/zulip_bots/lib.py b/zulip_bots/zulip_bots/lib.py index a51b81f..6996122 100644 --- a/zulip_bots/zulip_bots/lib.py +++ b/zulip_bots/zulip_bots/lib.py @@ -56,8 +56,8 @@ class StateHandler(object): def __init__(self): # type: () -> None self.state_ = {} # type: Dict[Text, Text] - self.marshal = lambda obj: obj - self.demarshal = lambda obj: obj + self.marshal = lambda obj: json.dumps(obj) + self.demarshal = lambda obj: json.loads(obj) def put(self, key, value): # type: (Text, Text) -> None diff --git a/zulip_bots/zulip_bots/test_lib.py b/zulip_bots/zulip_bots/test_lib.py index 48dd05d..fea1e82 100755 --- a/zulip_bots/zulip_bots/test_lib.py +++ b/zulip_bots/zulip_bots/test_lib.py @@ -46,6 +46,8 @@ class BotTestCaseBase(TestCase): self.MockClass = self.patcher.start() self.mock_bot_handler = self.MockClass(None, None) self.mock_bot_handler.storage = StateHandler() + self.mock_bot_handler.send_message.return_value = {'id': 42} + self.mock_bot_handler.send_reply.return_value = {'id': 42} self.message_handler = self.get_bot_message_handler() def tearDown(self):