diff --git a/modoboa/extensions/admin/factories.py b/modoboa/extensions/admin/factories.py index b050ff23d..f657e9979 100644 --- a/modoboa/extensions/admin/factories.py +++ b/modoboa/extensions/admin/factories.py @@ -2,6 +2,13 @@ import factory from . import models +class DomainFactory(factory.DjangoModelFactory): + FACTORY_FOR = models.Domain + + quota = 10 + enabled = True + + class MailboxFactory(factory.DjangoModelFactory): FACTORY_FOR = models.Mailbox @@ -9,8 +16,5 @@ class MailboxFactory(factory.DjangoModelFactory): use_domain_quota = True -class DomainFactory(factory.DjangoModelFactory): - FACTORY_FOR = models.Domain - - quota = 10 - enabled = True +class AliasFactory(factory.DjangoModelFactory): + FACTORY_FOR = models.Alias diff --git a/modoboa/extensions/admin/lib.py b/modoboa/extensions/admin/lib.py index a96850d77..66116a036 100644 --- a/modoboa/extensions/admin/lib.py +++ b/modoboa/extensions/admin/lib.py @@ -68,7 +68,7 @@ def get_identities(user, searchquery=None, idtfilter=None, grpfilter=None): from itertools import chain accounts = [] - if idtfilter is None or idtfilter == "account": + if idtfilter is None or not idtfilter or idtfilter == "account": ids = user.objectaccess_set \ .filter(content_type=ContentType.objects.get_for_model(user)) \ .values_list('object_id', flat=True) @@ -76,7 +76,7 @@ def get_identities(user, searchquery=None, idtfilter=None, grpfilter=None): if searchquery is not None: q &= Q(username__icontains=searchquery) \ | Q(email__icontains=searchquery) - if grpfilter is not None: + if grpfilter is not None and grpfilter: if grpfilter == "SuperAdmins": q &= Q(is_superuser=True) else: @@ -84,7 +84,8 @@ def get_identities(user, searchquery=None, idtfilter=None, grpfilter=None): accounts = User.objects.select_related().filter(q) aliases = [] - if idtfilter is None or (idtfilter in ["alias", "forward", "dlist"]): + if idtfilter is None or not idtfilter \ + or (idtfilter in ["alias", "forward", "dlist"]): alct = ContentType.objects.get_for_model(Alias) ids = user.objectaccess_set.filter(content_type=alct) \ .values_list('object_id', flat=True) diff --git a/modoboa/extensions/admin/tests.py b/modoboa/extensions/admin/tests.py index 9d2192189..aab6f8786 100644 --- a/modoboa/extensions/admin/tests.py +++ b/modoboa/extensions/admin/tests.py @@ -474,3 +474,61 @@ account; sa@test.com; toto; Super; Admin; True; SuperAdmins; superadmin@test.com }) with self.assertRaises(User.DoesNotExist): User.objects.get(username="sa@test.com") + + +class ExportTestCase(ModoTestCase): + fixtures = ["initial_users.json"] + + def setUp(self): + super(ExportTestCase, self).setUp() + sa = User.objects.get(pk=1) + dom = factories.DomainFactory(name="test.com") + self.admin = UserFactory.create( + username="admin@test.com", groups=('DomainAdmins',) + ) + self.admin.post_create(sa) + factories.MailboxFactory(address='admin', domain=dom, user=self.admin) + dom.add_admin(self.admin) + u = UserFactory.create( + username="user@test.com", groups=('SimpleUsers',) + ) + u.post_create(sa) + factories.MailboxFactory(address='user', domain=dom, user=u) + # factories.AliasFactory( + # address='forward', domain=dom, extmboxes='user@extdomain.com' + # ) + + def __export_identities(self, idtfilter="", grpfilter=""): + self.clt.get( + reverse("modoboa.extensions.admin.views.identity._identities") \ + + "?grpfilter=%s&idtfilter=%s" % (grpfilter, idtfilter) + ) + return self.clt.post( + reverse("modoboa.extensions.admin.views.export.export_identities"), + {"filename": "test.csv"} + ) + + 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\n") + + def test_export_simpleusers(self): + response = self.__export_identities(grpfilter="SimpleUsers") + self.assertEqual( + response.content.strip(), + "account;user@test.com;{PLAIN}toto;;;True;SimpleUsers;user@test.com" + ) + + def test_export_superadmins(self): + response = self.__export_identities(grpfilter="SuperAdmins") + self.assertEqual( + response.content.strip(), + "account;admin;{CRYPT}dTTsGDkA5ZHKg;;;True;SuperAdmins;" + ) + + def test_export_domainadmins(self): + response = self.__export_identities(grpfilter="DomainAdmins") + self.assertEqual( + response.content.strip(), + "account;admin@test.com;{PLAIN}toto;;;True;DomainAdmins;admin@test.com;test.com" + )