diff --git a/src/backend/mailbox_manager/api/client/serializers.py b/src/backend/mailbox_manager/api/client/serializers.py index 4d298db..df228b5 100644 --- a/src/backend/mailbox_manager/api/client/serializers.py +++ b/src/backend/mailbox_manager/api/client/serializers.py @@ -1,6 +1,5 @@ """Client serializers for People's mailbox manager app.""" -import json from logging import getLogger from requests.exceptions import HTTPError @@ -41,14 +40,12 @@ class MailboxSerializer(serializers.ModelSerializer): # send new mailbox request to dimail response = client.create_mailbox(mailbox, self.context["request"].user.sub) - # fix format to have actual json - dimail_data = json.loads(response.content.decode("utf-8").replace("'", '"')) mailbox.status = enums.MailDomainStatusChoices.ENABLED mailbox.save() # send confirmation email client.notify_mailbox_creation( - recipient=mailbox.secondary_email, mailbox_data=dimail_data + recipient=mailbox.secondary_email, mailbox_data=response.json() ) # actually save mailbox on our database diff --git a/src/backend/mailbox_manager/tests/api/mailboxes/test_api_mailboxes_create.py b/src/backend/mailbox_manager/tests/api/mailboxes/test_api_mailboxes_create.py index dd5eb0a..068d862 100644 --- a/src/backend/mailbox_manager/tests/api/mailboxes/test_api_mailboxes_create.py +++ b/src/backend/mailbox_manager/tests/api/mailboxes/test_api_mailboxes_create.py @@ -19,6 +19,10 @@ from core import factories as core_factories from mailbox_manager import enums, factories, models from mailbox_manager.api.client import serializers +from mailbox_manager.tests.fixtures.dimail import ( + TOKEN_OK, + response_mailbox_created, +) pytestmark = pytest.mark.django_db @@ -102,19 +106,15 @@ def test_api_mailboxes__create_roles_success(role): rsps.add( rsps.GET, re.compile(r".*/token/"), - body='{"access_token": "domain_owner_token"}', + body=TOKEN_OK, status=status.HTTP_200_OK, content_type="application/json", ) rsps.add( rsps.POST, re.compile(rf".*/domains/{mail_domain.name}/mailboxes/"), - body=str( - { - "email": f"{mailbox_values['local_part']}@{mail_domain.name}", - "password": "newpass", - "uuid": "uuid", - } + body=response_mailbox_created( + f"{mailbox_values['local_part']}@{mail_domain.name}" ), status=status.HTTP_201_CREATED, content_type="application/json", @@ -161,19 +161,15 @@ def test_api_mailboxes__create_with_accent_success(role): rsps.add( rsps.GET, re.compile(r".*/token/"), - body='{"access_token": "domain_owner_token"}', + body=TOKEN_OK, status=status.HTTP_200_OK, content_type="application/json", ) rsps.add( rsps.POST, re.compile(rf".*/domains/{mail_domain.name}/mailboxes/"), - body=str( - { - "email": f"{mailbox_values['local_part']}@{mail_domain.name}", - "password": "newpass", - "uuid": "uuid", - } + body=response_mailbox_created( + f"{mailbox_values['local_part']}@{mail_domain.name}" ), status=status.HTTP_201_CREATED, content_type="application/json", @@ -287,7 +283,7 @@ def test_api_mailboxes__no_dimail_call_if_mailbox_creation_failed(): rsps.add( rsps.GET, re.compile(r".*/token/"), - body='{"access_token": "domain_owner_token"}', + body=TOKEN_OK, status=status.HTTP_200_OK, content_type="application/json", ) @@ -340,19 +336,15 @@ def test_api_mailboxes__same_local_part_on_different_domains(): rsps.add( rsps.GET, re.compile(r".*/token/"), - body='{"access_token": "domain_owner_token"}', + body=TOKEN_OK, status=status.HTTP_200_OK, content_type="application/json", ) rsps.add( rsps.POST, re.compile(rf".*/domains/{access.domain.name}/mailboxes/"), - body=str( - { - "email": f"{mailbox_values['local_part']}@{access.domain.name}", - "password": "newpass", - "uuid": "uuid", - } + body=response_mailbox_created( + f"{mailbox_values['local_part']}@{access.domain.name}" ), status=status.HTTP_201_CREATED, content_type="application/json", @@ -485,7 +477,7 @@ def test_api_mailboxes__async_dimail_unauthorized(mock_error): rsps.add( rsps.GET, re.compile(r".*/token/"), - body='{"access_token": "domain_owner_token"}', + body=TOKEN_OK, status=status.HTTP_200_OK, # user is in dimail-api content_type="application/json", ) @@ -538,19 +530,15 @@ def test_api_mailboxes__domain_owner_or_admin_successful_creation_and_provisioni rsps.add( rsps.GET, re.compile(r".*/token/"), - body='{"access_token": "domain_owner_token"}', + body=TOKEN_OK, status=status.HTTP_200_OK, content_type="application/json", ) rsp = rsps.add( rsps.POST, re.compile(rf".*/domains/{access.domain.name}/mailboxes/"), - body=str( - { - "email": f"{mailbox_data['local_part']}@{access.domain.name}", - "password": "newpass", - "uuid": "uuid", - } + body=response_mailbox_created( + f"{mailbox_data['local_part']}@{access.domain.name}" ), status=status.HTTP_201_CREATED, content_type="application/json", @@ -657,7 +645,7 @@ def test_api_mailboxes__user_unrelated_to_domain(): rsps.add( rsps.GET, re.compile(r".*/token/"), - body='{"access_token": "domain_owner_token"}', + body=TOKEN_OK, status=status.HTTP_200_OK, content_type="application/json", ) @@ -702,7 +690,7 @@ def test_api_mailboxes__handling_dimail_unexpected_error(caplog): rsps.add( rsps.GET, re.compile(r".*/token/"), - body='{"access_token": "domain_owner_token"}', + body=TOKEN_OK, status=status.HTTP_200_OK, content_type="application/json", ) @@ -757,19 +745,15 @@ def test_api_mailboxes__send_correct_logger_infos(mock_info, mock_error): rsps.add( rsps.GET, re.compile(r".*/token/"), - body='{"access_token": "domain_owner_token"}', + body=TOKEN_OK, status=status.HTTP_200_OK, content_type="application/json", ) rsps.add( rsps.POST, re.compile(rf".*/domains/{access.domain.name}/mailboxes/"), - body=str( - { - "email": f"{mailbox_data['local_part']}@{access.domain.name}", - "password": "newpass", - "uuid": "uuid", - } + body=response_mailbox_created( + f"{mailbox_data['local_part']}@{access.domain.name}" ), status=status.HTTP_201_CREATED, content_type="application/json", @@ -818,19 +802,15 @@ def test_api_mailboxes__sends_new_mailbox_notification(mock_info): rsps.add( rsps.GET, re.compile(r".*/token/"), - body='{"access_token": "domain_owner_token"}', + body=TOKEN_OK, status=status.HTTP_200_OK, content_type="application/json", ) rsps.add( rsps.POST, re.compile(rf".*/domains/{access.domain.name}/mailboxes/"), - body=str( - { - "email": f"{mailbox_data['local_part']}@{access.domain.name}", - "password": "newpass", - "uuid": "uuid", - } + body=response_mailbox_created( + f"{mailbox_data['local_part']}@{access.domain}" ), status=status.HTTP_201_CREATED, content_type="application/json", diff --git a/src/backend/mailbox_manager/tests/fixtures/dimail.py b/src/backend/mailbox_manager/tests/fixtures/dimail.py index 5606816..4a3c371 100644 --- a/src/backend/mailbox_manager/tests/fixtures/dimail.py +++ b/src/backend/mailbox_manager/tests/fixtures/dimail.py @@ -1,6 +1,10 @@ # pylint: disable=line-too-long """Define here some fake data from dimail, useful to mock dimail response""" +import json + +## DOMAINS + CHECK_DOMAIN_BROKEN = { "name": "example.fr", "state": "broken", @@ -103,3 +107,14 @@ CHECK_DOMAIN_OK = { "ox": {"ok": True, "internal": True, "errors": []}, "cert": {"ok": True, "internal": True, "errors": []}, } + +## TOKEN + +TOKEN_OK = json.dumps({"access_token": "token", "token_type": "bearer"}) + +## MAILBOXES + + +def response_mailbox_created(email_address): + """mimic dimail response upon succesfull mailbox creation.""" + return json.dumps({"email": email_address, "password": "password"}) diff --git a/src/backend/mailbox_manager/tests/test_admin_actions.py b/src/backend/mailbox_manager/tests/test_admin_actions.py index c9f1465..6db813e 100644 --- a/src/backend/mailbox_manager/tests/test_admin_actions.py +++ b/src/backend/mailbox_manager/tests/test_admin_actions.py @@ -15,7 +15,12 @@ from core import factories as core_factories from mailbox_manager import enums, factories, models -from .fixtures.dimail import CHECK_DOMAIN_BROKEN, CHECK_DOMAIN_OK +from .fixtures.dimail import ( + CHECK_DOMAIN_BROKEN, + CHECK_DOMAIN_OK, + TOKEN_OK, + response_mailbox_created, +) @pytest.mark.django_db @@ -92,7 +97,7 @@ def test_fetch_domain_status__should_switch_to_enabled_when_domain_ok(client): rsps.add( rsps.GET, re.compile(r".*/token/"), - body='{"access_token": "domain_owner_token"}', + body=TOKEN_OK, status=status.HTTP_200_OK, content_type="application/json", ) diff --git a/src/backend/mailbox_manager/tests/test_utils_dimail_client.py b/src/backend/mailbox_manager/tests/test_utils_dimail_client.py index 891c390..ae7b3d5 100644 --- a/src/backend/mailbox_manager/tests/test_utils_dimail_client.py +++ b/src/backend/mailbox_manager/tests/test_utils_dimail_client.py @@ -16,7 +16,12 @@ from rest_framework import status from mailbox_manager import enums, factories, models from mailbox_manager.utils.dimail import DimailAPIClient -from .fixtures.dimail import CHECK_DOMAIN_BROKEN, CHECK_DOMAIN_OK +from .fixtures.dimail import ( + CHECK_DOMAIN_BROKEN, + CHECK_DOMAIN_OK, + TOKEN_OK, + response_mailbox_created, +) pytestmark = pytest.mark.django_db @@ -193,8 +198,10 @@ def test_dimail__fetch_domain_status_from_dimail(): assert response.status_code == status.HTTP_200_OK assert domain.status == enums.MailDomainStatusChoices.ENABLED + def test_dimail___enable_pending_mailboxes(caplog): - """Status of pending mailboxes should switch to "enabled" when calling enable_pending_mailboxes.""" + """Status of pending mailboxes should switch to "enabled" + when calling enable_pending_mailboxes.""" caplog.set_level(logging.INFO) domain = factories.MailDomainFactory() @@ -213,20 +220,14 @@ def test_dimail___enable_pending_mailboxes(caplog): rsps.add( rsps.GET, re.compile(r".*/token/"), - body='{"access_token": "domain_owner_token"}', + body=TOKEN_OK, status=status.HTTP_200_OK, content_type="application/json", ) rsps.add( rsps.POST, re.compile(rf".*/domains/{domain.name}/mailboxes/"), - body=str( - { - "email": f"mock@{domain.name}", - "password": "newpass", - "uuid": "uuid", - } - ), + body=response_mailbox_created(f"mock@{domain.name}"), status=status.HTTP_201_CREATED, content_type="application/json", ) diff --git a/src/backend/mailbox_manager/utils/dimail.py b/src/backend/mailbox_manager/utils/dimail.py index 3664fe1..9e271bb 100644 --- a/src/backend/mailbox_manager/utils/dimail.py +++ b/src/backend/mailbox_manager/utils/dimail.py @@ -433,13 +433,11 @@ class DimailAPIClient: ): response = self.create_mailbox(mailbox) - # fix format to have actual json - dimail_data = json.loads(response.content.decode("utf-8").replace("'", '"')) mailbox.status = enums.MailDomainStatusChoices.ENABLED mailbox.save() # send confirmation email self.notify_mailbox_creation( recipient=mailbox.secondary_email, - mailbox_data=dimail_data, + mailbox_data=response.json(), )