funkwhale/api/tests/common/test_plugins.py

107 lines
3.3 KiB
Python

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