Coverage for src / mesh / tests / roles / test_author.py: 100%
117 statements
« prev ^ index » next coverage.py v7.13.1, created at 2026-08-11 09:47 +0000
« prev ^ index » next coverage.py v7.13.1, created at 2026-08-11 09:47 +0000
1from mesh.models.orm.factories import (
2 ReviewFactory,
3 SubmissionAuthorFactory,
4 SubmissionFactory,
5 SubmissionVersionFactory,
6 UserFactory,
7)
8from mesh.models.orm.review_models import RecommendationValue, Review, ReviewAdditionalFile
9from mesh.models.orm.submission_models import Submission, SubmissionMainFile, SubmissionState
10from mesh.models.orm.user_models import User
11from mesh.models.roles.author import Author
12from mesh.models.submission_status import SubmissionStatus
13from mesh.tests.base_test_case import BaseTestCase
16class AuthorTestCase(BaseTestCase):
17 used_models = [Review, Submission]
18 class_used_models = [User]
20 @classmethod
21 def setUpClass(cls) -> None:
22 super().setUpClass()
23 cls.user_author = UserFactory.create()
24 cls.user_reviewer = UserFactory.create()
26 # def test_always_active(self):
27 # role = Author(self.user_author)
28 # self.assertTrue(role.active)
30 def test_submissions(self):
31 submission_1 = SubmissionFactory.create(created_by=self.user_author)
32 submission_2 = SubmissionFactory.create()
33 submission_3 = SubmissionFactory.create(created_by=self.user_author)
34 role = Author(self.user_author)
36 submissions = role.get_submissions()
37 self.assertEqual(len(submissions), 2)
38 self.assertIn(submission_1, submissions)
39 self.assertIn(submission_3, submissions)
41 role = Author(self.user_author)
42 self.assertTrue(role.can_access_submission(submission_1))
43 self.assertFalse(role.can_access_submission(submission_2))
44 self.assertTrue(role.can_access_submission(submission_3))
46 def test_can_create_version(self):
47 submission = SubmissionFactory.create(created_by=self.user_author, author_agreement=True)
48 role = Author(self.user_author)
49 # New submission without required author
50 self.assertFalse(role.can_create_version(submission))
52 # New submission with 1 author
53 SubmissionAuthorFactory.create(submission=submission)
55 submission = role.get_submissions().get(pk=submission.pk)
56 self.assertTrue(role.can_create_version(submission))
58 # New submission with a 1st version
59 version = SubmissionVersionFactory.create(submission=submission)
60 SubmissionMainFile.objects.create(file=self.dummy_file, attached_to=version)
62 submission = role.get_submissions().get(pk=submission.pk)
63 self.assertFalse(role.can_create_version(submission))
65 # Submitted submission
66 request = self.dummy_request()
67 request.user = self.user_author
68 submission.submit(self.user_author)
70 submission = role.get_submissions().get(pk=submission.pk)
71 self.assertFalse(role.can_create_version(submission))
73 # Under review submission
74 submission.state = SubmissionState.ON_REVIEW.value
75 submission.save()
77 submission = role.get_submissions().get(pk=submission.pk)
78 self.assertFalse(role.can_create_version(submission))
80 # Revisions requested submission
81 submission.state = SubmissionState.REVISION_REQUESTED.value
82 submission.save()
84 submission = role.get_submissions().get(pk=submission.pk)
85 self.assertTrue(role.can_create_version(submission))
86 version.review_open = False
87 version.save()
89 # Revisions requested submission w/ a non-submitted current version
90 version_2 = SubmissionVersionFactory.create(submission=submission)
91 SubmissionMainFile.objects.create(file=self.dummy_file, attached_to=version_2)
93 submission = role.get_submissions().get(pk=submission.pk)
94 self.assertFalse(role.can_create_version(submission))
96 # Revisions submitted submission
97 submission.submit(self.user_author)
99 submission = role.get_submissions().get(pk=submission.pk)
100 self.assertFalse(role.can_create_version(submission))
102 def test_can_access_review(self):
103 role = Author(self.user_author)
105 submission = SubmissionFactory.create(created_by=self.user_author, author_agreement=True)
106 SubmissionAuthorFactory.create(submission=submission)
107 version = SubmissionVersionFactory.create(submission=submission, review_open=True)
108 SubmissionMainFile.objects.create(file=self.dummy_file, attached_to=version)
110 submission = role.get_submissions().get(pk=submission.pk)
111 request = self.dummy_request()
112 request.user = self.user_author
113 submission.submit(self.user_author)
115 submission = role.get_submissions().get(pk=submission.pk)
116 self.assertFalse(role.can_access_reviews(submission.get_current_version()))
118 version.review_open = False
119 version.save()
121 submission = role.get_submissions().get(pk=submission.pk)
122 self.assertTrue(role.can_access_reviews(submission.get_current_version()))
124 review = ReviewFactory.create(
125 reviewer=self.user_reviewer,
126 version=version,
127 accepted=True,
128 recommendation=RecommendationValue.REVISION_REQUESTED.value,
129 )
130 review_file = ReviewAdditionalFile.objects.create(file=self.dummy_file, attached_to=review)
131 self.assertFalse(role.can_access_review(submission, review))
132 self.assertFalse(role.can_access_review_file(review_file))
134 review.submitted = True
135 review.save()
136 review = Review.objects.get(pk=review.pk)
137 self.assertFalse(role.can_access_review_file(review_file))
138 self.assertFalse(role.can_access_review(submission, review))
140 review_file.author_access = True
141 review_file.save()
142 review = Review.objects.get(pk=review.pk)
143 self.assertTrue(role.can_access_review_file(review_file))
144 self.assertTrue(role.can_access_review(submission, review))
146 def test_submission_status(self):
147 """
148 The SubmissionStatus only depends on the submission state for the author role.
149 """
150 submission = SubmissionFactory.create(created_by=self.user_author, author_agreement=True)
151 submission_other = SubmissionFactory.create(author_agreement=True)
152 role = Author(self.user_author)
154 status = role.get_submission_status(submission_other)
155 self.assertEqual(status.status, SubmissionStatus.ERROR)
157 status = role.get_submission_status(submission)
158 self.assertEqual(status.status, SubmissionStatus.TODO)
160 submission.state = SubmissionState.SUBMITTED.value
161 status = role.get_submission_status(submission)
162 self.assertEqual(status.status, SubmissionStatus.WAITING)
164 submission.state = SubmissionState.ON_REVIEW.value
165 status = role.get_submission_status(submission)
166 self.assertEqual(status.status, SubmissionStatus.WAITING)
168 submission.state = SubmissionState.REVISION_REQUESTED.value
169 status = role.get_submission_status(submission)
170 self.assertEqual(status.status, SubmissionStatus.TODO)
172 submission.state = SubmissionState.REVISION_SUBMITTED.value
173 status = role.get_submission_status(submission)
174 self.assertEqual(status.status, SubmissionStatus.WAITING)
176 submission.state = SubmissionState.ACCEPTED.value
177 status = role.get_submission_status(submission)
178 self.assertEqual(status.status, SubmissionStatus.DONE)
180 submission.state = SubmissionState.REJECTED.value
181 status = role.get_submission_status(submission)
182 self.assertEqual(status.status, SubmissionStatus.DONE)