From eeb09d10cb41141812bee44b03a0b0f7de18adff Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Wed, 18 Feb 2026 13:45:59 +0100 Subject: [PATCH] Improved coverage --- modoboa/admin/api/v2/serializers.py | 2 ++ modoboa/admin/tests/test_domain.py | 12 ++++++-- modoboa/rspamd/tests.py | 45 +++++++++++++++++++++++++++-- 3 files changed, 53 insertions(+), 6 deletions(-) diff --git a/modoboa/admin/api/v2/serializers.py b/modoboa/admin/api/v2/serializers.py index f61d4e0b3..c45d22cb9 100644 --- a/modoboa/admin/api/v2/serializers.py +++ b/modoboa/admin/api/v2/serializers.py @@ -187,6 +187,8 @@ class DomainSerializer(v1_serializers.DomainSerializer): if ( instance._loaded_values.get("enable_dkim") != instance.enable_dkim and instance.enable_dkim + ) or ( + instance._loaded_values.get("dkim_key_length") != instance.dkim_key_length ): instance.generate_dkim_key() if transport_def and instance.type == "relaydomain": diff --git a/modoboa/admin/tests/test_domain.py b/modoboa/admin/tests/test_domain.py index 7f949a56c..8f1e30827 100644 --- a/modoboa/admin/tests/test_domain.py +++ b/modoboa/admin/tests/test_domain.py @@ -4,11 +4,14 @@ import os import shutil import tempfile +from rq import SimpleWorker from testfixtures import compare from django.core.management import call_command from django.urls import reverse +import django_rq + from modoboa.core.models import User from modoboa.lib.tests import ModoAPITestCase, SETTINGS_SAMPLE @@ -194,7 +197,7 @@ class DKIMTestCase(ModoAPITestCase): self.assertEqual(domain.dkim_private_key_path, "") def test_dkim_key_length_modification(self): - """ """ + """Check that key length change triggers a new key creation.""" self.set_global_parameter("dkim_keys_storage_dir", self.workdir) values = { "name": "pouet.com", @@ -207,9 +210,12 @@ class DKIMTestCase(ModoAPITestCase): url = reverse("v2:domain-list") response = self.client.post(url, values, format="json") self.assertEqual(response.status_code, 201) - call_command("modo", "manage_dkim_keys") + queue = django_rq.get_queue("dkim") + worker = SimpleWorker([queue], connection=queue.connection) + worker.work(burst=True) key_path = os.path.join(self.workdir, "{}.pem".format(values["name"])) self.assertTrue(os.path.exists(key_path)) + dom = Domain.objects.get(name="pouet.com") values["dkim_key_length"] = 4096 response = self.client.put( @@ -219,5 +225,5 @@ class DKIMTestCase(ModoAPITestCase): dom.refresh_from_db() self.assertEqual(dom.dkim_private_key_path, "") os.unlink(key_path) - call_command("modo", "manage_dkim_keys") + worker.work(burst=True) self.assertTrue(os.path.exists(key_path)) diff --git a/modoboa/rspamd/tests.py b/modoboa/rspamd/tests.py index c316c1ca5..1417e92d3 100644 --- a/modoboa/rspamd/tests.py +++ b/modoboa/rspamd/tests.py @@ -1,10 +1,14 @@ import os import shutil -from django.core import management +from rq import SimpleWorker +from testfixtures import LogCapture + from django.test import modify_settings from django.urls import reverse +import django_rq + from modoboa.admin import factories as admin_factories, models as admin_models from modoboa.lib.tests import ModoAPITestCase from modoboa.rspamd import jobs @@ -38,8 +42,18 @@ class ManagementCommandTestCase(ModoAPITestCase): def test_job(self): self.unconfigure() - with self.assertRaises(management.CommandError): - management.call_command("manage_rspamd_maps") + with LogCapture("modoboa.jobs") as log: + jobs.update_rspamd_maps( + list(admin_models.Domain.objects.all().values_list("id", flat=True)) + ) + log.check( + ( + "modoboa.jobs", + "ERROR", + "path map path and/or selector map path " + "not set in modoboa rspamd settings.", + ) + ) self.configure() jobs.update_rspamd_maps( @@ -68,6 +82,31 @@ class ManagementCommandTestCase(ModoAPITestCase): content = fp.read() self.assertNotIn(domain.name, content) + def test_signal_handler(self): + self.set_global_parameter("dkim_keys_storage_dir", self.workdir, app="admin") + self.configure() + values = { + "name": "pouet.com", + "quota": 1000, + "default_mailbox_quota": 100, + "type": "domain", + "enable_dkim": True, + } + url = reverse("v2:domain-list") + response = self.client.post(url, values, format="json") + self.assertEqual(response.status_code, 201) + + queue = django_rq.get_queue("dkim") + worker = SimpleWorker([queue], connection=queue.connection) + worker.work(burst=True) + + queue = django_rq.get_queue("modoboa") + worker = SimpleWorker([queue], connection=queue.connection) + worker.work(burst=True) + + self.assertTrue(os.path.exists(self.key_map_path)) + self.assertTrue(os.path.exists(self.selector_map_path)) + class ParametersAPITestCase(ModoAPITestCase):