Database cleanup.

fix #792
This commit is contained in:
Antoine Nguyen
2015-11-27 18:59:59 +01:00
parent 8704ea2f43
commit 108f950030
2 changed files with 46 additions and 0 deletions
+16
View File
@@ -1,5 +1,6 @@
"""Django signal handlers for relaydomains."""
from django.db.models import signals
from django.dispatch import receiver
from modoboa.admin import models as admin_models
@@ -23,3 +24,18 @@ def check_relaydomain_alias(sender, **kwargs):
domain__name=domain, address=localpart).exists()):
return False
return True
@receiver(signals.post_save, sender=admin_models.Domain)
def clean_domain(sender, instance, **kwargs):
"""Remove or create RelayDomain record if needed."""
if kwargs.get("created"):
return
has_relaydom = hasattr(instance, "relaydomain")
if instance.type == "domain" and has_relaydom:
models.RelayDomain.objects.filter(domain=instance).delete()
elif instance.type == "relaydomain" and not has_relaydom:
# Make sure to create a RelayDomain instance since we can't do it
# at form level...
models.RelayDomain.objects.create(
domain=instance, service=models.Service.objects.first())
+30
View File
@@ -138,6 +138,36 @@ class RelayDomainsTestCase(ModoTestCase, Operations):
)
RelayDomain.objects.get(domain__name='relaydomain.org')
def test_relaydomain_domain_switch(self):
"""Check domain <-> relaydomain transitions."""
domain = self.rdom.domain
values = {
"name": "relaydomain.tld",
"type": "domain",
"enabled": True,
}
self.ajax_post(
reverse('admin:domain_change', args=[domain.pk]), values)
self.assertFalse(
RelayDomain.objects.filter(
domain__name="relaydomain.tld").exists())
self.assertEqual(
admin_models.Domain.objects.get(name="relaydomain.tld").type,
"domain")
values = {
"name": "relaydomain.tld",
"type": "relaydomain",
"enabled": True,
}
self.ajax_post(
reverse("admin:domain_change", args=[domain.pk]), values)
self.assertEqual(
admin_models.Domain.objects.get(name="relaydomain.tld").type,
"relaydomain")
self.assertTrue(
RelayDomain.objects.filter(
domain__name="relaydomain.tld").exists())
def test_edit_relaydomainalias(self):
"""Test the modification of a relay domain alias.