Skip to content

Commit fbcc395

Browse files
Add test for grants review score_range annotation
Test covers score_range calculation including: - Multiple different scores (max-min range) - All same scores (zero range) - Single score (zero range) - No scores (None) - Two different scores Co-authored-by: Ester Beltrami <estyxx@users.noreply.github.com>
1 parent 5af7a88 commit fbcc395

1 file changed

Lines changed: 93 additions & 0 deletions

File tree

backend/reviews/tests/test_admin.py

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
194287
def test_review_start_view_when_no_items_are_left(rf, mocker):
195288
mock_messages = mocker.patch("reviews.admin.messages")
196289

0 commit comments

Comments
 (0)