fix: Fix transient test failures due to i18n names (#4695)

* Search for escaped name in HTML output

* Need to check for `plain_name()` in sent emails

* Normalize i18n Unicode names in the same way the database does
This commit is contained in:
Lars Eggert 2022-11-06 12:29:49 +00:00 committed by GitHub
parent 331bf8d2dc
commit d16a9e77a7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 9 additions and 7 deletions

View file

@ -414,7 +414,7 @@ class ReviewTests(TestCase):
login_testing_unauthorized(self, "reviewsecretary", reject_url)
r = self.client.get(reject_url)
self.assertEqual(r.status_code, 200)
self.assertContains(r, assignment.reviewer.person.name)
self.assertContains(r, escape(assignment.reviewer.person.name))
self.assertNotContains(r, 'can not be rejected')
self.assertContains(r, '<button type="submit"')
@ -442,7 +442,7 @@ class ReviewTests(TestCase):
r = self.client.get(reject_url)
self.assertEqual(r.status_code, 200)
self.assertContains(r, assignment.reviewer.person.name)
self.assertContains(r, escape(assignment.reviewer.person.name))
self.assertContains(r, 'can not be rejected')
self.assertNotContains(r, '<button type="submit"')
@ -1154,4 +1154,4 @@ class ReviewTests(TestCase):
ReviewWish.objects.create(person=reviewer, doc=doc, team=team)
r = self.client.post(url + '?next=http://example.com')
self.assertRedirects(r, doc.get_absolute_url(), fetch_redirect_response=False)
self.assertFalse(ReviewWish.objects.all())
self.assertFalse(ReviewWish.objects.all())

View file

@ -11,6 +11,7 @@ import random
import shutil
from unidecode import unidecode
from unicodedata import normalize
from django.conf import settings
from django.contrib.auth.models import User
@ -47,8 +48,9 @@ class UserFactory(factory.django.DjangoModelFactory):
exclude = ['faker', ]
faker = factory.LazyFunction(random_faker)
first_name = factory.LazyAttribute(lambda o: o.faker.first_name())
last_name = factory.LazyAttribute(lambda o: o.faker.last_name())
# normalize these i18n Unicode strings in the same way the database does
first_name = factory.LazyAttribute(lambda o: normalize("NFKC", o.faker.first_name()))
last_name = factory.LazyAttribute(lambda o: normalize("NFKC", o.faker.last_name()))
email = factory.LazyAttributeSequence(lambda u, n: '%s.%s_%d@%s'%( slugify(unidecode(u.first_name)),
slugify(unidecode(u.last_name)), n, fake.domain_name())) # type: ignore
username = factory.LazyAttribute(lambda u: u.email)

View file

@ -384,10 +384,10 @@ class ReviewAssignmentReminderTests(TestCase):
self.assertTrue(self.reviewer.email_address() in outbox[0]["To"])
self.assertTrue(secretary.person.email_address() in outbox[0]["To"])
message = get_payload_text(outbox[0])
self.assertTrue(self.reviewer.name in message)
self.assertTrue(self.reviewer.plain_name() in message)
self.assertTrue(self.team.acronym in message)
self.assertEqual(len(log), 1)
self.assertTrue(self.reviewer.name in log[0])
self.assertTrue(self.reviewer.plain_name() in log[0])
self.assertTrue(self.team.acronym in log[0])
def test_send_review_reminder_overdue_assignment(self):