✅(tests) simplify mail domain invitations tests
just a quick simplification for our tests regarding domain invitations
This commit is contained in:
committed by
Marie
parent
63b8984eb2
commit
7804583632
@@ -412,23 +412,10 @@ class MailDomainInvitationViewset(
|
|||||||
|
|
||||||
return queryset
|
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):
|
def create(self, request, *args, **kwargs):
|
||||||
"""Attempt to create invitation. If user is already registered,
|
"""Attempt to create invitation. If user is already registered,
|
||||||
they don't need an invitation but an access, which we create here."""
|
they don't need an invitation but an access, which we create here."""
|
||||||
|
email = request.data["email"]
|
||||||
try:
|
try:
|
||||||
return super().create(request, *args, **kwargs)
|
return super().create(request, *args, **kwargs)
|
||||||
except EmailAlreadyKnownException as exc:
|
except EmailAlreadyKnownException as exc:
|
||||||
@@ -441,6 +428,7 @@ class MailDomainInvitationViewset(
|
|||||||
)
|
)
|
||||||
raise exc
|
raise exc
|
||||||
|
|
||||||
|
|
||||||
class AliasViewSet(
|
class AliasViewSet(
|
||||||
mixins.CreateModelMixin,
|
mixins.CreateModelMixin,
|
||||||
mixins.ListModelMixin,
|
mixins.ListModelMixin,
|
||||||
|
|||||||
@@ -12,7 +12,6 @@ from rest_framework.test import APIClient
|
|||||||
from core import factories as core_factories
|
from core import factories as core_factories
|
||||||
|
|
||||||
from mailbox_manager import enums, factories, models
|
from mailbox_manager import enums, factories, models
|
||||||
from mailbox_manager.api.client import serializers
|
|
||||||
|
|
||||||
pytestmark = pytest.mark.django_db
|
pytestmark = pytest.mark.django_db
|
||||||
|
|
||||||
@@ -20,13 +19,12 @@ pytestmark = pytest.mark.django_db
|
|||||||
def test_api_domain_invitations__create__anonymous():
|
def test_api_domain_invitations__create__anonymous():
|
||||||
"""Anonymous users should not be able to create invitations."""
|
"""Anonymous users should not be able to create invitations."""
|
||||||
domain = factories.MailDomainEnabledFactory()
|
domain = factories.MailDomainEnabledFactory()
|
||||||
invitation_values = serializers.MailDomainInvitationSerializer(
|
|
||||||
factories.MailDomainInvitationFactory.build()
|
|
||||||
).data
|
|
||||||
|
|
||||||
response = APIClient().post(
|
response = APIClient().post(
|
||||||
f"/api/v1.0/mail-domains/{domain.slug}/invitations/",
|
f"/api/v1.0/mail-domains/{domain.slug}/invitations/",
|
||||||
invitation_values,
|
{
|
||||||
|
"email": "some.email@domain.com",
|
||||||
|
"role": "admin",
|
||||||
|
},
|
||||||
format="json",
|
format="json",
|
||||||
)
|
)
|
||||||
assert response.status_code == status.HTTP_401_UNAUTHORIZED
|
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."""
|
for a domain they don't manage."""
|
||||||
user = core_factories.UserFactory()
|
user = core_factories.UserFactory()
|
||||||
domain = factories.MailDomainEnabledFactory()
|
domain = factories.MailDomainEnabledFactory()
|
||||||
invitation_values = serializers.MailDomainInvitationSerializer(
|
|
||||||
factories.MailDomainInvitationFactory.build()
|
|
||||||
).data
|
|
||||||
|
|
||||||
client = APIClient()
|
client = APIClient()
|
||||||
client.force_login(user)
|
client.force_login(user)
|
||||||
|
|
||||||
response = client.post(
|
response = client.post(
|
||||||
f"/api/v1.0/mail-domains/{domain.slug}/invitations/",
|
f"/api/v1.0/mail-domains/{domain.slug}/invitations/",
|
||||||
invitation_values,
|
{
|
||||||
|
"email": "some.email@domain.com",
|
||||||
|
"role": "viewer",
|
||||||
|
},
|
||||||
format="json",
|
format="json",
|
||||||
)
|
)
|
||||||
assert response.status_code == status.HTTP_404_NOT_FOUND
|
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()
|
domain = factories.MailDomainEnabledFactory()
|
||||||
factories.MailDomainAccessFactory(domain=domain, user=user, role=role)
|
factories.MailDomainAccessFactory(domain=domain, user=user, role=role)
|
||||||
|
|
||||||
invitation_values = serializers.MailDomainInvitationSerializer(
|
|
||||||
factories.MailDomainInvitationFactory.build()
|
|
||||||
).data
|
|
||||||
|
|
||||||
client = APIClient()
|
client = APIClient()
|
||||||
client.force_login(user)
|
client.force_login(user)
|
||||||
|
|
||||||
assert len(mail.outbox) == 0
|
assert len(mail.outbox) == 0
|
||||||
|
|
||||||
response = client.post(
|
response = client.post(
|
||||||
f"/api/v1.0/mail-domains/{domain.slug}/invitations/",
|
f"/api/v1.0/mail-domains/{domain.slug}/invitations/",
|
||||||
invitation_values,
|
{
|
||||||
|
"email": "some.email@domain.com",
|
||||||
|
"role": "owner",
|
||||||
|
},
|
||||||
format="json",
|
format="json",
|
||||||
)
|
)
|
||||||
assert response.status_code == status.HTTP_201_CREATED
|
assert response.status_code == status.HTTP_201_CREATED
|
||||||
assert len(mail.outbox) == 1
|
assert len(mail.outbox) == 1
|
||||||
email = mail.outbox[0]
|
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"
|
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
|
domain=domain, user=user, role=enums.MailDomainRoleChoices.VIEWER
|
||||||
)
|
)
|
||||||
|
|
||||||
invitation_values = serializers.MailDomainInvitationSerializer(
|
|
||||||
factories.MailDomainInvitationFactory.build()
|
|
||||||
).data
|
|
||||||
|
|
||||||
client = APIClient()
|
client = APIClient()
|
||||||
client.force_login(user)
|
client.force_login(user)
|
||||||
|
|
||||||
response = client.post(
|
response = client.post(
|
||||||
f"/api/v1.0/mail-domains/{domain.slug}/invitations/",
|
f"/api/v1.0/mail-domains/{domain.slug}/invitations/",
|
||||||
invitation_values,
|
{
|
||||||
|
"email": "some.email@domain.com",
|
||||||
|
"role": "viewer",
|
||||||
|
},
|
||||||
format="json",
|
format="json",
|
||||||
)
|
)
|
||||||
assert response.status_code == status.HTTP_403_FORBIDDEN
|
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
|
domain=domain, user=user, role=enums.MailDomainRoleChoices.OWNER
|
||||||
)
|
)
|
||||||
|
|
||||||
# Create a new invitation to the same domain with the exact same email address
|
# New invitation to the same domain with the exact same email address
|
||||||
duplicated_invitation = serializers.MailDomainInvitationSerializer(
|
|
||||||
factories.MailDomainInvitationFactory.build(email=existing_invitation.email)
|
|
||||||
).data
|
|
||||||
|
|
||||||
client = APIClient()
|
client = APIClient()
|
||||||
client.force_login(user)
|
client.force_login(user)
|
||||||
response = client.post(
|
response = client.post(
|
||||||
f"/api/v1.0/mail-domains/{domain.slug}/invitations/",
|
f"/api/v1.0/mail-domains/{domain.slug}/invitations/",
|
||||||
duplicated_invitation,
|
{
|
||||||
|
"email": existing_invitation.email,
|
||||||
|
"role": "owner",
|
||||||
|
},
|
||||||
format="json",
|
format="json",
|
||||||
)
|
)
|
||||||
assert response.status_code == status.HTTP_400_BAD_REQUEST
|
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
|
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."""
|
"""Already existing users should not be invited but given access directly."""
|
||||||
existing_user = core_factories.UserFactory()
|
existing_user = core_factories.UserFactory()
|
||||||
|
|
||||||
# Grant privileged role on the domain to the user
|
|
||||||
access = factories.MailDomainAccessFactory(role=enums.MailDomainRoleChoices.OWNER)
|
access = factories.MailDomainAccessFactory(role=enums.MailDomainRoleChoices.OWNER)
|
||||||
|
|
||||||
client = APIClient()
|
client = APIClient()
|
||||||
|
|||||||
Reference in New Issue
Block a user