diff --git a/.travis.yml b/.travis.yml index df07ef804..2aba856e1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,6 +7,7 @@ services: mysql install: - python setup.py -q install + - pip install -q pexpect before_script: - mysql -e 'create database modoboa_test;' diff --git a/modoboa/core/commands/templates/settings.py.tpl b/modoboa/core/commands/templates/settings.py.tpl index f86ad1e39..710c6c96a 100644 --- a/modoboa/core/commands/templates/settings.py.tpl +++ b/modoboa/core/commands/templates/settings.py.tpl @@ -155,6 +155,7 @@ MODOBOA_APPS = ( # Modoboa extensions here. 'modoboa.extensions.admin', 'modoboa.extensions.limits', + 'modoboa.extensions.postfix_relay_domains', 'modoboa.extensions.postfix_autoreply', 'modoboa.extensions.webmail', 'modoboa.extensions.stats', diff --git a/modoboa/core/views/admin.py b/modoboa/core/views/admin.py index 071e1091a..26f97e0a9 100644 --- a/modoboa/core/views/admin.py +++ b/modoboa/core/views/admin.py @@ -78,7 +78,7 @@ def saveextensions(request): for k in request.POST.keys(): if k.startswith("select_"): parts = k.split("_", 1) - dbext = Extension.objects.get(name=parts[1]) + dbext = Extension.objects.get(name=parts[1]) if not dbext in actived_exts: dbext.on() else: diff --git a/modoboa/extensions/limits/models.py b/modoboa/extensions/limits/models.py index c249aa27b..21f4e7b32 100644 --- a/modoboa/extensions/limits/models.py +++ b/modoboa/extensions/limits/models.py @@ -10,7 +10,7 @@ from modoboa.lib import events class LimitTemplates(Singleton): def __init__(self): - self.templates = [ + self.__templates = [ ("domain_admins_limit", ugettext_lazy("Domain admins"), ugettext_lazy("Maximum number of domain administrators this user can create"), 'Resellers'), @@ -25,7 +25,10 @@ class LimitTemplates(Singleton): ("mailbox_aliases_limit", ugettext_lazy("Mailbox aliases"), ugettext_lazy("Maximum number of mailbox aliases this user can create")) ] - self.templates += events.raiseQueryEvent('GetExtraLimitTemplates') + + @property + def templates(self): + return self.__templates + events.raiseQueryEvent('GetExtraLimitTemplates') class LimitsPool(models.Model): diff --git a/modoboa/extensions/limits/tests.py b/modoboa/extensions/limits/tests.py index ccef3e3b6..cf529f8ae 100644 --- a/modoboa/extensions/limits/tests.py +++ b/modoboa/extensions/limits/tests.py @@ -12,10 +12,10 @@ from modoboa.extensions.limits.models import LimitTemplates class PermissionsTestCase(ExtTestCase): fixtures = ["initial_users.json"] - names = ["limits"] def setUp(self): super(PermissionsTestCase, self).setUp() + self.activate_extensions('limits') populate_database() def test_domainadmin_deletes_reseller(self): @@ -41,7 +41,6 @@ class PermissionsTestCase(ExtTestCase): class ResourceTestCase(ExtTestCase): fixtures = ["initial_users.json"] - names = ["limits"] def setUp(self): """Custom setUp method. @@ -49,10 +48,8 @@ class ResourceTestCase(ExtTestCase): The 'limits' is manually loaded to ensure extra parameters provided by 'postfix_relay_domains' are properly received. """ - from modoboa.core.extensions import exts_pool - super(ResourceTestCase, self).setUp() - exts_pool.get_extension('limits').load() + self.activate_extensions('limits') for tpl in LimitTemplates().templates: parameters.save_admin('DEFLT_%s' % tpl[0].upper(), 2, app='limits') populate_database() diff --git a/modoboa/extensions/postfix_relay_domains/tests.py b/modoboa/extensions/postfix_relay_domains/tests.py index 1361a757a..9598f5a1f 100644 --- a/modoboa/extensions/postfix_relay_domains/tests.py +++ b/modoboa/extensions/postfix_relay_domains/tests.py @@ -1,5 +1,6 @@ from django.core.urlresolvers import reverse from modoboa.core.factories import UserFactory +from modoboa.lib import parameters from modoboa.lib.tests import ExtTestCase from modoboa.extensions.admin import factories from modoboa.extensions.limits.tests import ResourceTestCase @@ -40,13 +41,18 @@ class Operations(object): values, status ) + def _check_limit(self, name, curvalue, maxvalue): + l = self.user.limitspool.get_limit('%s_limit' % name) + self.assertEqual(l.curvalue, curvalue) + self.assertEqual(l.maxvalue, maxvalue) + class RelayDomainsTestCase(ExtTestCase, Operations): fixtures = ['initial_users.json'] - names = ['postfix_relay_domains'] def setUp(self): super(RelayDomainsTestCase, self).setUp() + self.activate_extensions('postfix_relay_domains') factories.populate_database() self.rdom = RelayDomainFactory(name='relaydomain.tld') RelayDomainAliasFactory(name='relaydomainalias.tld', target=self.rdom) @@ -156,12 +162,17 @@ class RelayDomainsTestCase(ExtTestCase, Operations): RelayDomain.objects.get(name='relaydomainalias.tld') -class LimitsTestCase(ResourceTestCase, Operations): - names = ['limits', 'postfix_relay_domains'] +class LimitsTestCase(ExtTestCase, Operations): + fixtures = ['initial_users.json'] def setUp(self): super(LimitsTestCase, self).setUp() - self.user = UserFactory( + from modoboa.extensions.limits.models import LimitTemplates + + self.activate_extensions('limits', 'postfix_relay_domains') + for tpl in LimitTemplates().templates: + parameters.save_admin('DEFLT_%s' % tpl[0].upper(), 2, app='limits') + self.user = UserFactory.create( username='reseller', groups=('Resellers',) ) self.clt.logout() diff --git a/modoboa/lib/tests.py b/modoboa/lib/tests.py index 3ad5f2007..50fef9bc0 100644 --- a/modoboa/lib/tests.py +++ b/modoboa/lib/tests.py @@ -27,15 +27,20 @@ class ModoTestCase(TestCase): class ExtTestCase(ModoTestCase): - names = [] def setUp(self, *args, **kwargs): super(ExtTestCase, self).setUp(*args, **kwargs) self.clt.get(reverse("modoboa.core.views.admin.viewextensions")) - self.clt.post( + + def activate_extensions(self, *names): + from modoboa.core.extensions import exts_pool + + self.ajax_post( reverse("modoboa.core.views.admin.saveextensions"), - dict(("select_%s" % name, "1") for name in self.names) + dict(("select_%s" % name, "1") for name in names) ) + for name in names: + exts_pool.get_extension(name).load() class TestParams(parameters.AdminParametersForm):