Merged in [15708] and [15730] from housley@vigilsec.com:

Added a mail alias for all review team secretaries. Fixes .  Use
the alias if there is one for email about review request changes.  Added
a test for the review team secretary alias functionality.
 - Legacy-Id: 15746
Note: SVN reference [15708] has been migrated to Git commit 6067dcbfef

Note: SVN reference [15730] has been migrated to Git commit d525ade0b0
This commit is contained in:
Henrik Levkowetz 2018-11-10 19:30:32 +00:00
commit 3b811ecb41
8 changed files with 58 additions and 5 deletions

View file

@ -8,6 +8,7 @@ from mock import patch
from requests import Response
from django.apps import apps
from django.urls import reverse as urlreverse
from django.conf import settings
@ -98,6 +99,27 @@ class ReviewTests(TestCase):
self.assertTrue('reviewteam3 Early' in outbox[1]['Subject'])
self.assertTrue('reviewsecretary3@' in outbox[1]['To'])
# set the reviewteamsetting for the secretary email alias, then do the post again
m = apps.get_model('review', 'ReviewTeamSettings')
for row in m.objects.all():
if row.group.upcase_acronym == review_team3.upcase_acronym:
row.secr_mail_alias = 'reviewsecretary3-alias@example.com'
row.save(update_fields=['secr_mail_alias'])
r = self.client.post(url, {
"type": "early",
"team": [review_team.pk,review_team3.pk],
"deadline": deadline.isoformat(),
"requested_rev": "01",
"requested_by": Person.objects.get(user__username="ad").pk,
"comment": "gZT2iiYqYLKiQHvsgWCcVLdH"
})
self.assertEqual(r.status_code, 302)
self.assertEqual(len(outbox),4)
self.assertTrue('reviewsecretary@' in outbox[2]['To'])
self.assertTrue('reviewsecretary3-alias@' in outbox[3]['To'])
def test_request_review_of_rfc(self):
doc = WgRfcFactory()

View file

@ -37,7 +37,7 @@ class Migration(migrations.Migration):
dependencies = [
('mailtrigger', '0002_conflrev_changes'),
('review', '0003_add_notify_ad_when'),
('review', '0004_reviewteamsettings_secr_mail_alias'),
]
operations = [

View file

@ -6,6 +6,7 @@ from django.template import Template, Context
from email.utils import parseaddr
from ietf.utils.mail import formataddr
from ietf.person.models import Email
from ietf.review.models import ReviewTeamSettings
import debug # pyflakes:ignore
@ -172,7 +173,11 @@ class Recipient(models.Model):
if 'group' in kwargs:
group = kwargs['group']
if not group.acronym=='none':
addrs.extend(group.role_set.filter(name='secr').values_list('email__address',flat=True))
rts = ReviewTeamSettings.objects.filter(group=group).first()
if rts and rts.secr_mail_alias and len(rts.secr_mail_alias) > 1:
addrs = [rts.secr_mail_alias, ]
else:
addrs.extend(group.role_set.filter(name='secr').values_list('email__address',flat=True))
return addrs
def gather_doc_group_responsible_directors(self, **kwargs):

View file

@ -5,6 +5,7 @@ import datetime, tarfile, mailbox, tempfile, hashlib, base64, email.utils
import urllib
import urllib2, contextlib
import debug # pyflakes:ignore
import debug # pyflakes:ignore
from pyquery import PyQuery

View file

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.16 on 2018-11-03 03:10
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('review', '0003_add_notify_ad_when'),
]
operations = [
migrations.AddField(
model_name='reviewteamsettings',
name='secr_mail_alias',
field=models.CharField(blank=True, help_text=b'Email alias for all of the review team secretaries', max_length=255, verbose_name=b'Email alias for all of the review team secretaries'),
),
]

View file

@ -15,7 +15,7 @@ def reverse(apps, schema_editor):
class Migration(migrations.Migration):
dependencies = [
('review', '0003_add_notify_ad_when'),
('review', '0004_reviewteamsettings_secr_mail_alias'),
]
operations = [

View file

@ -162,6 +162,7 @@ class ReviewTeamSettings(models.Model):
review_types = models.ManyToManyField(ReviewTypeName, default=get_default_review_types)
review_results = models.ManyToManyField(ReviewResultName, default=get_default_review_results, related_name='reviewteamsettings_review_results_set')
notify_ad_when = models.ManyToManyField(ReviewResultName, related_name='reviewteamsettings_notify_ad_set')
secr_mail_alias = models.CharField(verbose_name="Email alias for all of the review team secretaries", max_length=255, blank=True, help_text="Email alias for all of the review team secretaries")
def __unicode__(self):
return u"%s" % (self.group.acronym,)

View file

@ -16,7 +16,7 @@ from ietf.person.models import Person
from ietf.ietfauth.utils import has_role, is_authorized_in_doc_stream
from ietf.review.models import (ReviewRequest, ReviewRequestStateName, ReviewTypeName,
ReviewerSettings, UnavailablePeriod, ReviewWish, NextReviewerInTeam,
ReviewSecretarySettings)
ReviewTeamSettings, ReviewSecretarySettings)
from ietf.utils.mail import send_mail
from ietf.doc.utils import extract_complete_replaces_ancestor_mapping_for_docs
@ -350,7 +350,11 @@ def email_review_request_change(request, review_req, subject, msg, by, notify_se
to.add(e)
if notify_secretary:
extract_email_addresses(Role.objects.filter(name="secr", group=review_req.team).distinct())
rts = ReviewTeamSettings.objects.filter(group=review_req.team).first()
if rts and rts.secr_mail_alias and rts.secr_mail_alias.strip() != '':
to.add(rts.secr_mail_alias)
else:
extract_email_addresses(Role.objects.filter(name="secr", group=review_req.team).distinct())
if notify_reviewer:
extract_email_addresses([review_req.reviewer])
if notify_requested_by: