107 lines
3.3 KiB
Python
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
|