Send email to new mailtrigger controlled destinations when iana expert review state changes. Fixes #3121. Commit ready for merge.

- Legacy-Id: 18714
This commit is contained in:
Robert Sparks 2020-11-18 21:32:48 +00:00
parent 6c953bd010
commit 7e384a8aea
6 changed files with 97 additions and 8 deletions

View file

@ -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,
)
)
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,
)

View file

@ -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))

View file

@ -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:

View file

@ -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),
]

View file

@ -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

View file

@ -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 %}