Coverage for src / mesh / tests / workflow / helpers / base_helpers.py: 81%
85 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.urls import reverse
5from mesh.models import SubmissionVersion
6from mesh.models.orm.review_models import RecommendationValue, Review, ReviewState
7from mesh.models.orm.submission_models import Submission, SubmissionMainFile, SubmissionState
8from mesh.models.orm.user_models import User
9from mesh.models.submission_status import SubmissionStatus
10from mesh.views.middlewares.role import ROLES_ORDER, get_user_role
12logger = logging.getLogger(__name__)
15def get_version_pk(submission_pk):
16 submission = Submission.objects.get(pk=submission_pk)
17 version = submission.versions.last()
18 version_pk = version.pk
19 return version_pk
22def check_submission_detail_page(client, submission_pk, expected_status_code=200):
23 response = client.get(
24 reverse("mesh:submission_details", kwargs={"submission_pk": submission_pk})
25 )
26 assert response.status_code == expected_status_code, (
27 f"Error on check submittion detail page response status code, expected {expected_status_code}, got {response.status_code}"
28 )
31def check_revision_detail_page(client, submission_pk, version_pk, expected_status_code=200):
32 response = client.get(
33 reverse(
34 "mesh:editorial_decision_update",
35 kwargs={"submission_pk": submission_pk, "version_pk": version_pk},
36 )
37 )
38 assert response.status_code == expected_status_code, (
39 f"Error on check submittion detail page response status code, expected {expected_status_code}, got {response.status_code}"
40 )
43def get_reviewer_user(email):
44 """Récupère le User reviewer créé après request_review_workflow"""
45 from django.contrib.auth import get_user_model
47 User = get_user_model()
48 return User.objects.get(email=email)
51def assert_submission_state(submission_pk, expected_state: SubmissionState):
52 try:
53 submission = Submission.objects.get(pk=submission_pk)
54 except Submission.DoesNotExist:
55 raise AssertionError(f"Submission with pk {submission_pk} does not exist.")
56 actual_state = submission.state
57 assert actual_state == expected_state.value, (
58 f"Expected submission state '{expected_state.value}', but got '{actual_state}' for submission with pk {submission_pk}."
59 )
62def assert_submission_status(user: User, submission_pk, expected_status: SubmissionStatus):
63 role_dict = {RoleClass: RoleClass(user) for RoleClass in ROLES_ORDER}
64 role = get_user_role(user, role_dict)
65 try:
66 submission = role.get_submissions().get(pk=submission_pk)
67 except Submission.DoesNotExist:
68 raise AssertionError(f"Submission with pk {submission_pk} does not exist.")
69 submission_status = role.get_submission_status(submission=submission).status
70 assert submission_status == expected_status, (
71 f"Expected submission state '{expected_status.value}', but got '{submission_status.value}' for user {user.email} submission with pk {submission_pk}."
72 )
75def assert_version_main_file(submission_pk, expected_name="revue_episciences.pdf"):
76 try:
77 submission = Submission.objects.get(pk=submission_pk)
78 submission_main_file = getattr(submission.versions.first(), "main_file", None)
79 if submission_main_file is not None:
80 assert submission_main_file.name == expected_name, (
81 f"Expected main file name '{expected_name}', but got '{submission_main_file.name}' for submission with pk {submission_pk}."
82 )
83 except Submission.DoesNotExist:
84 raise AssertionError(f"Submission with pk {submission_pk} does not exist.")
85 except SubmissionMainFile.DoesNotExist:
86 raise AssertionError(
87 f"Submission main file not found for submission with pk {submission_pk}."
88 )
91def assert_review_recommendation(
92 submission_pk, expected_review_recommendation: RecommendationValue
93):
94 try:
95 submission = Submission.objects.get(pk=submission_pk)
96 version = submission.versions.last()
97 reviews = version.reviews.all()
98 review = reviews.get()
100 # reviews = Review.objects.filter(version__submission=submission)
102 actual_review_recommendation = review.recommendation
103 assert actual_review_recommendation == expected_review_recommendation.value, (
104 f"Expected review recommendation '{expected_review_recommendation.value}', but got '{actual_review_recommendation}' for submission with pk {submission_pk}."
105 )
106 except Submission.DoesNotExist:
107 raise AssertionError(f"Submission with pk {submission_pk} has no review.")
110def assert_review_state(submission_pk, expected_review_state: ReviewState):
111 try:
112 submission = Submission.objects.get(pk=submission_pk)
113 version = submission.versions.last()
114 reviews = version.reviews.all()
115 review = reviews.get()
117 # reviews = Review.objects.filter(version__submission=submission)
119 actual_review_state = review.state
120 assert actual_review_state == expected_review_state.value, (
121 f"Expected review request state '{expected_review_state.value}', but got '{actual_review_state}' for submission with pk {submission_pk}."
122 )
123 except Submission.DoesNotExist:
124 raise AssertionError(f"Submission with pk {submission_pk} has no review.")
127def assert_round_number(submission_pk, expected_round_number):
128 try:
129 submission = Submission.objects.get(pk=submission_pk)
130 versions = submission.versions.all()
131 round_nb = len(versions)
132 assert round_nb == expected_round_number, (
133 f"Expected round number '{expected_round_number}', but got '{round_nb}' for submission with pk {submission_pk}."
134 )
136 except Submission.DoesNotExist:
137 raise AssertionError(f"Submission with pk {submission_pk} has no review.")
140def assert_decision_comment(version_pk, comment: str):
141 version = SubmissionVersion.objects.get(pk=version_pk)
142 assert version.editorial_decision.comment == comment
145def get_review(submission_pk):
146 submission = Submission.objects.get(pk=submission_pk)
147 version_pk = submission.versions.first().pk
148 return Review.objects.filter(version=version_pk)[0]