🐛(backend) fix flaky test with team access #646

Faker sometimes creates users whose name starts with "Ms." or "Mr."
The implemented test code computed the order without handling
these cases and failed.
This commit is contained in:
Sabrina Demagny
2025-01-17 09:54:55 +01:00
parent 0a795f6e6f
commit cd7135da00
2 changed files with 19 additions and 16 deletions

View File

@@ -17,6 +17,7 @@ and this project adheres to
### Fixed
- 🐛(backend) fix flaky test with team access #646
- 🧑‍💻(dimail) remove 'NoneType: None' log in debug mode
- 🐛(frontend) fix flaky e2e test #636
- 🐛(frontend) fix disable mailbox button display #631

View File

@@ -338,14 +338,19 @@ def test_api_team_accesses_list_authenticated_ordering():
def test_api_team_accesses_list_authenticated_ordering_user(ordering_field):
"""Team accesses can be ordered by user's fields."""
user = factories.UserFactory()
john = factories.UserFactory(email="john.doe@example.com", name="John Doe")
team = factories.TeamFactory()
models.TeamAccess.objects.create(team=team, user=user)
models.TeamAccess.objects.create(team=team, user=john)
# create 20 new team members
for _ in range(20):
extra_user = factories.UserFactory()
factories.TeamAccessFactory(team=team, user=extra_user)
# create new team members
dave = factories.UserFactory(email="bowbow@example.com", name="David Bowman")
nicole = factories.UserFactory(
email="nicole_foole@example.com", name="Nicole Foole"
)
frank = factories.UserFactory(email="frank_poole@example.com", name="Frank Poole")
mary = factories.UserFactory(email="mary_pol@example.com", name="Mary Pol")
for user in (dave, nicole, frank, mary):
factories.TeamAccessFactory(team=team, user=user)
client = APIClient()
client.force_login(user)
@@ -354,14 +359,11 @@ def test_api_team_accesses_list_authenticated_ordering_user(ordering_field):
f"/api/v1.0/teams/{team.id!s}/accesses/?ordering=user__{ordering_field}",
)
assert response.status_code == HTTP_200_OK
assert response.json()["count"] == 21
def normalize(x):
"""Mimic Django order_by, which is case-insensitive and space-insensitive"""
return x.casefold().replace(" ", "")
results = [
team_access["user"][ordering_field]
for team_access in response.json()["results"]
assert response.json()["count"] == 5
assert [access["user"]["name"] for access in response.json()["results"]] == [
dave.name,
frank.name,
john.name,
mary.name,
nicole.name,
]
assert sorted(results, key=normalize) == results