From e63de146a8c2cd9d276846d447071ba0ff9875f1 Mon Sep 17 00:00:00 2001 From: Sabrina Demagny Date: Mon, 3 Feb 2025 15:06:00 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B(backend)=20fix=20flaky=20test=20af?= =?UTF-8?q?ter=20add=20fr=20translations?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Define user language to test invitation email content. --- CHANGELOG.md | 1 + src/backend/core/models.py | 7 +- .../core/tests/test_models_invitations.py | 8 +- .../locale/fr_FR/LC_MESSAGES/django.mo | Bin 2587 -> 12272 bytes .../commands/test_fetch_domain_status.py | 12 +- .../mailbox_manager/tests/fixtures/dimail.py | 153 ++++++++++++- .../tests/test_admin_actions.py | 106 ++++----- .../tests/test_utils_dimail_client.py | 211 +++++++++++++++--- src/backend/mailbox_manager/utils/dimail.py | 105 ++++++--- 9 files changed, 480 insertions(+), 123 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 73ea7d603..78f143a34 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ and this project adheres to ### Added +- ✨(dimail) handle 'action required' status for MailDomain - ✨(domains) add action required status on MailDomain - ✨(dimail) send pending mailboxes upon domain activation diff --git a/src/backend/core/models.py b/src/backend/core/models.py index 4c1a49b91..3f55d0e89 100644 --- a/src/backend/core/models.py +++ b/src/backend/core/models.py @@ -21,8 +21,8 @@ from django.db import models, transaction from django.template.loader import render_to_string from django.utils import timezone +from django.utils.translation import gettext, override from django.utils.translation import gettext_lazy as _ -from django.utils.translation import override import jsonschema from timezone_field import TimeZoneField @@ -961,14 +961,15 @@ def email_invitation(self): """Email invitation to the user.""" try: with override(self.issuer.language): + subject = gettext("Invitation to join La Régie!") template_vars = { - "title": _("Invitation to join La Régie!"), + "title": subject, "site": Site.objects.get_current(), } msg_html = render_to_string("mail/html/invitation.html", template_vars) msg_plain = render_to_string("mail/text/invitation.txt", template_vars) mail.send_mail( - _("Invitation to join La Régie!"), + subject, msg_plain, settings.EMAIL_FROM, [self.email], diff --git a/src/backend/core/tests/test_models_invitations.py b/src/backend/core/tests/test_models_invitations.py index ea75b583e..03e081043 100644 --- a/src/backend/core/tests/test_models_invitations.py +++ b/src/backend/core/tests/test_models_invitations.py @@ -248,7 +248,9 @@ def test_models_team_invitations_email(): assert len(mail.outbox) == 0 factories.TeamAccessFactory(team=team) - invitation = factories.InvitationFactory(team=team, email="john@people.com") + invitation = factories.InvitationFactory( + team=team, email="john@people.com", issuer__language="fr-fr" + ) # pylint: disable-next=no-member assert len(mail.outbox) == 1 @@ -257,10 +259,10 @@ def test_models_team_invitations_email(): email = mail.outbox[0] assert email.to == [invitation.email] - assert email.subject == "Invitation to join La Régie!" + assert email.subject == "Invitation à rejoindre La Régie!" email_content = " ".join(email.body.split()) - assert "Invitation to join La Régie!" in email_content + assert "Invitation à rejoindre La Régie!" in email_content assert "[//example.com]" in email_content diff --git a/src/backend/locale/fr_FR/LC_MESSAGES/django.mo b/src/backend/locale/fr_FR/LC_MESSAGES/django.mo index a5b7ee5d1afb426d19f8b71f00d28cc4679edb99..c5a31a3d29c1ce1b2f34cc72608d139458bbd9ea 100644 GIT binary patch literal 12272 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