6
0
mirror of https://github.com/ChristianLight/tutor.git synced 2024-09-21 00:49:02 +00:00
tutor/tests/test_plugins.py
Régis Behmo 3b108d21de 🔌 Introduce a plugin system for tutor
This adds the basic feratures that we need for a working plugin system,
but there are still many TODOs in the codebase.
2019-06-07 22:49:45 +02:00

91 lines
3.2 KiB
Python

import unittest
import unittest.mock
from tutor import exceptions
from tutor import plugins
class PluginsTests(unittest.TestCase):
def setUp(self):
plugins.Patches.CACHE.clear()
def test_iter_installed(self):
with unittest.mock.patch.object(
plugins.pkg_resources, "iter_entry_points", return_value=[]
):
self.assertEqual([], list(plugins.iter_installed()))
def test_is_installed(self):
self.assertFalse(plugins.is_installed("dummy"))
def test_enable(self):
config = {plugins.CONFIG_KEY: []}
with unittest.mock.patch.object(plugins, "is_installed", return_value=True):
plugins.enable(config, "plugin2")
plugins.enable(config, "plugin1")
self.assertEqual(["plugin1", "plugin2"], config[plugins.CONFIG_KEY])
def test_enable_twice(self):
config = {plugins.CONFIG_KEY: []}
with unittest.mock.patch.object(plugins, "is_installed", return_value=True):
plugins.enable(config, "plugin1")
plugins.enable(config, "plugin1")
self.assertEqual(["plugin1"], config[plugins.CONFIG_KEY])
def test_enable_not_installed_plugin(self):
config = {"PLUGINS": []}
with unittest.mock.patch.object(plugins, "is_installed", return_value=False):
self.assertRaises(exceptions.TutorError, plugins.enable, config, "plugin1")
def test_patches(self):
class plugin1:
patches = {"patch1": "Hello {{ ID }}"}
with unittest.mock.patch.object(
plugins, "iter_enabled", return_value=[("plugin1", plugin1)]
):
patches = list(plugins.iter_patches({}, "patch1"))
self.assertEqual([("plugin1", "Hello {{ ID }}")], patches)
def test_plugin_without_patches(self):
class plugin1:
pass
with unittest.mock.patch.object(
plugins, "iter_enabled", return_value=[("plugin1", plugin1)]
):
patches = list(plugins.iter_patches({}, "patch1"))
self.assertEqual([], patches)
def test_configure(self):
config = {"ID": "oldid"}
class plugin1:
config = {
"add": {"PARAM1": "value1", "PARAM2": "value2"},
"set": {"ID": "newid"},
"defaults": {"PARAM3": "value3"},
}
with unittest.mock.patch.object(
plugins, "iter_enabled", return_value=[("plugin1", plugin1)]
):
add_config, set_config, defaults_config = plugins.load_config(config)
self.assertEqual(
{"PLUGIN1_PARAM1": "value1", "PLUGIN1_PARAM2": "value2"}, add_config
)
self.assertEqual({"ID": "newid"}, set_config)
self.assertEqual({"PLUGIN1_PARAM3": "value3"}, defaults_config)
def test_scripts(self):
class plugin1:
scripts = {"init": [{"service": "myclient", "command": "init command"}]}
with unittest.mock.patch.object(
plugins, "iter_enabled", return_value=[("plugin1", plugin1)]
):
self.assertEqual(
[("plugin1", "myclient", "init command")],
list(plugins.iter_scripts({}, "init")),
)