mirror of
https://github.com/jwinterm/modoboa.git
synced 2026-10-18 05:51:26 +02:00
Fixing unit tests.
This commit is contained in:
+11
-10
@@ -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))
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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"
|
||||
)
|
||||
|
||||
@@ -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"))
|
||||
|
||||
Reference in New Issue
Block a user