From f0edee43aeb8fe4ca2cb959c780aca413f37f520 Mon Sep 17 00:00:00 2001 From: Marie PUPO JEAMMET Date: Thu, 30 Jan 2025 18:56:23 +0100 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8(api)=20restrict=20mailbox=20sync=20to?= =?UTF-8?q?=20enabled=20domains?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Pending, failed and deactivated domains should not be sync'ed. --- CHANGELOG.md | 1 + src/backend/mailbox_manager/admin.py | 13 +++++++++++ .../tests/test_admin_actions.py | 22 +++++++++++++++++++ 3 files changed, 36 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 830b15fc0..9d8589403 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ and this project adheres to ### Fixed - 🚑️(plugins) fix name from SIRET specific case #674 +- 🐛(api) restrict mailbox sync to enabled domains ## [1.10.1] - 2025-01-27 diff --git a/src/backend/mailbox_manager/admin.py b/src/backend/mailbox_manager/admin.py index 011cfc80b..04eaa6f33 100644 --- a/src/backend/mailbox_manager/admin.py +++ b/src/backend/mailbox_manager/admin.py @@ -13,9 +13,15 @@ @admin.action(description=_("Synchronise from dimail")) def sync_mailboxes_from_dimail(modeladmin, request, queryset): # pylint: disable=unused-argument """Admin action to synchronize existing mailboxes from dimail to our database.""" + excluded_domains = [] + client = DimailAPIClient() for domain in queryset: + if domain.status != enums.MailDomainStatusChoices.ENABLED: + excluded_domains.append(domain.name) + continue + try: imported_mailboxes = client.import_mailboxes(domain) except exceptions.HTTPError as err: @@ -31,6 +37,13 @@ def sync_mailboxes_from_dimail(modeladmin, request, queryset): # pylint: disabl f"Imported mailboxes: {', '.join(imported_mailboxes)}" ), ) + if excluded_domains: + messages.warning( + request, + _( + f"Sync require enabled domains. Excluded domains: {', '.join(excluded_domains)}" + ), + ) @admin.action(description=_("Check and update status from dimail")) diff --git a/src/backend/mailbox_manager/tests/test_admin_actions.py b/src/backend/mailbox_manager/tests/test_admin_actions.py index cd10283f9..e2deef2d5 100644 --- a/src/backend/mailbox_manager/tests/test_admin_actions.py +++ b/src/backend/mailbox_manager/tests/test_admin_actions.py @@ -23,6 +23,28 @@ ) +@pytest.mark.django_db +def test_admin_action__should_not_sync_if_domain_enabled(client): + """Test admin action to check health of some domains""" + admin = core_factories.UserFactory(is_staff=True, is_superuser=True) + client.force_login(admin) + domain = factories.MailDomainFactory() + data = { + "action": "sync_mailboxes_from_dimail", + "_selected_action": [domain.id], + } + url = reverse("admin:mailbox_manager_maildomain_changelist") + + with responses.RequestsMock(): + # No call expected + response = client.post(url, data, follow=True) + assert response.status_code == status.HTTP_200_OK + assert ( + f"Sync require enabled domains. Excluded domains: {domain}" + in response.content.decode("utf-8") + ) + + @pytest.mark.django_db def test_admin_action__should_switch_to_failed_when_domain_broken(client): """Test admin action to check health of some domains"""