mirror of
https://github.com/jwinterm/modoboa.git
synced 2026-10-18 05:51:26 +02:00
@@ -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())
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user