def setUp(self): self.pm = PluginManager(SAMPLE_CONFIG)
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)