示例#1
0
 def setUp(self):
     self.pm = PluginManager(SAMPLE_CONFIG)
示例#2
0
class PluginManagerTestCase(unittest.TestCase):
    def setUp(self):
        self.pm = PluginManager(SAMPLE_CONFIG)

    def test_extra_plugin_options_are_set(self):
        options = None
        for p in self.pm.plugins:
            if p.__class__.__name__ == "TestPlugin":
                options = p.options
                break
        expected = {"test": 123, "herp": "derp"}
        self.assertEquals(options, expected)

    def test_handlers_for_event(self):
        handlers = []
        for handler, priority, whitelist in self.pm.handlers("MessageStatus"):
            handlers.append((handler.__name__, priority, whitelist))
        expected = [
            ("on_message_status", 1, ["some_chat"]),
            ("on_message_status", 42, ["chat"]),
            ("on_message_status", 0, None),
        ]
        self.assertItemsEqual(expected, handlers)

    def test_handlers_for_unknown_event(self):
        self.assertItemsEqual(list(), list(self.pm.handlers("UnknownEvent")))

    def test_handlers_sorted_by_priority_descending(self):
        priorities = []
        for _, priority, _ in self.pm.handlers("MessageStatus"):
            priorities.append(priority)
        self.assertEqual([42, 1, 0], priorities)

    def test_handler_exec_for_event_message_body_changed(self):
        message = DummyMessage()
        message.Chat.Name = "chat"
        status = 1337
        handler = self.pm.on_event("MessageStatus")
        handler(message, status)
        self.assertEqual("message body, modified", message.Body)

    def test_handler_exec_for_event_output(self):
        handler = self.pm.on_event("MessageStatus")
        message = DummyMessage()
        message.Chat.Name = "some_chat"
        status = 1337
        handler(message, status)
        output = list()
        for plugin in self.pm.plugins:
            output.extend(plugin.flush_output())
        expected = ["1"]
        self.assertEquals(expected, output)

    def test_skip_chat_if_not_whitelisted_while_whitelist_is_set(self):
        # Quick check whether "chat" is whitelisted for "YetAnotherPlugin".
        expected = ["chat"]
        self.assertEqual(expected, list(self.pm.plugins)[0].whitelist)

        handler = self.pm.on_event("MessageStatus")
        message = DummyMessage()
        # Chat name is set to "other_chat" so it won't appear on whitelist.
        message.Chat.Name = "other_chat"
        status = 1337
        handler(message, status)
        output = list()
        for plugin in self.pm.plugins:
            output.extend(plugin.flush_output())
        # No output expected since "other_chat" is not whitelisted anywhere.
        expected = list()
        self.assertEqual(expected, output)

    def test_return_values_and_initial_arguments_are_matched(self):
        handler = self.pm.on_event("MessageStatus")
        message = DummyMessage()
        status = 101
        args = (message, status)
        retvals = handler(*args)
        self.assertItemsEqual(args, retvals)

    def test_handler_call_without_arguments_returns_empty_tuple(self):
        handler = self.pm.on_event("CallHistory")
        self.assertEqual(tuple(), handler())

    def test_register_unknown_event_handler(self):
        def handler(arg1, arg2):
            return arg1, arg2
        event = "SomeEvent"
        registered = self.pm.register_event_handler(event, handler)
        # Method returns None for unknown events.
        self.failUnlessEqual(registered, None)

        def handler(message, status):
            return message, status
        event = "MessageStatus"
        registered = self.pm.register_event_handler(event, handler)
        # Method returns successfully registered handler.
        self.assertEqual(registered, handler)

        handlers = []
        for handler, priority, whitelist in self.pm.handlers("MessageStatus"):
            handlers.append((handler.__name__, priority, whitelist))
        expected = [
            ("on_message_status", 1, ["some_chat"]),
            ("on_message_status", 42, ["chat"]),
            ("on_message_status", 0, None),
            ("handler", 0, None),
        ]
        self.assertItemsEqual(handlers, expected)