1010
1111
1212def 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
5474def test_returns_submissions_paginated (graphql_client , user ):
0 commit comments