Add unit tests to cover the extension engine.

This commit is contained in:
Antoine Nguyen
2016-10-23 13:56:11 +02:00
parent a7870fafc8
commit 669bf6c76e
9 changed files with 117 additions and 14 deletions
+8 -11
View File
@@ -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
View File
@@ -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)
@@ -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)
@@ -0,0 +1,3 @@
"""Custom urls."""
urlpatterns = []
@@ -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):
+63
View File
@@ -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")