🎨(dimail) factorize dimail response upon successful mailbox creation

dimail's ok response upon mailbox creation is used in several tests.
All those tests now reference proper response available in fixtures.
This commit is contained in:
Marie PUPO JEAMMET
2025-01-16 18:53:01 +01:00
committed by Marie
parent cd94dc5091
commit 2c15609c1e
6 changed files with 61 additions and 65 deletions

View File

@@ -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

View File

@@ -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",

View File

@@ -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"})

View File

@@ -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",
)

View File

@@ -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",
)

View File

@@ -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(),
)