Coverage for src/mesh/tests/roles/test_author.py: 100%
120 statements
« prev ^ index » next coverage.py v7.9.0, created at 2026-02-04 09:42 +0000
« prev ^ index » next coverage.py v7.9.0, created at 2026-02-04 09:42 +0000
1from mesh.model.roles.author import Author, AuthorRights
3from ...model.submission_status import SubmissionStatus
4from ...models.factories import (
5 ReviewFactory,
6 SubmissionAuthorFactory,
7 SubmissionFactory,
8 SubmissionVersionFactory,
9 UserFactory,
10)
11from ...models.review_models import RecommendationValue, Review, ReviewAdditionalFile
12from ...models.submission_models import Submission, SubmissionMainFile, SubmissionState
13from ...models.user_models import User
14from ..base_test_case import BaseTestCase
17class AuthorTestCase(BaseTestCase):
18 used_models = [Review, Submission]
19 class_used_models = [User]
21 @classmethod
22 def setUpClass(cls) -> None:
23 super().setUpClass()
24 cls.user_author = UserFactory.create()
25 cls.user_reviewer = UserFactory.create()
27 def test_always_active(self):
28 author = Author(self.user_author)
29 self.assertTrue(author.active)
31 def test_submissions(self):
32 submission_1 = SubmissionFactory.create(created_by=self.user_author)
33 submission_2 = SubmissionFactory.create()
34 submission_3 = SubmissionFactory.create(created_by=self.user_author)
35 author = Author(self.user_author)
37 submissions = author.rights.submissions
38 self.assertEqual(len(submissions), 2)
39 self.assertIn(submission_1, submissions)
40 self.assertIn(submission_3, submissions)
42 rights = author.rights
43 self.assertTrue(rights.can_access_submission(submission_1))
44 self.assertFalse(rights.can_access_submission(submission_2))
45 self.assertTrue(rights.can_access_submission(submission_3))
47 def test_can_create_version(self):
48 submission = SubmissionFactory.create(created_by=self.user_author, author_agreement=True)
49 rights = AuthorRights(self.user_author)
51 # New submission without required author
52 self.assertFalse(rights.can_create_version(submission))
54 # New submission with 1 author
55 SubmissionAuthorFactory.create(submission=submission)
56 submission = Submission.objects.get(pk=submission.pk)
57 self.assertTrue(rights.can_create_version(submission))
59 # New submission with a 1st version
60 version = SubmissionVersionFactory.create(submission=submission)
61 SubmissionMainFile.objects.create(file=self.dummy_file, attached_to=version)
62 submission = Submission.objects.get(pk=submission.pk)
63 self.assertFalse(rights.can_create_version(submission))
65 # Submitted submission
66 request = self.dummy_request()
67 request.user = self.user_author
68 submission.submit(self.user_author)
69 submission = Submission.objects.get(pk=submission.pk)
70 self.assertFalse(rights.can_create_version(submission))
72 # Under review submission
73 submission.state = SubmissionState.ON_REVIEW.value
74 submission.save()
75 submission = Submission.objects.get(pk=submission.pk)
76 self.assertFalse(rights.can_create_version(submission))
78 # Revisions requested submission
79 submission.state = SubmissionState.REVISION_REQUESTED.value
80 submission.save()
81 submission = Submission.objects.get(pk=submission.pk)
82 self.assertTrue(rights.can_create_version(submission))
83 version.review_open = False
84 version.save()
86 # Revisions requested submission w/ a non-submitted current version
87 version_2 = SubmissionVersionFactory.create(submission=submission)
88 SubmissionMainFile.objects.create(file=self.dummy_file, attached_to=version_2)
89 submission = Submission.objects.get(pk=submission.pk)
90 self.assertFalse(rights.can_create_version(submission))
92 # Revisions submitted submission
93 submission.submit(self.user_author)
94 submission = Submission.objects.get(pk=submission.pk)
95 self.assertFalse(rights.can_create_version(submission))
97 def test_can_access_review(self):
98 submission = SubmissionFactory.create(created_by=self.user_author, author_agreement=True)
99 SubmissionAuthorFactory.create(submission=submission)
100 version = SubmissionVersionFactory.create(submission=submission, review_open=True)
101 SubmissionMainFile.objects.create(file=self.dummy_file, attached_to=version)
102 submission = Submission.objects.get(pk=submission.pk)
103 request = self.dummy_request()
104 request.user = self.user_author
105 submission.submit(self.user_author)
107 rights = AuthorRights(self.user_author)
109 submission = Submission.objects.get(pk=submission.pk)
110 self.assertFalse(rights.can_access_reviews(submission.current_version)) # type:ignore
112 version.review_open = False
113 version.save()
115 submission = Submission.objects.get(pk=submission.pk)
116 self.assertTrue(rights.can_access_reviews(submission.current_version)) # type:ignore
118 review = ReviewFactory.create(
119 reviewer=self.user_reviewer,
120 version=version,
121 accepted=True,
122 recommendation=RecommendationValue.REVISION_REQUESTED.value,
123 )
124 review_file = ReviewAdditionalFile.objects.create(file=self.dummy_file, attached_to=review)
125 self.assertFalse(rights.can_access_review(review))
126 self.assertFalse(rights.can_access_review_file(review_file))
128 review.submitted = True
129 review.save()
130 review = Review.objects.get(pk=review.pk)
131 self.assertFalse(rights.can_access_review_file(review_file))
132 self.assertFalse(rights.can_access_review(review))
134 review_file.author_access = True
135 review_file.save()
136 review = Review.objects.get(pk=review.pk)
137 self.assertTrue(rights.can_access_review_file(review_file))
138 self.assertTrue(rights.can_access_review(review))
140 def test_submission_status(self):
141 """
142 The SubmissionStatus only depends on the submission state for the author role.
143 """
144 submission = SubmissionFactory.create(created_by=self.user_author, author_agreement=True)
145 submission_other = SubmissionFactory.create(author_agreement=True)
146 rights = AuthorRights(self.user_author)
148 status = rights.get_submission_status(submission_other)
149 self.assertEqual(status.status, SubmissionStatus.ERROR)
151 status = rights.get_submission_status(submission)
152 self.assertEqual(status.status, SubmissionStatus.TODO)
154 submission.state = SubmissionState.SUBMITTED.value
155 status = rights.get_submission_status(submission)
156 self.assertEqual(status.status, SubmissionStatus.WAITING)
158 submission.state = SubmissionState.ON_REVIEW.value
159 status = rights.get_submission_status(submission)
160 self.assertEqual(status.status, SubmissionStatus.WAITING)
162 submission.state = SubmissionState.REVISION_REQUESTED.value
163 status = rights.get_submission_status(submission)
164 self.assertEqual(status.status, SubmissionStatus.TODO)
166 submission.state = SubmissionState.REVISION_SUBMITTED.value
167 status = rights.get_submission_status(submission)
168 self.assertEqual(status.status, SubmissionStatus.WAITING)
170 submission.state = SubmissionState.ACCEPTED.value
171 status = rights.get_submission_status(submission)
172 self.assertEqual(status.status, SubmissionStatus.DONE)
174 submission.state = SubmissionState.REJECTED.value
175 status = rights.get_submission_status(submission)
176 self.assertEqual(status.status, SubmissionStatus.DONE)