mirror of
https://github.com/jwinterm/modoboa.git
synced 2026-10-21 06:18:45 +02:00
219 lines
8.1 KiB
Python
219 lines
8.1 KiB
Python
# coding: utf-8
|
|
|
|
"""Domain related test cases."""
|
|
|
|
import json
|
|
|
|
from django.core.urlresolvers import reverse
|
|
|
|
from modoboa.core.models import User
|
|
from modoboa.lib.tests import ModoTestCase
|
|
|
|
from .. import factories
|
|
from ..models import Domain, Alias
|
|
|
|
|
|
class DomainTestCase(ModoTestCase):
|
|
"""Test case for Domain."""
|
|
|
|
@classmethod
|
|
def setUpTestData(cls):
|
|
"""Create test data."""
|
|
super(DomainTestCase, cls).setUpTestData()
|
|
factories.populate_database()
|
|
|
|
def test_create(self):
|
|
"""Test the creation of a domain."""
|
|
values = {
|
|
"name": "pouet.com", "quota": 100, "create_dom_admin": False,
|
|
"type": "domain", "stepid": "step3"
|
|
}
|
|
self.ajax_post(reverse("admin:domain_add"), values)
|
|
dom = Domain.objects.get(name="pouet.com")
|
|
self.assertEqual(dom.name, "pouet.com")
|
|
self.assertEqual(dom.quota, 100)
|
|
self.assertEqual(dom.enabled, False)
|
|
self.assertFalse(dom.admins)
|
|
|
|
def test_create_utf8(self):
|
|
"""Test the creation of a domain with non-ASCII characters."""
|
|
values = {
|
|
"name": "pouét.com", "quota": 100, "create_dom_admin": False,
|
|
"type": "domain", "stepid": "step3"
|
|
}
|
|
self.ajax_post(reverse("admin:domain_add"), values)
|
|
dom = Domain.objects.get(name=u"pouét.com")
|
|
self.assertEqual(dom.name, u"pouét.com")
|
|
self.assertEqual(dom.quota, 100)
|
|
self.assertEqual(dom.enabled, False)
|
|
self.assertFalse(dom.admins)
|
|
|
|
def test_create_with_template(self):
|
|
"""Test the creation of a domain with a template."""
|
|
values = {
|
|
"name": "pouet.com", "quota": 100, "create_dom_admin": True,
|
|
"dom_admin_username": "toto", "create_aliases": True,
|
|
"type": "domain", "stepid": 'step3'
|
|
}
|
|
self.ajax_post(reverse("admin:domain_add"), values)
|
|
dom = Domain.objects.get(name="pouet.com")
|
|
da = User.objects.get(username="toto@pouet.com")
|
|
self.assertIn(da, dom.admins)
|
|
al = Alias.objects.get(address="postmaster@pouet.com")
|
|
self.assertTrue(
|
|
al.aliasrecipient_set.filter(r_mailbox=da.mailbox)
|
|
.exists()
|
|
)
|
|
self.assertTrue(da.can_access(al))
|
|
|
|
values = {
|
|
"name": "pouet2.com", "quota": 100, "create_dom_admin": True,
|
|
"dom_admin_username": "postmaster", "create_aliases": True,
|
|
"type": "domain", "stepid": "step3"
|
|
}
|
|
self.ajax_post(reverse("admin:domain_add"), values)
|
|
self.assertTrue(
|
|
User.objects.filter(username="postmaster@pouet2.com").exists())
|
|
self.assertFalse(
|
|
Alias.objects.filter(
|
|
address="postmaster@pouet2.com", internal=False).exists())
|
|
|
|
def test_create_with_template_and_empty_quota(self):
|
|
"""Test the creation of a domain with a template and no quota"""
|
|
values = {
|
|
"name": "pouet.com", "quota": 0, "create_dom_admin": True,
|
|
"dom_admin_username": "toto", "create_aliases": True,
|
|
"type": "domain", "stepid": 'step3'
|
|
}
|
|
self.ajax_post(
|
|
reverse("admin:domain_add"),
|
|
values
|
|
)
|
|
dom = Domain.objects.get(name="pouet.com")
|
|
da = User.objects.get(username="toto@pouet.com")
|
|
self.assertIn(da, dom.admins)
|
|
al = Alias.objects.get(address="postmaster@pouet.com")
|
|
self.assertTrue(
|
|
al.aliasrecipient_set.filter(r_mailbox=da.mailbox)
|
|
.exists()
|
|
)
|
|
self.assertTrue(da.can_access(al))
|
|
|
|
def test_create_with_template_and_custom_password(self):
|
|
"""Test creation of a domain with a template and custom password."""
|
|
self.set_global_parameter("default_password", "Toto1234", app="core")
|
|
values = {
|
|
"name": "pouet.com", "quota": 0, "create_dom_admin": True,
|
|
"dom_admin_username": "toto", "create_aliases": True,
|
|
"type": "domain", "stepid": 'step3'
|
|
}
|
|
self.ajax_post(
|
|
reverse("admin:domain_add"),
|
|
values
|
|
)
|
|
dom = Domain.objects.get(name="pouet.com")
|
|
da = User.objects.get(username="toto@pouet.com")
|
|
self.assertIn(da, dom.admins)
|
|
al = Alias.objects.get(address="postmaster@pouet.com")
|
|
self.assertTrue(
|
|
al.aliasrecipient_set.filter(r_mailbox=da.mailbox)
|
|
.exists()
|
|
)
|
|
self.assertTrue(da.can_access(al))
|
|
self.assertTrue(
|
|
self.client.login(username="toto@pouet.com", password="Toto1234"))
|
|
|
|
def test_create_using_default_quota(self):
|
|
self.set_global_parameter("default_domain_quota", 50)
|
|
values = {
|
|
"name": "pouet.com", "create_dom_admin": True,
|
|
"dom_admin_username": "toto", "create_aliases": True,
|
|
"type": "domain", "stepid": 'step3'
|
|
}
|
|
self.ajax_post(
|
|
reverse("admin:domain_add"),
|
|
values
|
|
)
|
|
dom = Domain.objects.get(name="pouet.com")
|
|
self.assertEqual(dom.quota, 50)
|
|
da = User.objects.get(username="toto@pouet.com")
|
|
self.assertEqual(da.mailbox.quota, 50)
|
|
|
|
def test_modify(self):
|
|
"""Test the modification of a domain
|
|
|
|
Rename 'test.com' domain to 'pouet.com'
|
|
"""
|
|
values = {
|
|
"name": "pouet.com", "quota": 100, "type": "domain",
|
|
"enabled": True
|
|
}
|
|
dom = Domain.objects.get(name="test.com")
|
|
self.ajax_post(
|
|
reverse("admin:domain_change", args=[dom.id]),
|
|
values
|
|
)
|
|
dom = Domain.objects.get(name="pouet.com")
|
|
self.assertEqual(dom.name, "pouet.com")
|
|
self.assertTrue(dom.enabled)
|
|
|
|
# Check if aliases were renamed too
|
|
self.assertTrue(
|
|
dom.alias_set.filter(address="postmaster@pouet.com").exists())
|
|
|
|
def test_delete(self):
|
|
"""Test the removal of a domain
|
|
"""
|
|
dom = Domain.objects.get(name="test.com")
|
|
self.ajax_post(
|
|
reverse("admin:domain_delete", args=[dom.id]),
|
|
{}
|
|
)
|
|
with self.assertRaises(Domain.DoesNotExist):
|
|
Domain.objects.get(pk=1)
|
|
|
|
def test_domain_counters(self):
|
|
"""Check counters at domain level."""
|
|
domain = Domain.objects.get(name="test.com")
|
|
self.assertEqual(domain.domainalias_count, 0)
|
|
self.assertEqual(domain.mailbox_count, 2)
|
|
self.assertEqual(domain.mbalias_count, 3)
|
|
self.assertEqual(domain.identities_count, 5)
|
|
|
|
def test_domain_flat_list(self):
|
|
"""Test the 'domain_flat_list' view."""
|
|
response = self.client.get(reverse("admin:domain_flat_list"))
|
|
self.assertEqual(response.status_code, 200)
|
|
content = json.loads(response.content)
|
|
self.assertIn("test.com", content)
|
|
self.assertIn("test2.com", content)
|
|
|
|
def test_domain_detail_view(self):
|
|
"""Test Domain detail view."""
|
|
self.set_global_parameter("enable_domain_limits", False, app="limits")
|
|
domain = Domain.objects.get(name="test.com")
|
|
url = reverse("admin:domain_detail", args=[domain.pk])
|
|
response = self.client.get(url)
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertIn("Summary", response.content)
|
|
self.assertIn("Administrators", response.content)
|
|
self.assertNotIn("Resources usage", response.content)
|
|
self.set_global_parameter("enable_domain_limits", True, app="limits")
|
|
response = self.client.get(url)
|
|
self.assertIn("Resources usage", response.content)
|
|
|
|
def test_domain_statitics_view(self):
|
|
"""Test statistics display."""
|
|
url = reverse("admin:domain_statistics")
|
|
response = self.client.get(url)
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertIn("Global counters", response.content)
|
|
self.assertIn("Per-domain counters", response.content)
|
|
|
|
self.client.force_login(
|
|
User.objects.get(username="admin@test.com"))
|
|
response = self.client.get(url)
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertNotIn("Global counters", response.content)
|
|
self.assertIn("Per-domain counters", response.content)
|