We now use factory-boy to generate test fixtures.

This commit is contained in:
Antoine Nguyen
2013-09-22 10:05:40 +02:00
parent 1a76cf9749
commit bf6051bc31
4 changed files with 130 additions and 27 deletions
+48
View File
@@ -0,0 +1,48 @@
import factory
from django.contrib.auth.models import Group
from . import models
class GroupFactory(factory.DjangoModelFactory):
FACTORY_FOR = Group
name = 'DefaultGroup'
class MailboxFactory(factory.DjangoModelFactory):
FACTORY_FOR = models.Mailbox
quota = 0
use_domain_quota = True
class UserFactory(factory.DjangoModelFactory):
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))
class DomainFactory(factory.DjangoModelFactory):
FACTORY_FOR = models.Domain
quota = 10
enabled = True
+71 -22
View File
@@ -19,10 +19,15 @@ from models import *
from modoboa.admin.lib import *
from modoboa.lib import parameters
from modoboa.lib.tests import ModoTestCase
from . import factories
class DomainTestCase(ModoTestCase):
fixtures = ["initial_users.json", "test_content.json"]
fixtures = ["initial_users.json"]
def setUp(self):
super(DomainTestCase, self).setUp()
self.dom = factories.DomainFactory(name='test.com')
def test_create(self):
"""Test the creation of a domain
@@ -78,7 +83,10 @@ class DomainTestCase(ModoTestCase):
values = {
"name": "pouet.com", "quota": 100, "enabled": True
}
self.check_ajax_post(reverse("modoboa.admin.views.editdomain", args=[1]), values)
self.check_ajax_post(
reverse("modoboa.admin.views.editdomain", args=[self.dom.id]),
values
)
dom = Domain.objects.get(name="pouet.com")
self.assertEqual(dom.name, "pouet.com")
self.assertTrue(dom.enabled)
@@ -86,13 +94,17 @@ class DomainTestCase(ModoTestCase):
def test_delete(self):
"""Test the removal of a domain
"""
self.check_ajax_get(reverse("modoboa.admin.views.deldomain", args=[1]), {})
self.check_ajax_get(reverse("modoboa.admin.views.deldomain", args=[self.dom.id]), {})
with self.assertRaises(Domain.DoesNotExist):
Domain.objects.get(pk=1)
class DomainAliasTestCase(ModoTestCase):
fixtures = ["initial_users.json", "test_content.json"]
fixtures = ['initial_users.json']
def setUp(self):
super(DomainAliasTestCase, self).setUp()
self.dom = factories.DomainFactory(name='test.com')
def test_model(self):
dom = Domain.objects.get(name="test.com")
@@ -111,16 +123,23 @@ class DomainAliasTestCase(ModoTestCase):
dom = Domain.objects.get(name="test.com")
values = dict(name=dom.name, quota=dom.quota, enabled=dom.enabled,
aliases="domalias.net", aliases_1="domalias.com")
self.check_ajax_post(reverse("modoboa.admin.views.editdomain", args=[1]), values)
self.check_ajax_post(reverse("modoboa.admin.views.editdomain", args=[dom.id]), values)
self.assertEqual(dom.domainalias_set.count(), 2)
del values["aliases_1"]
self.check_ajax_post(reverse("modoboa.admin.views.editdomain", args=[1]), values)
self.check_ajax_post(reverse("modoboa.admin.views.editdomain", args=[dom.id]), values)
self.assertEqual(dom.domainalias_set.count(), 1)
class AccountTestCase(ModoTestCase):
fixtures = ["initial_users.json", "test_content.json",]
fixtures = ["initial_users.json"]
def setUp(self):
super(AccountTestCase, self).setUp()
self.dom = factories.DomainFactory(name="test.com")
self.account = factories.UserFactory(
username="user@test.com", groups=('SimpleUsers',), mailbox__domain=self.dom
)
def test_crud(self):
values = dict(username="tester@test.com", first_name="Tester", last_name="Toto",
@@ -132,14 +151,14 @@ class AccountTestCase(ModoTestCase):
account = User.objects.get(username="tester@test.com")
mb = account.mailbox_set.all()[0]
self.assertEqual(mb.full_address, "tester@test.com")
self.assertEqual(mb.quota, 100)
self.assertEqual(mb.quota, 10)
self.assertEqual(mb.enabled, True)
self.assertEqual(mb.quota_value.username, "tester@test.com")
self.assertEqual(account.username, mb.full_address)
self.assertTrue(account.check_password("toto"))
self.assertEqual(account.first_name, "Tester")
self.assertEqual(account.last_name, "Toto")
self.assertEqual(mb.domain.mailbox_count, 4)
self.assertEqual(mb.domain.mailbox_count, 2)
values["username"] = "pouet@test.com"
self.check_ajax_post(reverse("modoboa.admin.views.editaccount", args=[account.id]), values)
@@ -173,7 +192,17 @@ class AccountTestCase(ModoTestCase):
class AliasTestCase(ModoTestCase):
fixtures = ["initial_users.json", "test_content.json"]
fixtures = ["initial_users.json"]
def setUp(self):
super(AliasTestCase, self).setUp()
dom = factories.DomainFactory(name="test.com")
factories.UserFactory.create(
username="admin@test.com", groups=('DomainAdmins',), mailbox__domain=dom
)
factories.UserFactory.create(
username="user@test.com", groups=('SimpleUsers',), mailbox__domain=dom
)
def test_alias(self):
user = User.objects.get(username="user@test.com")
@@ -245,24 +274,28 @@ class AliasTestCase(ModoTestCase):
class PermissionsTestCase(ModoTestCase):
fixtures = ["initial_users.json", "test_content.json"]
fixtures = ["initial_users.json"]
def setUp(self):
"""
FIXME: je n'arrive pas à générer des données de test incluant
déjà les permissions (cf. table ObjectAccess). C'est pour
cette raison que j'assigne le domaine test.com ici...
"""
super(PermissionsTestCase, self).setUp()
self.user = User.objects.get(username="user@test.com")
dom = factories.DomainFactory(name='test.com')
self.user = factories.UserFactory(
username="user@test.com", groups=('SimpleUsers',), mailbox__domain=dom
)
self.values = dict(
username=self.user.username, role="DomainAdmins",
is_active=self.user.is_active, email="user@test.com"
)
self.admin = User.objects.get(username="admin@test.com")
dom = Domain.objects.get(name="test.com")
self.admin = factories.UserFactory(
username="admin@test.com", groups=('DomainAdmins',), mailbox__domain=dom
)
dom.add_admin(self.admin)
dom = factories.DomainFactory(name='test2.com')
factories.UserFactory(
username='user@test2.com', groups=('SimpleUsers',), mailbox__domain=dom
)
def tearDown(self):
self.clt.logout()
@@ -336,15 +369,31 @@ class PermissionsTestCase(ModoTestCase):
self.check_ajax_get(reverse("modoboa.admin.views.delaccount", args=[account.id]), {},
status="ko", respmsg="Permission denied")
def test_domainadmin_dlist_local_domain_not_owned(self):
"""Check if a domain admin can use a local mailbox he can't
access as a recipient in a distribution list"""
values = dict(
email="all@test.com",
recipients="user@test.com",
recipients_1="user@test2.com",
enabled=True
)
self.check_ajax_post(reverse("modoboa.admin.views.newdlist"), values)
class ImportTestCase(ModoTestCase):
fixtures = ["initial_users.json", "test_content.json"]
fixtures = ["initial_users.json"]
def setUp(self):
super(ImportTestCase, self).setUp()
self.admin = User.objects.get(username="admin@test.com")
dom = Domain.objects.get(name="test.com")
dom = factories.DomainFactory(name="test.com")
self.admin = factories.UserFactory.create(
username="admin@test.com", groups=('DomainAdmins',), mailbox__domain=dom
)
dom.add_admin(self.admin)
factories.UserFactory.create(
username="user@test.com", groups=('SimpleUsers',), mailbox__domain=dom
)
def test_domains_import(self):
f = ContentFile(b"""domain; domain1.com; 100; True
+10 -5
View File
@@ -1,12 +1,21 @@
from django.core.urlresolvers import reverse
from modoboa.lib.tests import ExtTestCase
from modoboa.admin.models import User
from modoboa.admin import factories
class PermissionsTestCase(ExtTestCase):
fixtures = ["initial_users.json", "test_content.json"]
fixtures = ["initial_users.json"]
name = "limits"
def setUp(self):
super(PermissionsTestCase, self).setUp()
dom = factories.DomainFactory(name='test.com')
self.admin = factories.UserFactory(
username='admin@test.com', groups=('DomainAdmins',), mailbox__domain=dom
)
dom.add_admin(self.admin)
def test_domainadmin_deletes_reseller(self):
"""Check if a domain admin can delete a reseller.
@@ -23,7 +32,3 @@ class PermissionsTestCase(ExtTestCase):
self.clt.login(username="admin@test.com", password="toto")
self.check_ajax_get(reverse("modoboa.admin.views.delaccount", args=[account.id]), {},
status="ko", respmsg="Permission denied")
self.check_ajax_get(reverse("modoboa.admin.views.delaccount", args=[4]), {},
status="ko", respmsg="Permission denied")
+1
View File
@@ -7,3 +7,4 @@ sievelib
chardet
argparse
rfc6266
factory-boy