|
23 | 23 |
|
24 | 24 | from ietf.doc.factories import ( NewRevisionDocEventFactory, IndividualDraftFactory, WgDraftFactory, |
25 | 25 | WgRfcFactory, ReviewFactory, DocumentFactory) |
26 | | -from ietf.doc.models import ( DocumentAuthor, RelatedDocument, DocEvent, ReviewRequestDocEvent, |
| 26 | +from ietf.doc.models import ( Document, DocumentAuthor, RelatedDocument, DocEvent, ReviewRequestDocEvent, |
27 | 27 | ReviewAssignmentDocEvent, ) |
28 | 28 | from ietf.group.factories import RoleFactory, ReviewTeamFactory |
29 | 29 | from ietf.group.models import Group |
|
37 | 37 | from ietf.utils.mail import outbox, empty_outbox, parseaddr, on_behalf_of, get_payload_text |
38 | 38 | from ietf.utils.test_utils import login_testing_unauthorized, reload_db_objects |
39 | 39 | from ietf.utils.test_utils import TestCase |
| 40 | +from ietf.utils.text import strip_prefix, xslugify |
40 | 41 |
|
41 | 42 | class ReviewTests(TestCase): |
42 | 43 | def setUp(self): |
@@ -876,7 +877,41 @@ def test_complete_unsolicited_review_link_to_mailing_list_by_secretary(self, moc |
876 | 877 |
|
877 | 878 | self.assertEqual(len(outbox), 0) |
878 | 879 | self.assertTrue("http://example.com" in assignment.review.external_url) |
879 | | - |
| 880 | + |
| 881 | + def test_double_submit_review(self): |
| 882 | + assignment, url = self.setup_complete_review_test() |
| 883 | + |
| 884 | + login_testing_unauthorized(self, assignment.reviewer.person.user.username, url) |
| 885 | + |
| 886 | + name_components = [ |
| 887 | + "review", |
| 888 | + strip_prefix(assignment.review_request.doc.name, "draft-"), |
| 889 | + assignment.review_request.doc.rev, |
| 890 | + assignment.review_request.team.acronym, |
| 891 | + assignment.review_request.type.slug, |
| 892 | + xslugify(assignment.reviewer.person.ascii_parts()[3]), |
| 893 | + datetime.date.today().isoformat(), |
| 894 | + ] |
| 895 | + review_name = "-".join(c for c in name_components if c).lower() |
| 896 | + Document.objects.create(name=review_name,type_id='review',group=assignment.review_request.team) |
| 897 | + |
| 898 | + r = self.client.post(url, data={ |
| 899 | + "result": ReviewResultName.objects.get(reviewteamsettings_review_results_set__group=assignment.review_request.team, slug="ready").pk, |
| 900 | + "state": ReviewAssignmentStateName.objects.get(slug="completed").pk, |
| 901 | + "reviewed_rev": assignment.review_request.doc.rev, |
| 902 | + "review_submission": "enter", |
| 903 | + "review_content": "This is a review\nwith two lines", |
| 904 | + "review_url": "", |
| 905 | + "review_file": "", |
| 906 | + # Custom completion should be ignored - review posted by assignee is always set to now |
| 907 | + "completion_date": "2012-12-24", |
| 908 | + "completion_time": "12:13:14", |
| 909 | + }) |
| 910 | + self.assertEqual(r.status_code, 302) |
| 911 | + r2 = self.client.get(r.url) |
| 912 | + self.assertEqual(len(r2.context['messages']),1) |
| 913 | + self.assertIn('Attempt to save review failed', list(r2.context['messages'])[0].message) |
| 914 | + |
880 | 915 | def test_partially_complete_review(self): |
881 | 916 | assignment, url = self.setup_complete_review_test() |
882 | 917 |
|
|
0 commit comments