From 669bf6c76e5bf703a152dfc004055f0c1233ce6a Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Sun, 23 Oct 2016 13:56:11 +0200 Subject: [PATCH] Add unit tests to cover the extension engine. --- modoboa/core/extensions.py | 19 +++--- modoboa/core/tests/__init__.py | 0 .../core/tests/stupid_extension_1/__init__.py | 0 .../stupid_extension_1/modo_extension.py | 20 ++++++ .../core/tests/stupid_extension_2/__init__.py | 0 .../stupid_extension_2/modo_extension.py | 20 ++++++ modoboa/core/tests/stupid_extension_2/urls.py | 3 + modoboa/core/{tests.py => tests/test_core.py} | 6 +- modoboa/core/tests/test_extensions.py | 63 +++++++++++++++++++ 9 files changed, 117 insertions(+), 14 deletions(-) create mode 100644 modoboa/core/tests/__init__.py create mode 100644 modoboa/core/tests/stupid_extension_1/__init__.py create mode 100644 modoboa/core/tests/stupid_extension_1/modo_extension.py create mode 100644 modoboa/core/tests/stupid_extension_2/__init__.py create mode 100644 modoboa/core/tests/stupid_extension_2/modo_extension.py create mode 100644 modoboa/core/tests/stupid_extension_2/urls.py rename modoboa/core/{tests.py => tests/test_core.py} (99%) create mode 100644 modoboa/core/tests/test_extensions.py diff --git a/modoboa/core/extensions.py b/modoboa/core/extensions.py index 6c29b2b27..78e8f36d1 100644 --- a/modoboa/core/extensions.py +++ b/modoboa/core/extensions.py @@ -5,7 +5,6 @@ from django.conf.urls import include class ModoExtension(object): - """ Base extension class. @@ -23,22 +22,23 @@ class ModoExtension(object): available_for_topredirection = False def infos(self): - return dict( - name=self.name, label=self.label, version=self.version, - description=self.description, url=self.url, - always_active=self.always_active - ) + """Information about this extension.""" + return { + "name": self.name, "label": self.label, "version": self.version, + "description": self.description, "url": self.url, + "always_active": self.always_active + } def load_initial_data(self): """Declare extension data in this method.""" pass def load(self): + """Add extension loading tasks in this method.""" pass class ExtensionsPool(object): - """The extensions manager""" def __init__(self): @@ -60,11 +60,8 @@ class ExtensionsPool(object): self.extensions[name]["instance"] = self.extensions[name]["cls"]() return self.extensions[name]["instance"] - def is_extension_installed(self, name): - """Check if an extension is installed ir not.""" - return name in settings.MODOBOA_APPS - def get_extension_infos(self, name): + """Return information about the specified extension.""" instance = self.get_extension(name) if instance is None: return None diff --git a/modoboa/core/tests/__init__.py b/modoboa/core/tests/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/modoboa/core/tests/stupid_extension_1/__init__.py b/modoboa/core/tests/stupid_extension_1/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/modoboa/core/tests/stupid_extension_1/modo_extension.py b/modoboa/core/tests/stupid_extension_1/modo_extension.py new file mode 100644 index 000000000..6add2bf75 --- /dev/null +++ b/modoboa/core/tests/stupid_extension_1/modo_extension.py @@ -0,0 +1,20 @@ +"""A stupid extension used for tests.""" + +from modoboa.core import extensions + + +class StupidExtension1(extensions.ModoExtension): + """Stupid extension to use with tests.""" + + name = "stupid_extension_1" + label = "Stupid extension" + version = "1.0.0" + description = "A stupid extension" + + def load(self): + pass + + def load_initial_data(self): + pass + +extensions.exts_pool.register_extension(StupidExtension1) diff --git a/modoboa/core/tests/stupid_extension_2/__init__.py b/modoboa/core/tests/stupid_extension_2/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/modoboa/core/tests/stupid_extension_2/modo_extension.py b/modoboa/core/tests/stupid_extension_2/modo_extension.py new file mode 100644 index 000000000..e9485c922 --- /dev/null +++ b/modoboa/core/tests/stupid_extension_2/modo_extension.py @@ -0,0 +1,20 @@ +"""A stupid extension used for tests.""" + +from modoboa.core import extensions + + +class StupidExtension2(extensions.ModoExtension): + """Stupid extension to use with tests.""" + + name = "stupid_extension_2" + label = "Stupid extension" + version = "1.0.0" + description = "A stupid extension" + + def load(self): + pass + + def load_initial_data(self): + pass + +extensions.exts_pool.register_extension(StupidExtension2, show=False) diff --git a/modoboa/core/tests/stupid_extension_2/urls.py b/modoboa/core/tests/stupid_extension_2/urls.py new file mode 100644 index 000000000..552d09822 --- /dev/null +++ b/modoboa/core/tests/stupid_extension_2/urls.py @@ -0,0 +1,3 @@ +"""Custom urls.""" + +urlpatterns = [] diff --git a/modoboa/core/tests.py b/modoboa/core/tests/test_core.py similarity index 99% rename from modoboa/core/tests.py rename to modoboa/core/tests/test_core.py index de7774d91..598124fd9 100644 --- a/modoboa/core/tests.py +++ b/modoboa/core/tests/test_core.py @@ -13,9 +13,9 @@ from modoboa.lib import parameters from modoboa.lib.tests import ModoTestCase from modoboa.lib.tests import NO_LDAP -from . import factories -from . import mocks -from . import models +from .. import factories +from .. import mocks +from .. import models class AuthenticationTestCase(ModoTestCase): diff --git a/modoboa/core/tests/test_extensions.py b/modoboa/core/tests/test_extensions.py new file mode 100644 index 000000000..b48889215 --- /dev/null +++ b/modoboa/core/tests/test_extensions.py @@ -0,0 +1,63 @@ +"""Extensions management related test cases.""" + +import os +import sys + +from django.test import TestCase, override_settings + +from .. import extensions + +CUSTOM_APPS = ( + "modoboa", + "modoboa.core", + "modoboa.lib", + "modoboa.admin", + "modoboa.limits", + "modoboa.relaydomains", + "stupid_extension_1", + "stupid_extension_2", +) + +sys.path.append(os.path.dirname(__file__)) + + +class StupidExtension2(extensions.ModoExtension): + """Stupid extension to use with tests.""" + + name = "stupid_extension_2" + label = "Stupid extension" + version = "1.0.0" + description = "A stupid extension" + + def load(self): + pass + + def load_initial_data(self): + pass + + +@override_settings(MODOBOA_APPS=CUSTOM_APPS) +class ExtensionTestCase(TestCase): + """Extensions related tests.""" + + def setUp(self): + """Initiate test context.""" + self.pool = extensions.exts_pool + self.pool.load_all() + + def test_register(self): + """Test if registering works.""" + self.assertIn("stupid_extension_1", self.pool.extensions) + + def test_get_extension(self): + """Check getter method.""" + self.assertIsNone(self.pool.get_extension("toto")) + instance = self.pool.get_extension("stupid_extension_1") + self.assertEqual(instance.__class__.__name__, "StupidExtension1") + + def test_list_all(self): + """Check list_all method.""" + result = self.pool.list_all() + self.assertEqual(len(result), 1) + ext = result[0] + self.assertEqual(ext["id"], "stupid_extension_1")