@@ -191,6 +191,99 @@ def test_grants_review_scores(rf, scores, avg):
191191 assert grant_to_check .score == avg
192192
193193
194+ @pytest .mark .parametrize (
195+ "scores, expected_score_range" ,
196+ [
197+ # Multiple different scores: range = max - min = 2 - (-2) = 4
198+ (
199+ [
200+ {"user" : 0 , "score" : 2 },
201+ {"user" : 1 , "score" : 2 },
202+ {"user" : 2 , "score" : 2 },
203+ {"user" : 3 , "score" : - 1 },
204+ {"user" : 4 , "score" : - 2 },
205+ ],
206+ 4.0 ,
207+ ),
208+ # All same scores: range = -2 - (-2) = 0
209+ (
210+ [
211+ {"user" : 0 , "score" : - 2 },
212+ {"user" : 1 , "score" : - 2 },
213+ {"user" : 2 , "score" : - 2 },
214+ {"user" : 3 , "score" : - 2 },
215+ {"user" : 4 , "score" : - 2 },
216+ ],
217+ 0.0 ,
218+ ),
219+ # Single score: range = 1 - 1 = 0
220+ (
221+ [
222+ {"user" : 0 , "score" : 1 },
223+ ],
224+ 0.0 ,
225+ ),
226+ # No scores: range = None
227+ ([], None ),
228+ # Two different scores: range = 1 - (-1) = 2
229+ (
230+ [
231+ {"user" : 0 , "score" : 1 },
232+ {"user" : 1 , "score" : - 1 },
233+ ],
234+ 2.0 ,
235+ ),
236+ ],
237+ )
238+ def test_grants_review_score_range (rf , scores , expected_score_range ):
239+ conference = ConferenceFactory ()
240+ review_session = ReviewSessionFactory (
241+ conference = conference ,
242+ session_type = ReviewSession .SessionType .GRANTS ,
243+ status = ReviewSession .Status .COMPLETED ,
244+ )
245+
246+ users = UserFactory .create_batch (10 , is_staff = True , is_superuser = True )
247+ all_scores = {
248+ - 2 : AvailableScoreOptionFactory (
249+ review_session = review_session , numeric_value = - 2 , label = "Rejected"
250+ ),
251+ - 1 : AvailableScoreOptionFactory (
252+ review_session = review_session , numeric_value = - 1 , label = "Not convinced"
253+ ),
254+ 0 : AvailableScoreOptionFactory (
255+ review_session = review_session , numeric_value = 0 , label = "Maybe"
256+ ),
257+ 1 : AvailableScoreOptionFactory (
258+ review_session = review_session , numeric_value = 1 , label = "Yes"
259+ ),
260+ 2 : AvailableScoreOptionFactory (
261+ review_session = review_session , numeric_value = 2 , label = "Absolutely"
262+ ),
263+ }
264+
265+ grant = GrantFactory (conference = conference )
266+ for score in scores :
267+ UserReviewFactory (
268+ review_session = review_session ,
269+ grant = grant ,
270+ user = users [score ["user" ]],
271+ score = all_scores [score ["score" ]],
272+ )
273+
274+ request = rf .get ("/" )
275+ request .user = users [5 ]
276+
277+ admin = ReviewSessionAdmin (ReviewSession , AdminSite ())
278+ response = admin ._review_grants_recap_view (request , review_session )
279+ context_data = response .context_data
280+ items = context_data ["items" ]
281+ grant_to_check = next (item for item in items if item .id == grant .id )
282+
283+ assert grant_to_check .id == grant .id
284+ assert grant_to_check .score_range == expected_score_range
285+
286+
194287def test_review_start_view_when_no_items_are_left (rf , mocker ):
195288 mock_messages = mocker .patch ("reviews.admin.messages" )
196289
0 commit comments