Skip to content
Snippets Groups Projects
test_plugins.py 3.31 KiB
Newer Older
  • Learn to ignore specific revisions
  • Eliot Berriot's avatar
    Eliot Berriot committed
    from funkwhale_api.common import plugins
    
    # setup code to populate plugins registry
    # plugin-to-user -> enable and configure
    # plugin preferences
    
    
    def test_plugin_register(plugins_registry):
        class TestPlugin(plugins.Plugin):
            name = "scrobbler"
            verbose_name = "Audio Scrobbler"
    
        inst = TestPlugin(app_name="scrobbler", app_module="")
        plugins_registry.register(inst)
    
        assert inst.plugins_registry == plugins_registry
        assert inst.is_initialized is False
        assert plugins_registry["scrobbler"] == inst
        assert inst.config == {}
    
    
    def test_plugin_get_config(plugins_registry):
        class TestPlugin(plugins.Plugin):
            name = "scrobbler"
            verbose_name = "Audio Scrobbler"
    
        plugin = TestPlugin(app_name="", app_module="")
        assert plugin.get_config({"hello": "world"}) == {"hello": "world"}
    
    
    def test_plugin_set_config(plugins_registry):
        class TestPlugin(plugins.Plugin):
            name = "scrobbler"
            verbose_name = "Audio Scrobbler"
    
        plugin = TestPlugin(app_name="", app_module="")
        plugin.set_config({"hello": "world"})
        assert plugin.config == {"hello": "world"}
    
    
    def test_plugin_initialize(plugins_registry):
        class TestPlugin(plugins.Plugin):
            name = "scrobbler"
            verbose_name = "Audio Scrobbler"
    
        plugin = TestPlugin(app_name="", app_module="")
        assert plugin.initialize() is None
    
    
    def test_action(mocker, plugins_registry):
        class TestPlugin(plugins.Plugin):
            name = "scrobbler"
            verbose_name = "Audio Scrobbler"
    
        inst = TestPlugin(app_name="scrobbler", app_module="")
        plugins_registry.register(inst)
    
        stub = mocker.stub()
    
        # nothing hooked, so stub is not called
        plugins_registry.dispatch_action("hello", user="test", arg1="value1", arg2="value2")
        stub.assert_not_called()
    
        # now we hook the stub on the action
        inst.register_action("hello", stub)
        assert inst.hooked_actions == {"hello": stub}
        plugins_registry.dispatch_action("hello", user="test", arg1="value1", arg2="value2")
    
        stub.assert_called_once_with(plugin=inst, user="test", arg1="value1", arg2="value2")
    
    
    def test_plugins_init(plugins_registry, mocker):
        class TestPlugin1(plugins.Plugin):
            name = "scrobbler"
            verbose_name = "Audio Scrobbler"
    
        class TestPlugin2(plugins.Plugin):
            name = "webhooks"
            verbose_name = "Webhooks"
    
        plugin1 = TestPlugin1(app_name="scrobbler", app_module="")
        plugin2 = TestPlugin2(app_name="webhooks", app_module="")
    
        mocks = {}
        for plugin in [plugin1, plugin2]:
            d = {
                "get_config": mocker.patch.object(plugin, "get_config"),
                "set_config": mocker.patch.object(plugin, "set_config"),
                "initialize": mocker.patch.object(plugin, "initialize"),
            }
            mocks[plugin.name] = d
    
        autodiscover = mocker.patch.object(plugins_registry, "autodiscover")
        plugins.init(plugins_registry, [plugin1, plugin2])
    
        autodiscover.assert_called_once_with([plugin1.name, plugin2.name])
    
        for mock_conf in mocks.values():
            mock_conf["get_config"].assert_called_once_with({})
            mock_conf["set_config"].assert_called_once_with(
                mock_conf["get_config"].return_value
            )
            mock_conf["initialize"].assert_called_once_with()
    
        assert plugin1.is_initialized is True
        assert plugin2.is_initialized is True