Coverage for src / mesh / tests / workflow / helpers / reviewer_request_helpers.py: 96%
97 statements
« prev ^ index » next coverage.py v7.13.1, created at 2026-05-04 12:41 +0000
« prev ^ index » next coverage.py v7.13.1, created at 2026-05-04 12:41 +0000
1import logging
2from typing import TYPE_CHECKING
4from django.urls import reverse
6from mesh.models.orm.review_models import RecommendationValue, ReviewState
7from mesh.models.submission_status import SubmissionStatus
8from mesh.tests.workflow.helpers.base_helpers import (
9 assert_review_recommendation,
10 assert_review_state,
11 assert_submission_status,
12 check_submission_detail_page,
13 get_review,
14 get_reviewer_user,
15)
17if TYPE_CHECKING:
18 from mesh.models.review_models import Review
19logger = logging.getLogger(__name__)
22def get_submission_page_with_token(client, token_url, expected_status_code=302):
23 response = client.get(token_url)
24 assert response.status_code == expected_status_code, (
25 f"Error on get_submission_page_with_token response status code, expected {expected_status_code}, got {response.status_code}"
26 )
29def access_decline_review_page(client, review: "Review", expected_status_code=200):
30 response = client.get(
31 reverse(
32 "mesh:review_decline",
33 kwargs={
34 "submission_pk": review.version.submission.pk,
35 "version_pk": review.version.pk,
36 "review_pk": review.pk,
37 },
38 ),
39 )
40 assert response.status_code == expected_status_code, (
41 f"Error on access_decline_review_page response status code, expected {expected_status_code}, got {response.status_code}"
42 )
45def decline_review(
46 client,
47 review: "Review",
48 decline_comment="No thanks",
49 reviewer_profile=None,
50 expected_status_code=302,
51):
52 response = client.post(
53 reverse(
54 "mesh:review_decline",
55 kwargs={
56 "submission_pk": review.version.submission.pk,
57 "version_pk": review.version.pk,
58 "review_pk": review.pk,
59 },
60 ),
61 data={"accept_comment": decline_comment},
62 )
63 assert response.status_code == expected_status_code, (
64 f"Error on decline_review response status code, expected {expected_status_code}, got {response.status_code}"
65 )
68def access_accept_review_page(client, review: "Review", expected_status_code=200):
69 response = client.get(
70 reverse(
71 "mesh:review_accept",
72 kwargs={
73 "submission_pk": review.version.submission.pk,
74 "version_pk": review.version.pk,
75 "review_pk": review.pk,
76 },
77 ),
78 )
79 assert response.status_code == expected_status_code, (
80 f"Error on access_accept_review_page response status code, expected {expected_status_code}, got {response.status_code}"
81 )
84def accept_review(
85 client, review: "Review", comment="Challenge accepted", expected_status_code=302
86):
87 response = client.post(
88 reverse(
89 "mesh:review_accept",
90 kwargs={
91 "submission_pk": review.version.submission.pk,
92 "version_pk": review.version.pk,
93 "review_pk": review.pk,
94 },
95 ),
96 data={"accept_comment": comment},
97 )
98 assert response.status_code == expected_status_code, (
99 f"Error on accept_review response status code, expected {expected_status_code}, got {response.status_code}"
100 )
103def accept_review_invite_with_token_workflow(client, submission_pk, token_url):
104 get_submission_page_with_token(client, token_url)
105 review = get_review(submission_pk)
106 access_accept_review_page(client, review)
107 accept_review(client, review)
108 assert_review_state(submission_pk=submission_pk, expected_review_state=ReviewState.PENDING)
111def decline_review_invite_with_token_workflow(client, submission_pk, token_url, reviewer_profile):
112 get_submission_page_with_token(client, token_url)
113 review = get_review(submission_pk)
114 access_decline_review_page(client, review)
115 decline_review(client, review, reviewer_profile=reviewer_profile)
116 assert_review_state(submission_pk=submission_pk, expected_review_state=ReviewState.DECLINED)
119def accept_review_invite_workflow(client, submission_pk):
120 review = get_review(submission_pk)
121 access_accept_review_page(client, review)
122 accept_review(client, review)
123 assert_review_state(submission_pk=submission_pk, expected_review_state=ReviewState.PENDING)
126def get_review_update_page(client, review: "Review", expected_status_code=200):
127 response = client.get(
128 reverse(
129 "mesh:review_update",
130 kwargs={
131 "submission_pk": review.version.submission.pk,
132 "version_pk": review.version.pk,
133 "review_pk": review.pk,
134 },
135 ),
136 )
137 assert response.status_code == expected_status_code, (
138 f"Error on get_review_update_page response status code, expected {expected_status_code}, got {response.status_code}"
139 )
142def make_review(
143 client,
144 review: "Review",
145 recommendation,
146 comment="Some review comment",
147 expected_status_code=302,
148):
149 response = client.post(
150 reverse(
151 "mesh:review_update",
152 kwargs={
153 "submission_pk": review.version.submission.pk,
154 "version_pk": review.version.pk,
155 "review_pk": review.pk,
156 },
157 ),
158 data={
159 "recommendation": recommendation,
160 "comment": comment,
161 },
162 )
163 assert response.status_code == expected_status_code, (
164 f"Error on make_review response status code, expected {expected_status_code}, got {response.status_code}"
165 )
168def confirm_review(client, review: "Review", confirm="on", expected_status_code=302):
169 response = client.post(
170 reverse(
171 "mesh:review_confirm",
172 kwargs={
173 "submission_pk": review.version.submission.pk,
174 "version_pk": review.version.pk,
175 "review_pk": review.pk,
176 },
177 ),
178 data={
179 "confirm": confirm,
180 },
181 )
182 assert response.status_code == expected_status_code, (
183 f"Error on confirm_review response status code, expected {expected_status_code}, got {response.status_code}"
184 )
187def access_review_details(client, review, expected_status_code=200):
188 response = client.get(
189 reverse(
190 "mesh:review_details",
191 kwargs={
192 "submission_pk": review.version.submission.pk,
193 "version_pk": review.version.pk,
194 "review_pk": review.pk,
195 },
196 ),
197 )
198 assert response.status_code == expected_status_code, (
199 f"Error on confirm_review response status code, expected {expected_status_code}, got {response.status_code}"
200 )
203def recommend_accept_submission_workflow(client, submission_pk, reviewer_email):
204 check_submission_detail_page(client, submission_pk)
206 reviewer_user = get_reviewer_user(reviewer_email)
207 assert_submission_status(
208 reviewer_user,
209 submission_pk=submission_pk,
210 expected_status=SubmissionStatus.TODO,
211 )
212 review = get_review(submission_pk)
214 get_review_update_page(client, review)
215 # status : todo
216 make_review(client, review, recommendation="accepted")
217 confirm_review(client, review)
218 # status : done
219 assert_review_recommendation(
220 submission_pk, expected_review_recommendation=RecommendationValue.ACCEPTED
221 )
222 assert_review_state(submission_pk=submission_pk, expected_review_state=ReviewState.SUBMITTED)
223 assert_submission_status(
224 reviewer_user,
225 submission_pk=submission_pk,
226 expected_status=SubmissionStatus.WAITING,
227 )
230def recommend_reject_submission_workflow(client, submission_pk, reviewer_email):
231 check_submission_detail_page(client, submission_pk)
232 reviewer_user = get_reviewer_user(reviewer_email)
233 assert_submission_status(
234 reviewer_user,
235 submission_pk=submission_pk,
236 expected_status=SubmissionStatus.TODO,
237 )
238 review = get_review(submission_pk)
239 get_review_update_page(client, review)
240 make_review(client, review, recommendation="rejected")
241 confirm_review(client, review)
242 assert_review_recommendation(
243 submission_pk, expected_review_recommendation=RecommendationValue.REJECTED
244 )
245 assert_review_state(submission_pk=submission_pk, expected_review_state=ReviewState.SUBMITTED)
246 assert_submission_status(
247 user=reviewer_user,
248 submission_pk=submission_pk,
249 expected_status=SubmissionStatus.WAITING,
250 )
253def recommend_revision_workflow(client, submission_pk, reviewer_email):
254 check_submission_detail_page(client, submission_pk)
255 reviewer_user = get_reviewer_user(reviewer_email)
256 assert_submission_status(
257 user=reviewer_user,
258 submission_pk=submission_pk,
259 expected_status=SubmissionStatus.TODO,
260 )
261 review = get_review(submission_pk)
262 get_review_update_page(client, review)
263 make_review(client, review, recommendation="rev_requested")
264 confirm_review(client, review)
265 assert_review_recommendation(
266 submission_pk, expected_review_recommendation=RecommendationValue.REVISION_REQUESTED
267 )
268 assert_review_state(submission_pk=submission_pk, expected_review_state=ReviewState.SUBMITTED)
269 assert_submission_status(
270 reviewer_user,
271 submission_pk=submission_pk,
272 expected_status=SubmissionStatus.WAITING,
273 )
275 return review
278def recommend_resubmission_workflow(client, submission_pk, reviewer_email):
279 check_submission_detail_page(client, submission_pk)
280 reviewer_user = get_reviewer_user(reviewer_email)
282 assert_submission_status(
283 reviewer_user,
284 submission_pk=submission_pk,
285 expected_status=SubmissionStatus.TODO,
286 )
287 review = get_review(submission_pk)
288 get_review_update_page(client, review)
289 make_review(client, review, recommendation="resubmit")
290 confirm_review(client, review)
291 assert_review_recommendation(
292 submission_pk, expected_review_recommendation=RecommendationValue.RESUBMIT_SOMEWHERE_ELSE
293 )
294 assert_review_state(submission_pk=submission_pk, expected_review_state=ReviewState.SUBMITTED)
295 reviewer_user = get_reviewer_user(reviewer_email)
296 assert_submission_status(
297 reviewer_user,
298 submission_pk=submission_pk,
299 expected_status=SubmissionStatus.WAITING,
300 )