Skip to content

Commit

Permalink
Send email to new mailtrigger controlled destinations when iana exper…
Browse files Browse the repository at this point in the history
…t review state changes. Fixes #3121. Commit ready for merge.

 - Legacy-Id: 18714
  • Loading branch information
rjsparks committed Nov 18, 2020
1 parent 6c953bd commit 7e384a8
Show file tree
Hide file tree
Showing 6 changed files with 97 additions and 8 deletions.
13 changes: 12 additions & 1 deletion ietf/doc/mails.py
Expand Up @@ -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,
)
20 changes: 20 additions & 0 deletions ietf/doc/tests_draft.py
Expand Up @@ -201,6 +201,26 @@ def test_change_iana_state(self):
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))
Expand Down
6 changes: 5 additions & 1 deletion ietf/doc/views_draft.py
Expand Up @@ -30,7 +30,8 @@
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,
Expand Down Expand Up @@ -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:
Expand Down
@@ -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),
]
28 changes: 22 additions & 6 deletions ietf/name/fixtures/names.json
Expand Up @@ -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": [],
Expand Down Expand Up @@ -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"
},
Expand All @@ -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
Expand All @@ -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"
},
Expand All @@ -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
Expand Down
4 changes: 4 additions & 0 deletions 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 %}

0 comments on commit 7e384a8

Please sign in to comment.