From 7804583632e39458b285ac56d8fefda7c80d2ee4 Mon Sep 17 00:00:00 2001 From: Marie PUPO JEAMMET Date: Wed, 3 Sep 2025 14:52:51 +0200 Subject: [PATCH] =?UTF-8?q?=E2=9C=85(tests)=20simplify=20mail=20domain=20i?= =?UTF-8?q?nvitations=20tests?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit just a quick simplification for our tests regarding domain invitations --- .../mailbox_manager/api/client/viewsets.py | 16 +----- .../test_api_domain_invitations_create.py | 57 ++++++++----------- 2 files changed, 25 insertions(+), 48 deletions(-) diff --git a/src/backend/mailbox_manager/api/client/viewsets.py b/src/backend/mailbox_manager/api/client/viewsets.py index 7cdc00d..be30d71 100644 --- a/src/backend/mailbox_manager/api/client/viewsets.py +++ b/src/backend/mailbox_manager/api/client/viewsets.py @@ -412,23 +412,10 @@ class MailDomainInvitationViewset( return queryset - def perform_create(self, serializer): - """Lookup for existing user before inviting.""" - if email := serializer.validated_data["email"]: - existing_user = models.User.objects.filter(email=email) - if existing_user.exists(): - return models.MailDomainAccess.objects.create( - user=existing_user[0], - domain=serializer.validated_data["domain"], - role=serializer.validated_data["role"], - ) - - return super().perform_create(serializer) - - def create(self, request, *args, **kwargs): """Attempt to create invitation. If user is already registered, they don't need an invitation but an access, which we create here.""" + email = request.data["email"] try: return super().create(request, *args, **kwargs) except EmailAlreadyKnownException as exc: @@ -441,6 +428,7 @@ class MailDomainInvitationViewset( ) raise exc + class AliasViewSet( mixins.CreateModelMixin, mixins.ListModelMixin, diff --git a/src/backend/mailbox_manager/tests/api/invitations/test_api_domain_invitations_create.py b/src/backend/mailbox_manager/tests/api/invitations/test_api_domain_invitations_create.py index 4565419..9799599 100644 --- a/src/backend/mailbox_manager/tests/api/invitations/test_api_domain_invitations_create.py +++ b/src/backend/mailbox_manager/tests/api/invitations/test_api_domain_invitations_create.py @@ -12,7 +12,6 @@ from rest_framework.test import APIClient from core import factories as core_factories from mailbox_manager import enums, factories, models -from mailbox_manager.api.client import serializers pytestmark = pytest.mark.django_db @@ -20,13 +19,12 @@ pytestmark = pytest.mark.django_db def test_api_domain_invitations__create__anonymous(): """Anonymous users should not be able to create invitations.""" domain = factories.MailDomainEnabledFactory() - invitation_values = serializers.MailDomainInvitationSerializer( - factories.MailDomainInvitationFactory.build() - ).data - response = APIClient().post( f"/api/v1.0/mail-domains/{domain.slug}/invitations/", - invitation_values, + { + "email": "some.email@domain.com", + "role": "admin", + }, format="json", ) assert response.status_code == status.HTTP_401_UNAUTHORIZED @@ -40,16 +38,15 @@ def test_api_domain_invitations__create__no_access_forbidden_not_found(): for a domain they don't manage.""" user = core_factories.UserFactory() domain = factories.MailDomainEnabledFactory() - invitation_values = serializers.MailDomainInvitationSerializer( - factories.MailDomainInvitationFactory.build() - ).data client = APIClient() client.force_login(user) - response = client.post( f"/api/v1.0/mail-domains/{domain.slug}/invitations/", - invitation_values, + { + "email": "some.email@domain.com", + "role": "viewer", + }, format="json", ) assert response.status_code == status.HTTP_404_NOT_FOUND @@ -65,24 +62,21 @@ def test_api_domain_invitations__admin_should_create_invites(role): domain = factories.MailDomainEnabledFactory() factories.MailDomainAccessFactory(domain=domain, user=user, role=role) - invitation_values = serializers.MailDomainInvitationSerializer( - factories.MailDomainInvitationFactory.build() - ).data - client = APIClient() client.force_login(user) - assert len(mail.outbox) == 0 - response = client.post( f"/api/v1.0/mail-domains/{domain.slug}/invitations/", - invitation_values, + { + "email": "some.email@domain.com", + "role": "owner", + }, format="json", ) assert response.status_code == status.HTTP_201_CREATED assert len(mail.outbox) == 1 email = mail.outbox[0] - assert email.to == [invitation_values["email"]] + assert email.to == ["some.email@domain.com"] assert email.subject == "[La Suite] Vous avez été invité(e) à rejoindre la Régie" @@ -96,16 +90,14 @@ def test_api_domain_invitations__no_access_forbidden_not_found(): domain=domain, user=user, role=enums.MailDomainRoleChoices.VIEWER ) - invitation_values = serializers.MailDomainInvitationSerializer( - factories.MailDomainInvitationFactory.build() - ).data - client = APIClient() client.force_login(user) - response = client.post( f"/api/v1.0/mail-domains/{domain.slug}/invitations/", - invitation_values, + { + "email": "some.email@domain.com", + "role": "viewer", + }, format="json", ) assert response.status_code == status.HTTP_403_FORBIDDEN @@ -125,16 +117,15 @@ def test_api_domain_invitations__should_not_create_duplicate_invitations(): domain=domain, user=user, role=enums.MailDomainRoleChoices.OWNER ) - # Create a new invitation to the same domain with the exact same email address - duplicated_invitation = serializers.MailDomainInvitationSerializer( - factories.MailDomainInvitationFactory.build(email=existing_invitation.email) - ).data - + # New invitation to the same domain with the exact same email address client = APIClient() client.force_login(user) response = client.post( f"/api/v1.0/mail-domains/{domain.slug}/invitations/", - duplicated_invitation, + { + "email": existing_invitation.email, + "role": "owner", + }, format="json", ) assert response.status_code == status.HTTP_400_BAD_REQUEST @@ -144,11 +135,9 @@ def test_api_domain_invitations__should_not_create_duplicate_invitations(): assert models.MailDomainInvitation.objects.count() == 1 # and specifically, not 2 -def test_api_domain_invitations__should_create_access_when_user_already_exists(): +def test_api_domain_invitations__inviting_known_email_should_create_access(): """Already existing users should not be invited but given access directly.""" existing_user = core_factories.UserFactory() - - # Grant privileged role on the domain to the user access = factories.MailDomainAccessFactory(role=enums.MailDomainRoleChoices.OWNER) client = APIClient()