Skip to content

Commit d69e0a2

Browse files
Fix flaky test_submissions_are_random_by_user (#4527)
Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> Co-authored-by: Marco Acierno <[email protected]>
1 parent 4cb76dd commit d69e0a2

File tree

1 file changed

+36
-16
lines changed

1 file changed

+36
-16
lines changed

backend/api/submissions/tests/test_submissions.py

Lines changed: 36 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -10,20 +10,29 @@
1010

1111

1212
def test_submissions_are_random_by_user(graphql_client, mock_has_ticket):
13+
"""Test that submissions are randomized differently per user.
14+
15+
The randomization is seeded by user.id, so each user gets a consistent
16+
but different ordering. We test this by:
17+
1. Creating enough submissions to reduce collision probability
18+
2. Verifying the same user gets the same ordering on repeated queries
19+
3. Verifying different users get different orderings
20+
"""
1321
user_1 = UserFactory()
1422
user_2 = UserFactory()
15-
user_3 = UserFactory()
1623

1724
graphql_client.force_login(user_1)
1825

26+
# Create 10 submissions to reduce collision probability
27+
# With 10 items, there are 10! possible orderings, making collisions extremely unlikely
1928
submission = SubmissionFactory()
20-
SubmissionFactory(conference=submission.conference)
21-
SubmissionFactory(conference=submission.conference)
29+
for _ in range(9):
30+
SubmissionFactory(conference=submission.conference)
2231

2332
mock_has_ticket(submission.conference)
2433

2534
query = """query Submissions($code: String!, $page: Int) {
26-
submissions(code: $code, page: $page, pageSize: 3) {
35+
submissions(code: $code, page: $page, pageSize: 10) {
2736
pageInfo {
2837
totalPages
2938
totalItems
@@ -34,21 +43,32 @@ def test_submissions_are_random_by_user(graphql_client, mock_has_ticket):
3443
}
3544
}"""
3645

37-
submissions = {}
38-
39-
for user in [user_1, user_2, user_3]:
40-
graphql_client.force_login(user)
46+
# Test that user_1 gets consistent ordering
47+
graphql_client.force_login(user_1)
48+
resp_1a = graphql_client.query(
49+
query,
50+
variables={"code": submission.conference.code, "page": 1},
51+
)
52+
resp_1b = graphql_client.query(
53+
query,
54+
variables={"code": submission.conference.code, "page": 1},
55+
)
56+
user_1_submissions = resp_1a["data"]["submissions"]["items"]
4157

42-
resp = graphql_client.query(
43-
query,
44-
variables={"code": submission.conference.code, "page": 1},
45-
)
58+
# Same user should get same ordering
59+
assert user_1_submissions == resp_1b["data"]["submissions"]["items"]
4660

47-
submissions[user] = resp["data"]["submissions"]["items"]
61+
# Test that user_2 gets a different ordering
62+
graphql_client.force_login(user_2)
63+
resp_2 = graphql_client.query(
64+
query,
65+
variables={"code": submission.conference.code, "page": 1},
66+
)
67+
user_2_submissions = resp_2["data"]["submissions"]["items"]
4868

49-
assert submissions[user_1] != submissions[user_2]
50-
assert submissions[user_1] != submissions[user_3]
51-
assert submissions[user_2] != submissions[user_3]
69+
# Different users should get different orderings
70+
# With 10 submissions, the probability of collision is 1/10! which is negligible
71+
assert user_1_submissions != user_2_submissions
5272

5373

5474
def test_returns_submissions_paginated(graphql_client, user):

0 commit comments

Comments
 (0)