Increase coverage.

see #860
This commit is contained in:
Antoine Nguyen
2016-04-14 15:28:43 +02:00
parent 3d15249a92
commit 2e0de26e69
5 changed files with 26 additions and 22 deletions
+1 -1
View File
@@ -9,7 +9,7 @@ DEFAULT_LIMITS = collections.OrderedDict((
("domains", {
"content_type": "admin.domain", "label": _("Domains"),
"help": _("Maximum number of domains this user can create"),
"required_role": "Reselles"}),
"required_role": "Resellers"}),
("domain_aliases", {
"content_type": "admin.domainalias", "label": _("Domain aliases"),
"help": _("Maximum number of domain aliases this user can create"),
+5 -14
View File
@@ -35,29 +35,22 @@ class ResourcePoolForm(forms.Form):
if hasattr(self, "account"):
self.load_from_user(self.account)
def check_limit_value(self, lname):
fieldname = "{}_limit".format(lname)
if self.cleaned_data[fieldname] < -1:
raise forms.ValidationError(_("Invalid limit"))
return self.cleaned_data[fieldname]
def clean(self):
"""Ensure limit values are correct."""
cleaned_data = super(ResourcePoolForm, self).clean()
if self.errors:
return cleaned_data
for lname in self.fields.keys():
if lname not in self._errors and cleaned_data[lname] < -1:
if cleaned_data[lname] < -1:
self.add_error(lname, _("Invalid limit"))
return cleaned_data
def load_from_user(self, user):
"""Load limit values from given user."""
for fieldname in self.fields.keys():
lname = fieldname.replace("_limit", "")
self.fields[fieldname].initial = (
user.objectlimit_set.get(name=lname).max_value)
# The following lines will become useless in a near
# future.
if self.fields[fieldname].initial == -2:
self.fields[fieldname].initial = parameters.get_admin(
"DEFLT_{}_LIMIT".format(lname.upper()))
def allocate_from_user(self, limit, user):
"""Allocate resource using an existing user.
@@ -68,8 +61,6 @@ class ResourcePoolForm(forms.Form):
pool.
"""
ol = user.objectlimit_set.get(name=limit.name)
if ol.max_value == -2:
raise BadLimitValue(_("Your resources are not initialized yet"))
fieldname = "{}_limit".format(limit.name)
newvalue = self.cleaned_data[fieldname]
if newvalue == -1 and ol.max_value != -1:
+12 -1
View File
@@ -4,12 +4,15 @@
from django.conf import settings
from django.db import models
from django.utils.encoding import python_2_unicode_compatible
from django.utils.translation import ugettext as _
from modoboa.core import models as core_models
from . import utils
@python_2_unicode_compatible
class ObjectLimit(models.Model):
"""Per-user limits on object creation."""
@@ -49,7 +52,7 @@ class ObjectLimit(models.Model):
if self.max_value < 0:
return -1
if self.max_value == 0:
return 0
return 100
return int(float(self.current_value) / self.max_value * 100)
@property
@@ -60,3 +63,11 @@ class ObjectLimit(models.Model):
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 == -2:
return _("undefined")
if self.max_value == -1:
return _("unlimited")
return "{}%".format(self.usage)
+8
View File
@@ -188,6 +188,9 @@ class ResellerTestCase(ResourceTestCase):
self.client.login(username='reseller', password='toto')
def test_domains_limit(self):
response = self.client.get(reverse("admin:domain_list"))
self.assertContains(response, "Domains (0%)")
self.assertContains(response, "Domain aliases (0%)")
self._create_domain('domain1.tld')
self._check_limit('domains', 1, 2)
self._create_domain('domain2.tld')
@@ -216,6 +219,11 @@ class ResellerTestCase(ResourceTestCase):
self._check_limit('domain_aliases', 1, 2)
def test_domain_admins_limit(self):
response = self.client.get(reverse("admin:identity_list"))
self.assertContains(response, "Domain admins (0%)")
self.assertContains(response, "Mailboxes (0%)")
self.assertContains(response, "Mailbox aliases (0%)")
self._create_domain('domain.tld')
self._create_account('admin1@domain.tld', role='DomainAdmins')
self._check_limit('domain_admins', 1, 2)
-6
View File
@@ -1,6 +0,0 @@
from django.conf.urls import patterns
urlpatterns = patterns(
'modoboa.limits.views',
)