diff --git a/ietf/doc/tests_review.py b/ietf/doc/tests_review.py index e06e04988..ef66a996d 100644 --- a/ietf/doc/tests_review.py +++ b/ietf/doc/tests_review.py @@ -649,7 +649,7 @@ class ReviewTests(TestCase): self.assertTrue(settings.MAILING_LIST_ARCHIVE_URL in review_req.review.external_url) - def test_complete_notify_ad(self): + def test_complete_notify_ad_because_team_settings(self): review_req, url = self.setup_complete_review_test() review_req.team.reviewteamsettings.notify_ad_when.add(ReviewResultName.objects.get(slug='issues')) # TODO - it's a little surprising that the factories so far didn't give this doc an ad @@ -672,6 +672,31 @@ class ReviewTests(TestCase): self.assertEqual(len(outbox), 2) self.assertIn('Has Issues', outbox[-1]['Subject']) + self.assertIn('settings indicated', outbox[-1].get_payload(decode=True).decode("utf-8")) + + def test_complete_notify_ad_because_checkbox(self): + review_req, url = self.setup_complete_review_test() + review_req.doc.ad = PersonFactory() + review_req.doc.save_with_history([DocEvent.objects.create(doc=review_req.doc, rev=review_req.doc.rev, by=review_req.reviewer.person, type='changed_document',desc='added an AD')]) + login_testing_unauthorized(self, review_req.reviewer.person.user.username, url) + + empty_outbox() + + r = self.client.post(url, data={ + "result": ReviewResultName.objects.get(reviewteamsettings_review_results_set__group=review_req.team, slug="issues").pk, + "state": ReviewRequestStateName.objects.get(slug="completed").pk, + "reviewed_rev": review_req.doc.rev, + "review_submission": "enter", + "review_content": "This is a review\nwith two lines", + "review_url": "", + "review_file": "", + "email_ad": "1", + }) + self.assertEqual(r.status_code, 302) + + self.assertEqual(len(outbox), 2) + self.assertIn('Has Issues', outbox[-1]['Subject']) + self.assertIn('reviewer indicated', outbox[-1].get_payload(decode=True).decode("utf-8")) @patch('requests.get') def test_complete_review_link_to_mailing_list(self, mock): diff --git a/ietf/doc/views_review.py b/ietf/doc/views_review.py index b7e58b7df..89b97d36c 100644 --- a/ietf/doc/views_review.py +++ b/ietf/doc/views_review.py @@ -379,6 +379,7 @@ class CompleteReviewForm(forms.Form): completion_date = DatepickerDateField(date_format="yyyy-mm-dd", picker_settings={ "autoclose": "1" }, initial=datetime.date.today, help_text="Date of announcement of the results of this review") completion_time = forms.TimeField(widget=forms.HiddenInput, initial=datetime.time.min) cc = MultiEmailField(required=False, help_text="Email addresses to send to in addition to the review team list") + email_ad = forms.BooleanField(label="Send extra email to the responsible AD suggesting early attention", required=False) def __init__(self, review_req, is_reviewer, *args, **kwargs): self.review_req = review_req @@ -645,13 +646,14 @@ def complete_review(request, name, request_id): review.external_url = mailarch.construct_message_url(list_name, email.utils.unquote(msg["Message-ID"])) review.save_with_history([close_event]) - if review_req.result in review_req.team.reviewteamsettings.notify_ad_when.all(): + if form.cleaned_data['email_ad'] or review_req.result in review_req.team.reviewteamsettings.notify_ad_when.all(): (to, cc) = gather_address_lists('review_notify_ad',review_req = review_req) msg_txt = render_to_string("review/notify_ad.txt", { "to": to, "cc": cc, "review_req": review_req, "settings": settings, + "explicit_request": form.cleaned_data['email_ad'], }) msg = infer_message(msg_txt) msg.by = request.user.person diff --git a/ietf/templates/review/notify_ad.txt b/ietf/templates/review/notify_ad.txt index d0b10f24e..9e5196a9a 100644 --- a/ietf/templates/review/notify_ad.txt +++ b/ietf/templates/review/notify_ad.txt @@ -9,4 +9,6 @@ The review is available at {{settings.IDTRACKER_BASE_URL}}{% url 'ietf.doc.views The document is available at {{settings.IDTRACKER_BASE_URL}}{% url 'ietf.doc.views_doc.document_main' name=review_req.doc.name %} +This message was sent because {% if explicit_request %}the reviewer indicated it should be on the review completion form{% else %}the review team settings indicated it should be{% endif %}. + {% endautoescape %} \ No newline at end of file