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

1import logging 

2 

3from django.urls import reverse 

4 

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 

11 

12logger = logging.getLogger(__name__) 

13 

14 

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 

20 

21 

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 ) 

29 

30 

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 ) 

41 

42 

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 

46 

47 User = get_user_model() 

48 return User.objects.get(email=email) 

49 

50 

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 ) 

60 

61 

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 ) 

73 

74 

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 ) 

89 

90 

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() 

99 

100 # reviews = Review.objects.filter(version__submission=submission) 

101 

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.") 

108 

109 

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() 

116 

117 # reviews = Review.objects.filter(version__submission=submission) 

118 

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.") 

125 

126 

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 ) 

135 

136 except Submission.DoesNotExist: 

137 raise AssertionError(f"Submission with pk {submission_pk} has no review.") 

138 

139 

140def assert_decision_comment(version_pk, comment: str): 

141 version = SubmissionVersion.objects.get(pk=version_pk) 

142 assert version.editorial_decision.comment == comment 

143 

144 

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]