diff --git a/ietf/doc/mails.py b/ietf/doc/mails.py index 3948d775c..c3ec97210 100644 --- a/ietf/doc/mails.py +++ b/ietf/doc/mails.py @@ -643,4 +643,15 @@ def email_lc_to_yang_doctors(request, doc): 'doc/mail/lc_to_yang_doctors.txt', dict(doc=doc, url=settings.IDTRACKER_BASE_URL + doc.get_absolute_url() ), cc = addrs.cc, - ) \ No newline at end of file + ) + +def email_iana_expert_review_state_changed(request, events): + assert type(events) == list + assert len(events) == 1 + addrs = gather_address_lists('iana_expert_review_state_changed', doc=events[0].doc) + send_mail(request, addrs.to, settings.DEFAULT_FROM_EMAIL, + f'IANA expert review state changed to {events[0].state.name} for {events[0].doc.name}', + 'doc/mail/iana_expert_review_state_changed.txt', + dict(event=events[0], url=settings.IDTRACKER_BASE_URL + events[0].doc.get_absolute_url() ), + cc = addrs.cc, + ) diff --git a/ietf/doc/tests_draft.py b/ietf/doc/tests_draft.py index 6fca3e02d..8b30b6255 100644 --- a/ietf/doc/tests_draft.py +++ b/ietf/doc/tests_draft.py @@ -201,6 +201,26 @@ class ChangeStateTests(TestCase): draft = Document.objects.get(name=draft.name) self.assertEqual(draft.get_state("draft-iana-review"), next_state) + def test_change_iana_expert_review_state(self): + draft = WgDraftFactory() + + first_state = State.objects.get(used=True, type='draft-iana-experts', slug='reviews-assigned') + next_state = State.objects.get(used=True, type='draft-iana-experts', slug='reviewers-ok') + + draft.set_state(first_state) + + url = urlreverse('ietf.doc.views_draft.change_iana_state', kwargs=dict(name=draft.name, state_type="iana-experts")) + login_testing_unauthorized(self, 'iana', url) + + empty_outbox() + r = self.client.post(url, dict(state=next_state.pk)) + self.assertEqual(r.status_code, 302) + + draft = Document.objects.get(name=draft.name) + self.assertEqual(draft.get_state("draft-iana-experts"), next_state) + + self.assertEqual(len(outbox),1) + def test_add_expert_review_comment(self): draft = WgDraftFactory() url = urlreverse('ietf.doc.views_draft.add_iana_experts_comment',kwargs=dict(name=draft.name)) diff --git a/ietf/doc/views_draft.py b/ietf/doc/views_draft.py index c13dce314..0584142c8 100644 --- a/ietf/doc/views_draft.py +++ b/ietf/doc/views_draft.py @@ -30,7 +30,8 @@ from ietf.doc.mails import ( email_pulled_from_rfc_queue, email_resurrect_reques email_resurrection_completed, email_state_changed, email_stream_changed, email_stream_state_changed, email_stream_tags_changed, extra_automation_headers, generate_publication_request, email_adopted, email_intended_status_changed, - email_iesg_processing_document, email_ad_approved_doc ) + email_iesg_processing_document, email_ad_approved_doc, + email_iana_expert_review_state_changed ) from ietf.doc.utils import ( add_state_change_event, can_adopt_draft, can_unadopt_draft, get_tags_for_stream_id, nice_consensus, update_reminder, update_telechat, make_notify_changed_event, get_initial_notify, @@ -240,6 +241,9 @@ def change_iana_state(request, name, state_type): doc.save_with_history(events) + if state_type == 'draft-iana-experts': + email_iana_expert_review_state_changed(request, events) + return HttpResponseRedirect(doc.get_absolute_url()) else: diff --git a/ietf/mailtrigger/migrations/0019_email_iana_expert_review_state_changed.py b/ietf/mailtrigger/migrations/0019_email_iana_expert_review_state_changed.py new file mode 100644 index 000000000..9818b4427 --- /dev/null +++ b/ietf/mailtrigger/migrations/0019_email_iana_expert_review_state_changed.py @@ -0,0 +1,34 @@ +# Copyright The IETF Trust 2020 All Rights Reserved + +from django.db import migrations + +def forward(apps,schema_editor): + MailTrigger = apps.get_model('mailtrigger', 'MailTrigger') + Recipient = apps.get_model('mailtrigger', 'Recipient') + + iana_er_state_changed = MailTrigger.objects.create( + slug='iana_expert_review_state_changed', + desc='Recipients when the IANA expert review for a document changes', + ) + + iana_er_state_changed.to.set( + Recipient.objects.filter(slug__in=[ + 'doc_ad', 'doc_authors', 'doc_group_chairs', 'doc_group_responsible_directors', 'doc_notify', 'doc_shepherd' + ]) + ) + +def reverse(apps,schema_editor): + MailTrigger = apps.get_model('mailtrigger', 'MailTrigger') + + MailTrigger.objects.filter(slug='iana_expert_review_state_changed').delete() + + +class Migration(migrations.Migration): + + dependencies = [ + ('mailtrigger', '0018_interim_approve_announce'), + ] + + operations = [ + migrations.RunPython(forward, reverse), + ] diff --git a/ietf/name/fixtures/names.json b/ietf/name/fixtures/names.json index 174712ba9..8fe6e0144 100644 --- a/ietf/name/fixtures/names.json +++ b/ietf/name/fixtures/names.json @@ -3727,6 +3727,22 @@ "model": "mailtrigger.mailtrigger", "pk": "group_personnel_change" }, + { + "fields": { + "cc": [], + "desc": "Recipients when the IANA expert review for a document changes", + "to": [ + "doc_ad", + "doc_authors", + "doc_group_chairs", + "doc_group_responsible_directors", + "doc_notify", + "doc_shepherd" + ] + }, + "model": "mailtrigger.mailtrigger", + "pk": "iana_expert_review_state_changed" + }, { "fields": { "cc": [], @@ -15008,7 +15024,7 @@ "fields": { "command": "xym", "switch": "--version", - "time": "2020-10-09T00:17:03.141", + "time": "2020-11-14T00:10:15.888", "used": true, "version": "xym 0.4.8" }, @@ -15019,9 +15035,9 @@ "fields": { "command": "pyang", "switch": "--version", - "time": "2020-10-09T00:17:04.888", + "time": "2020-11-14T00:10:17.069", "used": true, - "version": "pyang 2.3.2" + "version": "pyang 2.4.0" }, "model": "utils.versioninfo", "pk": 2 @@ -15030,7 +15046,7 @@ "fields": { "command": "yanglint", "switch": "--version", - "time": "2020-10-09T00:17:05.228", + "time": "2020-11-14T00:10:17.405", "used": true, "version": "yanglint SO 1.6.7" }, @@ -15041,9 +15057,9 @@ "fields": { "command": "xml2rfc", "switch": "--version", - "time": "2020-10-09T00:17:07.630", + "time": "2020-11-14T00:10:19.405", "used": true, - "version": "xml2rfc 3.2.1" + "version": "xml2rfc 3.4.0" }, "model": "utils.versioninfo", "pk": 4 diff --git a/ietf/templates/doc/mail/iana_expert_review_state_changed.txt b/ietf/templates/doc/mail/iana_expert_review_state_changed.txt new file mode 100644 index 000000000..f739ce818 --- /dev/null +++ b/ietf/templates/doc/mail/iana_expert_review_state_changed.txt @@ -0,0 +1,4 @@ +{% autoescape off %}The IANA expert review state for {{event.doc.name}} has changed to {{event.state.name}}. + +For more information, see the document in the Datatracker at: {{ url }} +{% endautoescape %} \ No newline at end of file