Coverage for src / mesh / tests / workflow / helpers / editor_request_helpers.py: 95%
82 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
3from django.core.files.uploadedfile import SimpleUploadedFile
4from django.urls import reverse
6from mesh.models.orm.review_models import ReviewState
7from mesh.models.orm.submission_models import Submission, SubmissionState
8from mesh.tests.workflow.helpers.base_helpers import (
9 assert_decision_comment,
10 assert_review_state,
11 assert_submission_state,
12 check_submission_detail_page,
13)
15logger = logging.getLogger(__name__)
18def create_reviewer(client, reviewer_profile, expected_status_code=302):
19 response = client.post(reverse("mesh:reviewer_list"), data=reviewer_profile)
20 assert response.status_code == expected_status_code, (
21 f"Error on create reviewer response status code, expected {expected_status_code}, got {response.status_code}"
22 )
25### Editorial decision helpers ###
28def get_reviewer_shortlist_page(client, expected_status_code=200):
29 response = client.get(
30 reverse("mesh:reviewer_list"),
31 )
32 assert response.status_code == expected_status_code, (
33 f"Error on get reviewer shortlist response status code, expected {expected_status_code}, got {response.status_code}"
34 )
37def add_reviewer_to_shortlist(client, reviewer_data, expected_status_code=302):
38 response = client.post(
39 reverse("mesh:reviewer_list"),
40 data=reviewer_data,
41 )
42 assert response.status_code == expected_status_code, (
43 f"Error on add reviewer to shortlist response status code, expected {expected_status_code}, got {response.status_code}"
44 )
47def add_reviewer_to_shortlist_workflow(client, reviewer_data):
48 get_reviewer_shortlist_page(client)
49 add_reviewer_to_shortlist(client, reviewer_data)
52def make_editorial_decision(
53 client,
54 submission_pk,
55 decision="rejected",
56 comment="<p>Some editorial decision comment</p>",
57 additional_files=SimpleUploadedFile("file.pdf", b"%PDF1.3\nfile_contentxxxxxxxxxxx"),
58 expected_status_code=302,
59):
60 """
61 decision in list [accepted, rejected, rev_requested]"""
62 data = {
63 "value": decision,
64 "comment": comment,
65 "additional_files": additional_files,
66 }
67 response = client.post(
68 reverse("mesh:editorial_decision_create", kwargs={"submission_pk": submission_pk}),
69 data=data,
70 )
71 assert response.status_code == expected_status_code, (
72 f"Error on make_editorial_decision response status code, expected {expected_status_code}, got {response.status_code}"
73 )
76def update_editorial_decision(
77 client,
78 submission_pk,
79 version_pk,
80 decision=None,
81 comment="<p>Some editorial decision comment</p>",
82 expected_status_code=302,
83):
84 """
85 decision in list [accepted, rejected, rev_requested]"""
86 response = client.post(
87 reverse(
88 "mesh:editorial_decision_update",
89 kwargs={"submission_pk": submission_pk, "version_pk": version_pk},
90 ),
91 data={"comment": comment},
92 )
93 assert response.status_code == expected_status_code, (
94 f"Error on make_editorial_decision response status code, expected {expected_status_code}, got {response.status_code}"
95 )
98def reject_submission_workflow(client, submission_pk, expected_state=SubmissionState.REJECTED):
99 check_submission_detail_page(client, submission_pk)
100 make_editorial_decision(
101 client,
102 submission_pk=submission_pk,
103 decision=expected_state.value,
104 additional_files=SimpleUploadedFile(
105 "file_reject.pdf", b"%PDF1.3\nfile_contentxxxxxxxxxxx"
106 ),
107 )
108 assert_submission_state(submission_pk=submission_pk, expected_state=expected_state)
109 check_submission_detail_page(client, submission_pk)
112def accept_submission_workflow(client, submission_pk, expected_state=SubmissionState.ACCEPTED):
113 check_submission_detail_page(client, submission_pk)
114 make_editorial_decision(
115 client,
116 submission_pk=submission_pk,
117 decision=expected_state.value,
118 additional_files=SimpleUploadedFile(
119 "file_accept.pdf", b"%PDF1.3\nfile_contentxxxxxxxxxxx"
120 ),
121 )
122 assert_submission_state(submission_pk=submission_pk, expected_state=expected_state)
123 check_submission_detail_page(client, submission_pk)
126def request_revision_workflow(
127 client, submission_pk, expected_state=SubmissionState.REVISION_REQUESTED
128):
129 check_submission_detail_page(client, submission_pk)
130 make_editorial_decision(
131 client,
132 submission_pk=submission_pk,
133 decision="rev_requested",
134 additional_files=SimpleUploadedFile(
135 "file_request.pdf", b"%PDF1.3\nfile_contentxxxxxxxxxxx"
136 ),
137 )
138 assert_submission_state(submission_pk=submission_pk, expected_state=expected_state)
139 check_submission_detail_page(client, submission_pk)
142def edit_revision_workflow(client, submission_pk, expected_state=SubmissionState.REJECTED):
143 check_submission_detail_page(client, submission_pk)
144 make_editorial_decision(
145 client,
146 submission_pk=submission_pk,
147 decision=expected_state.value,
148 additional_files=SimpleUploadedFile("file_2.pdf", b"%PDF1.3\nfile_contentxxxxxxxxxxx"),
149 )
150 version_pk = Submission.objects.get(pk=submission_pk).versions.first().pk
151 get_decision_edit_page(client, submission_pk, version_pk)
152 # Trying to change the decision state should NOT update it
153 update_editorial_decision(
154 client,
155 submission_pk=submission_pk,
156 version_pk=version_pk,
157 decision="rev_requested",
158 comment="I made a typo",
159 )
160 assert_submission_state(submission_pk=submission_pk, expected_state=expected_state)
161 assert_decision_comment(version_pk, "I made a typo")
164### Request revision helpers ###
167def get_request_review_page(client, submission_pk, version_pk, expected_status_code=200):
168 response = client.get(
169 reverse(
170 "mesh:review_create", kwargs={"submission_pk": submission_pk, "version_pk": version_pk}
171 ),
172 )
173 assert response.status_code == expected_status_code, (
174 f"Error on get_request_review_page response status code, expected {expected_status_code}, got {response.status_code}"
175 )
178def get_decision_edit_page(client, submission_pk, version_pk, expected_status_code=200):
179 response = client.get(
180 reverse(
181 "mesh:editorial_decision_update",
182 kwargs={"submission_pk": submission_pk, "version_pk": version_pk},
183 ),
184 )
185 assert response.status_code == expected_status_code, (
186 f"Error on get_request_review_page response status code, expected {expected_status_code}, got {response.status_code}"
187 )
190def remove_reviewer_to_review_shortlist(
191 client, submission_pk, user_pk="1", expected_status_code=200
192):
193 response = client.get(
194 reverse(
195 "mesh:remove_reviewer_from_shortlist", kwargs={"pk": submission_pk, "user_pk": user_pk}
196 ),
197 )
198 assert response.status_code == expected_status_code, (
199 f"Error on remove_reviewer_to_review_shortlist response status code, expected {expected_status_code}, got {response.status_code}"
200 )
203def request_review(client, submission_pk, version_pk, data, expected_status_code=302):
204 response = client.post(
205 reverse(
206 "mesh:review_create", kwargs={"submission_pk": submission_pk, "version_pk": version_pk}
207 ),
208 data=data,
209 )
210 assert response.status_code == expected_status_code, (
211 f"Error on request_review response status code, expected {expected_status_code}, got {response.status_code}"
212 )
215def submission_add_reviewer_to_shortlist(
216 client, submission_pk, user_pk="1", user_type="reviewer", expected_status_code=200
217):
218 response = client.post(
219 reverse(
220 "mesh:submission_add_reviewer_to_shortlist",
221 kwargs={
222 "submission_pk": submission_pk,
223 # "version_pk": version_pk,
224 "user_pk": user_pk,
225 "user_type": user_type,
226 },
227 ),
228 # data=data,
229 )
230 assert response.status_code == expected_status_code, (
231 f"Error on submission_add_reviewer_to_shortlist response status code, expected {expected_status_code}, got {response.status_code}"
232 )
235def request_review_workflow(client, submission_pk, request_review_data):
236 submission = Submission.objects.get(pk=submission_pk)
237 version = submission.versions.last()
238 version_pk = version.pk
240 check_submission_detail_page(client, submission_pk)
241 get_request_review_page(client, submission_pk, version_pk)
242 request_review(client, submission_pk, version_pk, data=request_review_data)
243 assert_review_state(
244 submission_pk=submission_pk, expected_review_state=ReviewState.AWAITING_ACCEPTANCE
245 )
248def request_review_with_shortlist_workflow(
249 client, submission_pk, request_review_data, reviewer_data, user_type="reviewer"
250):
251 """
252 user_type in list ['reviewer', 'user']
253 """
254 submission = Submission.objects.get(pk=submission_pk)
255 version = submission.versions.last()
256 version_pk = version.pk
258 # reviewer_user = get_suggestion(request_review_data[1]['suggested_user']).suggested_user
260 check_submission_detail_page(client, submission_pk)
261 get_request_review_page(client, submission_pk, version_pk)
262 reviewer_user_pk = "1"
263 submission_add_reviewer_to_shortlist(
264 client, submission_pk, user_pk=reviewer_user_pk, user_type=user_type
265 )
266 request_review(client, submission_pk, version_pk, data=request_review_data)
267 assert_review_state(
268 submission_pk=submission_pk, expected_review_state=ReviewState.AWAITING_ACCEPTANCE
269 )