From 418110095c82d31277d18dfe4d728778b1104d46 Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Tue, 17 Jan 2017 09:20:30 +0100 Subject: [PATCH] Handle unlimited limits. fix #1004 --- modoboa/limits/models.py | 9 ++++----- modoboa/limits/tests/test_domain_limits.py | 11 +++++++++-- modoboa/limits/tests/test_user_limits.py | 7 ++++++- 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/modoboa/limits/models.py b/modoboa/limits/models.py index 9808552ca..2d4bb8b8b 100644 --- a/modoboa/limits/models.py +++ b/modoboa/limits/models.py @@ -32,7 +32,10 @@ class ObjectLimitMixin(object): def is_exceeded(self, count=1): """Check if limit will be reached if we add count object(s).""" - return self.current_value + 1 > self.max_value + return ( + self.max_value != -1 and + self.current_value + 1 > self.max_value + ) def __str__(self): """Display current usage.""" @@ -89,10 +92,6 @@ class UserObjectLimit(ObjectLimitMixin, models.Model): return 100 return int(float(self.current_value) / self.max_value * 100) - def is_exceeded(self, count=1): - """Check if limit will be reached if we add count object(s).""" - return self.current_value + 1 > self.max_value - def __str__(self): """Display current usage.""" if self.max_value == -1: diff --git a/modoboa/limits/tests/test_domain_limits.py b/modoboa/limits/tests/test_domain_limits.py index 214145c63..bf70ac4c9 100644 --- a/modoboa/limits/tests/test_domain_limits.py +++ b/modoboa/limits/tests/test_domain_limits.py @@ -111,7 +111,7 @@ class DomainLimitsTestCase(lib_tests.ModoTestCase): self.assertFalse(limit.is_exceeded()) username = "toto@test.com" values = { - "username": username, + "username": "toto@test.com", "first_name": "Tester", "last_name": "Toto", "password1": "Toto1234", "password2": "Toto1234", "role": "SimpleUsers", "quota_act": True, @@ -120,9 +120,16 @@ class DomainLimitsTestCase(lib_tests.ModoTestCase): self.ajax_post(reverse("admin:account_add"), values, 200) self.assertTrue(limit.is_exceeded()) - username = "titi@test.com" + values["username"] = "titi@test.com" + values["email"] = "titi@test.com" self.ajax_post(reverse("admin:account_add"), values, 400) + # Set unlimited value + limit.max_value = -1 + limit.save(update_fields=["max_value"]) + self.ajax_post(reverse("admin:account_add"), values) + self.assertFalse(limit.is_exceeded()) + def test_mailbox_aliases_limit(self): """Try to exceed defined limits.""" domain = Domain.objects.get(name="test.com") diff --git a/modoboa/limits/tests/test_user_limits.py b/modoboa/limits/tests/test_user_limits.py index 494482abf..78c2b109b 100644 --- a/modoboa/limits/tests/test_user_limits.py +++ b/modoboa/limits/tests/test_user_limits.py @@ -154,12 +154,17 @@ class DomainAdminTestCase(ResourceTestCase): self._check_limit('mailbox_aliases', 2, 2) self._create_alias('alias3@test.com', status=403) self._check_limit('mailbox_aliases', 2, 2) + # Set unlimited value + self.user.userobjectlimit_set.filter(name="mailbox_aliases").update( + max_value=-1) + self._create_alias('alias3@test.com') + self._check_limit('mailbox_aliases', 3, -1) self.ajax_post( reverse('admin:alias_delete') + '?selection=%d' % Alias.objects.get(address='alias2@test.com').id, {} ) - self._check_limit('mailbox_aliases', 1, 2) + self._check_limit('mailbox_aliases', 2, -1) def test_aliases_limit_through_account_form(self): user = User.objects.get(username='user@test.com')