🐛(domains) reduce logs around domain invitations

reduce logs and add tests around domain invitations
This commit is contained in:
Marie PUPO JEAMMET
2025-06-13 15:56:06 +02:00
committed by Quentin BEY
parent e64a34f167
commit 7bebf13d88
3 changed files with 38 additions and 3 deletions

View File

@@ -23,7 +23,6 @@ def convert_domain_invitations(sender, created, instance, **kwargs): # pylint:
Convert valid domain invitations to domain accesses for a given user.
Expired invitations are ignored.
"""
logger.info("Convert domain invitations for user %s", instance)
if created:
valid_domain_invitations = MailDomainInvitation.objects.filter(
email=instance.email,
@@ -36,6 +35,11 @@ def convert_domain_invitations(sender, created, instance, **kwargs): # pylint:
if not valid_domain_invitations.exists():
return
logger.info(
"Converting %s domain invitations for new user %s",
len(valid_domain_invitations),
instance,
)
MailDomainAccess.objects.bulk_create(
[
MailDomainAccess(
@@ -46,4 +50,3 @@ def convert_domain_invitations(sender, created, instance, **kwargs): # pylint:
)
valid_domain_invitations.delete()
logger.info("Invitations converted to domain accesses for user %s", instance)

View File

@@ -141,3 +141,26 @@ def test_api_domain_invitations__should_not_create_duplicate_invitations():
assert response.json()["__all__"] == [
"Mail domain invitation with this Email address and Domain already exists."
]
def test_api_domain_invitations__should_not_invite_when_user_already_exists():
"""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()
client.force_login(access.user)
invitation_values = serializers.MailDomainInvitationSerializer(
factories.MailDomainInvitationFactory.build(email=existing_user.email)
).data
response = client.post(
f"/api/v1.0/mail-domains/{access.domain.slug}/invitations/",
invitation_values,
format="json",
)
assert response.status_code == status.HTTP_400_BAD_REQUEST
assert response.json()["email"] == [
"This email is already associated to a registered user."
]

View File

@@ -38,11 +38,15 @@ def test_models_domain_invitations__is_expired():
assert expired_invitation.is_expired is True
def test_models_domain_invitation__should_convert_invitations_to_accesses_upon_joining():
def test_models_domain_invitation__should_convert_invitations_to_accesses_upon_joining(
caplog,
):
"""
Upon creating a new user, domain invitations linked to that email
should be converted to accesses and then deleted.
"""
caplog.set_level("INFO")
# Two invitations to the same mail but to different domains
email = "future_admin@example.com"
invitation_to_domain1 = factories.MailDomainInvitationFactory(
@@ -81,3 +85,8 @@ def test_models_domain_invitation__should_convert_invitations_to_accesses_upon_j
assert models.MailDomainInvitation.objects.filter(
domain=invitation_to_domain2.domain, email=other_invitation.email
).exists() # the other invitation remains
log_messages = [msg.message for msg in caplog.records]
assert (
f"Converting 2 domain invitations for new user {str(new_user)}" in log_messages
)