Fixing unit tests.

This commit is contained in:
Antoine Nguyen
2013-10-12 18:14:27 +02:00
parent ffd60eda2d
commit 1db6c6373c
10 changed files with 86 additions and 43 deletions
+11 -10
View File
@@ -3,32 +3,33 @@ from django.contrib.auth.models import Group
from . import models
class PermissionFactory(factory.DjangoModelFactory):
ABSTRACT_FACTORY = True
@factory.post_generation
def set_permission(self, create, extracted, **kwargs):
if not create:
return
self.post_create(models.User.objects.get(pk=1))
class GroupFactory(factory.DjangoModelFactory):
FACTORY_FOR = Group
name = 'DefaultGroup'
class UserFactory(factory.DjangoModelFactory):
class UserFactory(PermissionFactory):
FACTORY_FOR = models.User
email = factory.LazyAttribute(lambda a: a.username)
password = '{PLAIN}toto'
# mailbox = factory.RelatedFactory(
# MailboxFactory, 'user',
# address=factory.LazyAttribute(
# lambda m: m.user.email.replace('@%s' % m.domain.name, '')
# )
# )
@factory.post_generation
def groups(self, create, extracted, **kwargs):
if not create:
# Simple build, do nothing.
return
if extracted:
# A list of groups were passed in, use them
for group in extracted:
self.groups.add(Group.objects.get(name=group))
+19 -13
View File
@@ -1,24 +1,24 @@
import factory
from modoboa.core.models import User
from modoboa.core.factories import UserFactory
from modoboa.core.factories import PermissionFactory, UserFactory
from . import models
class DomainFactory(factory.DjangoModelFactory):
class DomainFactory(PermissionFactory):
FACTORY_FOR = models.Domain
quota = 10
enabled = True
class MailboxFactory(factory.DjangoModelFactory):
class MailboxFactory(PermissionFactory):
FACTORY_FOR = models.Mailbox
quota = 0
use_domain_quota = True
class AliasFactory(factory.DjangoModelFactory):
class AliasFactory(PermissionFactory):
FACTORY_FOR = models.Alias
@@ -27,24 +27,30 @@ def populate_database():
2 domains, 1 domain admin, 2 users
"""
sa = User.objects.get(pk=1)
dom = DomainFactory.create(name="test.com")
admin = UserFactory(
username="admin@test.com", groups=('DomainAdmins',)
)
admin.post_create(sa)
MailboxFactory(address='admin', domain=dom, user=admin)
account = UserFactory.create(
username="user@test.com", groups=('SimpleUsers',)
)
account.post_create(sa)
MailboxFactory.create(address='user', domain=dom, user=account)
dom2 = DomainFactory(name='test2.com')
u = UserFactory(
fwd = AliasFactory.create(
address='forward', domain=dom, extmboxes='user@external.com'
)
al = AliasFactory.create(
address='alias', domain=dom
)
al.mboxes.add(account.mailbox_set.all()[0])
AliasFactory.create(
address='postmaster', domain=dom, extmboxes='toto@titi.com,test@truc.fr'
)
dom.add_admin(admin)
dom2 = DomainFactory.create(name='test2.com')
u = UserFactory.create(
username='user@test2.com', groups=('SimpleUsers',)
)
u.post_create(sa)
MailboxFactory(address='user', domain=dom2, user=u)
dom.add_admin(admin)
MailboxFactory.create(address='user', domain=dom2, user=u)
+1 -1
View File
@@ -209,7 +209,7 @@ class AccountFormMail(forms.Form, DynamicForm):
events.raiseEvent("CanCreate", user, "mailbox_aliases")
al = Alias(address=local_part, enabled=account.is_active)
al.domain = Domain.objects.get(name=domname)
al.save([self.mb], [], creator=user)
al.save(int_rcpts=[self.mb], creator=user)
for alias in self.mb.alias_set.all():
if len(alias.get_recipients()) >= 2:
+1 -1
View File
@@ -115,6 +115,6 @@ class AliasForm(forms.ModelForm, DynamicForm):
alias.address = localpart
alias.domain = Domain.objects.get(name=domname)
if commit:
alias.save(self.int_rcpts, self.ext_rcpts)
alias.save(int_rcpts=self.int_rcpts, ext_rcpts=self.ext_rcpts)
self.save_m2m()
return alias
+1 -1
View File
@@ -194,7 +194,7 @@ class DomainFormOptions(forms.Form):
if self.cleaned_data["create_aliases"] == "yes":
al = Alias(address="postmaster", domain=domain, enabled=True)
al.save([mb], [], creator=user)
al.save(int_rcpts=[mb], creator=user)
domain.add_admin(da)
+2 -2
View File
@@ -57,7 +57,7 @@ def get_listing_page(objects, pagenum):
def get_identities(user, searchquery=None, idtfilter=None, grpfilter=None):
"""Return all the identities owned by a user
"""Return all the identities owned by a user.
:param user: the desired user
:param str searchquery: search pattern
@@ -101,6 +101,6 @@ def get_identities(user, searchquery=None, idtfilter=None, grpfilter=None):
q &= Q(address__icontains=searchquery) | \
Q(domain__name__icontains=searchquery)
aliases = Alias.objects.select_related().filter(q)
if idtfilter is not None:
if idtfilter is not None and idtfilter:
aliases = [al for al in aliases if al.type == idtfilter]
return chain(accounts, aliases)
+14 -5
View File
@@ -86,11 +86,16 @@ class Alias(DatesAware):
for admin in self.domain.admins:
grant_access_to_object(admin, self)
def save(self, int_rcpts, ext_rcpts, *args, **kwargs):
if len(ext_rcpts):
self.extmboxes = ",".join(ext_rcpts)
def save(self, *args, **kwargs):
if 'ext_rcpts' in kwargs:
self.extmboxes = ",".join(kwargs['ext_rcpts']) \
if kwargs['ext_rcpts'] else ""
del kwargs['ext_rcpts']
if 'int_rcpts' in kwargs:
int_rcpts = kwargs['int_rcpts']
del kwargs['int_rcpts']
else:
self.extmboxes = ""
int_rcpts = []
if "creator" in kwargs:
creator = kwargs["creator"]
del kwargs["creator"]
@@ -134,6 +139,10 @@ class Alias(DatesAware):
return result
def get_recipients_count(self):
"""Return the number of recipients of this alias.
:rtype: int
"""
total = 0
if self.extmboxes != "":
total += len(self.extmboxes.split(','))
@@ -178,7 +187,7 @@ class Alias(DatesAware):
except Mailbox.DoesNotExist:
raise AdminError(_("Local recipient %s not found" % rcpt))
int_rcpts += [target]
self.save(int_rcpts, ext_rcpts, creator=user)
self.save(int_rcpts=int_rcpts, ext_rcpts=ext_rcpts, creator=user)
def to_csv(self, csvwriter):
row = [self.type, self.full_address.encode("utf-8"), self.enabled]
+5 -5
View File
@@ -46,9 +46,9 @@ class AliasTestCase(ModoTestCase):
reverse("modoboa.extensions.admin.views.alias.newdlist"), values
)
user = User.objects.get(username="user@test.com")
self.assertEqual(len(user.mailbox_set.all()[0].alias_set.all()), 1)
self.assertEqual(user.mailbox_set.all()[0].alias_set.count(), 2)
admin = User.objects.get(username="admin@test.com")
self.assertEqual(len(admin.mailbox_set.all()[0].alias_set.all()), 1)
self.assertEqual(admin.mailbox_set.all()[0].alias_set.count(), 1)
dlist = Alias.objects.get(address="all", domain__name="test.com")
self.assertEqual(len(dlist.get_recipients()), 3)
@@ -68,11 +68,11 @@ class AliasTestCase(ModoTestCase):
address="all", domain__name="test.com")
def test_forward(self):
values = dict(email="forward@test.com", recipients="rcpt@dest.com")
values = dict(email="forward2@test.com", recipients="rcpt@dest.com")
self.check_ajax_post(
reverse("modoboa.extensions.admin.views.alias.newforward"), values
)
fwd = Alias.objects.get(address="forward", domain__name="test.com")
fwd = Alias.objects.get(address="forward2", domain__name="test.com")
self.assertEqual(fwd.get_recipients_count(), 1)
values["recipients"] = "rcpt2@dest.com"
@@ -88,7 +88,7 @@ class AliasTestCase(ModoTestCase):
% fwd.id, {}
)
self.assertRaises(Alias.DoesNotExist, Alias.objects.get,
address="forward", domain__name="test.com")
address="forward2", domain__name="test.com")
def test_forward_and_local_copies(self):
values = dict(email="user@test.com", recipients="rcpt@dest.com")
+31 -4
View File
@@ -22,25 +22,52 @@ class ExportTestCase(ModoTestCase):
def test_export_identities(self):
response = self.__export_identities()
self.assertEqual(response.content, "account;admin;{CRYPT}dTTsGDkA5ZHKg;;;True;SuperAdmins;\r\naccount;admin@test.com;{PLAIN}toto;;;True;DomainAdmins;admin@test.com;test.com\r\naccount;user@test.com;{PLAIN}toto;;;True;SimpleUsers;user@test.com\r\naccount;user@test2.com;{PLAIN}toto;;;True;SimpleUsers;user@test2.com\r\n")
self.assertEqual(response.content, "account;admin;{CRYPT}dTTsGDkA5ZHKg;;;True;SuperAdmins;\r\naccount;admin@test.com;{PLAIN}toto;;;True;DomainAdmins;admin@test.com;test.com\r\naccount;user@test.com;{PLAIN}toto;;;True;SimpleUsers;user@test.com\r\naccount;user@test2.com;{PLAIN}toto;;;True;SimpleUsers;user@test2.com\r\nalias;alias@test.com;False;user@test.com\r\nforward;forward@test.com;False;user@external.com\r\ndlist;postmaster@test.com;False;toto@titi.com;test@truc.fr\r\n")
def test_export_simpleusers(self):
response = self.__export_identities(grpfilter="SimpleUsers")
response = self.__export_identities(
idtfilter="account", grpfilter="SimpleUsers"
)
self.assertEqual(
response.content.strip(),
"account;user@test.com;{PLAIN}toto;;;True;SimpleUsers;user@test.com\r\naccount;user@test2.com;{PLAIN}toto;;;True;SimpleUsers;user@test2.com"
)
def test_export_superadmins(self):
response = self.__export_identities(grpfilter="SuperAdmins")
response = self.__export_identities(
idtfilter="account", grpfilter="SuperAdmins"
)
self.assertEqual(
response.content.strip(),
"account;admin;{CRYPT}dTTsGDkA5ZHKg;;;True;SuperAdmins;"
)
def test_export_domainadmins(self):
response = self.__export_identities(grpfilter="DomainAdmins")
response = self.__export_identities(
idtfilter="account", grpfilter="DomainAdmins"
)
self.assertEqual(
response.content.strip(),
"account;admin@test.com;{PLAIN}toto;;;True;DomainAdmins;admin@test.com;test.com"
)
def test_export_aliases(self):
response = self.__export_identities(idtfilter="alias")
self.assertEqual(
response.content.strip(),
"alias;alias@test.com;False;user@test.com"
)
def test_export_forwards(self):
response = self.__export_identities(idtfilter="forward")
self.assertEqual(
response.content.strip(),
"forward;forward@test.com;False;user@external.com"
)
def test_export_dlists(self):
response = self.__export_identities(idtfilter="dlist")
self.assertEqual(
response.content.strip(),
"dlist;postmaster@test.com;False;toto@titi.com;test@truc.fr"
)
+1 -1
View File
@@ -38,7 +38,7 @@ def forward(request, tplname='admin/forward.html'):
if form.cleaned_data["keepcopies"]:
intdests += [mb]
form.parse_dest()
al.save(intdests, form.dests)
al.save(int_rcpts=intdests, ext_rcpts=form.dests)
if request.user.group != "SimpleUsers":
al.post_create(request.user)
return ajax_response(request, respmsg=_("Forward updated"))