From 6a8dfe49a6cd62ea1a5ebd4d72ec295cd4d61f95 Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Tue, 8 Jun 2021 08:36:16 +0200 Subject: [PATCH] Added unit test. --- modoboa/admin/factories.py | 10 +++++++ modoboa/admin/models/domain.py | 10 +++---- modoboa/admin/models/mxrecord.py | 2 -- modoboa/dnstools/tests.py | 45 +++++++++++++++++++++++++++++++- 4 files changed, 59 insertions(+), 8 deletions(-) diff --git a/modoboa/admin/factories.py b/modoboa/admin/factories.py index 13e5bb6d9..cd5d33221 100644 --- a/modoboa/admin/factories.py +++ b/modoboa/admin/factories.py @@ -81,6 +81,16 @@ class AlarmFactory(factory.django.DjangoModelFactory): model = models.Alarm +class MXRecordFactory(factory.django.DjangoModelFactory): + """Factory for MXRecord model.""" + + domain = factory.SubFactory(DomainFactory) + address = "127.0.0.1" + + class Meta: + model = models.MXRecord + + def populate_database(): """Create test data. diff --git a/modoboa/admin/models/domain.py b/modoboa/admin/models/domain.py index 1bff357ec..c4c0c911b 100644 --- a/modoboa/admin/models/domain.py +++ b/modoboa/admin/models/domain.py @@ -188,27 +188,27 @@ class Domain(mixins.MessageLimitMixin, AdminObject): else: return "success" - @cached_property + @property def spf_record(self): """Return SPF record.""" return self.dnsrecord_set.filter(type="spf").first() - @cached_property + @property def dkim_record(self): """Return DKIM record.""" return self.dnsrecord_set.filter(type="dkim").first() - @cached_property + @property def dmarc_record(self): """Return DMARC record.""" return self.dnsrecord_set.filter(type="dmarc").first() - @cached_property + @property def autoconfig_record(self): """Return autoconfig record.""" return self.dnsrecord_set.filter(type="autoconfig").first() - @cached_property + @property def autodiscover_record(self): """Return autodiscover record.""" return self.dnsrecord_set.filter(type="autodiscover").first() diff --git a/modoboa/admin/models/mxrecord.py b/modoboa/admin/models/mxrecord.py index a6f1f518e..c03ae3e4f 100644 --- a/modoboa/admin/models/mxrecord.py +++ b/modoboa/admin/models/mxrecord.py @@ -4,7 +4,6 @@ import datetime from django.db import models from django.utils import timezone -from django.utils.encoding import python_2_unicode_compatible from modoboa.parameters import tools as param_tools @@ -52,7 +51,6 @@ class MXRecordManager(models.Manager): yield record -@python_2_unicode_compatible class MXRecord(models.Model): """A model used to store MX records for Domain.""" diff --git a/modoboa/dnstools/tests.py b/modoboa/dnstools/tests.py index 6f53bdea7..0bf8d4f62 100644 --- a/modoboa/dnstools/tests.py +++ b/modoboa/dnstools/tests.py @@ -2,11 +2,14 @@ from unittest import mock -from django.urls import reverse from django.test import SimpleTestCase +from django.urls import reverse +from django.utils import timezone from dns.rdtypes.ANY.TXT import TXT +from modoboa.admin import factories as admin_factories +from modoboa.admin import models as admin_models from modoboa.lib.tests import ModoTestCase from . import factories @@ -175,3 +178,43 @@ class ViewsTestCase(ModoTestCase): "dnstools:domain_dns_configuration", args=[self.ac_rec.domain.pk]) response = self.client.get(url) self.assertContains(response, "[IP address of your Modoboa server]") + + +class DomainTestCase(ModoTestCase): + + def test_dns_global_status(self): + admin_factories.MXRecordFactory.create( + domain__name="test.com", name="mail.test.com", + updated=timezone.now()) + domain = admin_models.Domain.objects.get(name="test.com") + self.assertEqual(domain.dns_global_status, "critical") + + factories.DNSRecordFactory.create( + type="spf", value="v=SPF1 mx -all", is_valid=True, + domain__name="test.com" + ) + self.assertEqual(domain.dns_global_status, "critical") + + factories.DNSRecordFactory( + type="dkim", value="12345", is_valid=True, + domain__name="test.com" + ) + self.assertEqual(domain.dns_global_status, "critical") + + factories.DNSRecordFactory( + type="dmarc", value="XXX", is_valid=True, + domain__name="test.com" + ) + self.assertEqual(domain.dns_global_status, "critical") + + factories.DNSRecordFactory( + type="autoconfig", value="1.2.3.4", is_valid=True, + domain__name="test.com" + ) + self.assertEqual(domain.dns_global_status, "critical") + + factories.DNSRecordFactory( + type="autodiscover", value="1.2.3.4", is_valid=True, + domain__name="test.com" + ) + self.assertEqual(domain.dns_global_status, "ok")