From 09dfeb235338c77d23f6e537f64ced441e27f445 Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Mon, 12 Jan 2026 17:53:13 +0100 Subject: [PATCH] Improved tests --- modoboa/admin/tests/test_mailbox_operations.py | 8 ++++---- modoboa/admin/tests/test_mx.py | 18 +++++++++++------- pyproject.toml | 1 + 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/modoboa/admin/tests/test_mailbox_operations.py b/modoboa/admin/tests/test_mailbox_operations.py index 94a910c1c..d4152aa6f 100644 --- a/modoboa/admin/tests/test_mailbox_operations.py +++ b/modoboa/admin/tests/test_mailbox_operations.py @@ -4,10 +4,10 @@ import os import shutil from unittest import mock -from django.core.management import call_command from django.test import override_settings from django.urls import reverse +from modoboa.admin import jobs from modoboa.lib.tests import ModoAPITestCase from .. import factories, models @@ -45,7 +45,7 @@ class MailboxOperationTestCase(ModoAPITestCase): self.client.post( reverse("v2:account-delete", args=[mb.user.pk]), {}, format="json" ) - call_command("handle_mailbox_operations") + jobs.handle_mailbox_operations() self.assertFalse(models.MailboxOperation.objects.exists()) self.assertFalse(os.path.exists(mb.mail_home)) @@ -71,7 +71,7 @@ class MailboxOperationTestCase(ModoAPITestCase): self.assertEqual(response.status_code, 200) path = f"{self.workdir}/test.com/admin2" mail_home_mock.__get__ = mock.Mock(return_value=path) - call_command("handle_mailbox_operations") + jobs.handle_mailbox_operations() self.assertFalse(models.MailboxOperation.objects.exists()) self.assertTrue(os.path.exists(mb.mail_home)) @@ -84,6 +84,6 @@ class MailboxOperationTestCase(ModoAPITestCase): self.client.post( reverse("v2:domain-delete", args=[domain.pk]), {}, format="json" ) - call_command("handle_mailbox_operations") + jobs.handle_mailbox_operations() self.assertFalse(models.MailboxOperation.objects.exists()) self.assertFalse(os.path.exists(path)) diff --git a/modoboa/admin/tests/test_mx.py b/modoboa/admin/tests/test_mx.py index 6b1963555..bccd1884c 100644 --- a/modoboa/admin/tests/test_mx.py +++ b/modoboa/admin/tests/test_mx.py @@ -3,6 +3,7 @@ from unittest import mock import dns.resolver +from freezegun import freeze_time from rq import SimpleWorker from testfixtures import LogCapture @@ -209,7 +210,7 @@ class DNSBLTestCase(ModoTestCase): ) cls.domain.add_admin(mb.user) - factories.DomainFactory(name="does-not-exist.example.com") + cls.domain4 = factories.DomainFactory(name="does-not-exist.example.com") cls.domain2 = factories.DomainFactory( name="test.localhost" ) # Should not be checked @@ -230,9 +231,12 @@ class DNSBLTestCase(ModoTestCase): queue = django_rq.get_queue("modoboa") worker = SimpleWorker([queue], connection=queue.connection) - with LogCapture("modoboa.dns"): - jobs.handle_dns_checks() - worker.work(burst=True) + + for cpt in range(10): + with freeze_time(f"2026-01-12 14:00:0{cpt}"): + jobs.handle_dns_checks() + worker.work(burst=True) + self.assertTrue(models.DNSBLResult.objects.filter(domain=self.domain).exists()) self.assertFalse( models.DNSBLResult.objects.filter(domain=self.domain3).exists() @@ -259,12 +263,12 @@ class DNSBLTestCase(ModoTestCase): self, mock_query, mock_getaddrinfo, mock_g_gethostbyname ): """Check notifications.""" + self.set_global_parameter("enable_dnsbl_checks", True) mock_query.side_effect = utils.mock_dns_query_result mock_getaddrinfo.side_effect = utils.mock_ip_query_result mock_g_gethostbyname.return_value = "127.255.255.254" # <--Spamhaus response when querying from an open resolver - with LogCapture("modoboa.dns"): - DNSChecker().run(self.domain) - self.assertEqual(len(mail.outbox), 1) + DNSChecker().run(self.domain) + self.assertEqual(len(mail.outbox), 0) @mock.patch("socket.gethostbyname") @mock.patch("socket.getaddrinfo") diff --git a/pyproject.toml b/pyproject.toml index 6dd12054f..7cd9442c7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -98,6 +98,7 @@ test = [ "factory-boy<3.4.0", "httmock==1.4.0", "testfixtures==8.3.0", + "freezegun", "tox", ] ldap = ["django-auth-ldap<6.0.0"]