diff --git a/zulip_bots/zulip_bots/lib_tests.py b/zulip_bots/zulip_bots/lib_tests.py index 504745c..bcd09f2 100644 --- a/zulip_bots/zulip_bots/lib_tests.py +++ b/zulip_bots/zulip_bots/lib_tests.py @@ -1,8 +1,9 @@ from unittest import TestCase -from mock import MagicMock +from mock import MagicMock, patch, ANY from zulip_bots.lib import ( ExternalBotHandler, StateHandler, + run_message_handler_for_bot, ) class FakeClient: @@ -81,3 +82,48 @@ class LibTest(TestCase): client.send_message = MagicMock() handler.send_reply(test[0], response_text) client.send_message.assert_called_once_with(dict(test[1], content=response_text)) + + def test_content_and_full_content(self): + client = FakeClient() + profile = client.get_profile() + handler = ExternalBotHandler( + client=client, + root_dir=None, + bot_details=None, + bot_config_file=None + ) + to = {'email': 'Some@User'} + + def test_run_message_handler_for_bot(self): + with patch('zulip_bots.lib.Client', new=FakeClient) as fake_client: + mock_lib_module = MagicMock() + # __file__ is not mocked by MagicMock(), so we assign a mock value manually. + mock_lib_module.__file__ = "foo" + mock_bot_handler = MagicMock() + mock_lib_module.handler_class.return_value = mock_bot_handler + + def call_on_each_event_mock(self, callback, event_types=None, narrow=None): + def test_message(message, flags): + event = {'message': message, + 'flags': flags, + 'type': 'message'} + callback(event) + + # In the following test, expected_message is the dict that we expect + # to be passed to the bot's handle_message function. + original_message = {'content': '@**Alice** bar', + 'type': 'stream'} + expected_message = {'type': 'stream', + 'content': 'bar'} + test_message(original_message, {'mentioned'}) + mock_bot_handler.handle_message.assert_called_with( + message=expected_message, + bot_handler=ANY) + + fake_client.call_on_each_event = call_on_each_event_mock.__get__( + fake_client, fake_client.__class__) + run_message_handler_for_bot(lib_module=mock_lib_module, + quiet=True, + config_file=None, + bot_config_file=None, + bot_name='testbot')