Changed a ReviewAssignmentDocEvent type from 'closed_review_request' to 'closed_review_assignment', for consistency and readability.

- Legacy-Id: 16181
This commit is contained in:
Henrik Levkowetz 2019-05-02 12:38:41 +00:00
parent 9bfb488110
commit ca1f3340c0
8 changed files with 80 additions and 24 deletions

View file

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.20 on 2019-05-01 04:43
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('doc', '0011_reviewassignmentdocevent'),
]
operations = [
migrations.AlterField(
model_name='docevent',
name='type',
field=models.CharField(choices=[(b'new_revision', b'Added new revision'), (b'new_submission', b'Uploaded new revision'), (b'changed_document', b'Changed document metadata'), (b'added_comment', b'Added comment'), (b'added_message', b'Added message'), (b'edited_authors', b'Edited the documents author list'), (b'deleted', b'Deleted document'), (b'changed_state', b'Changed state'), (b'changed_stream', b'Changed document stream'), (b'expired_document', b'Expired document'), (b'extended_expiry', b'Extended expiry of document'), (b'requested_resurrect', b'Requested resurrect'), (b'completed_resurrect', b'Completed resurrect'), (b'changed_consensus', b'Changed consensus'), (b'published_rfc', b'Published RFC'), (b'added_suggested_replaces', b'Added suggested replacement relationships'), (b'reviewed_suggested_replaces', b'Reviewed suggested replacement relationships'), (b'changed_group', b'Changed group'), (b'changed_protocol_writeup', b'Changed protocol writeup'), (b'changed_charter_milestone', b'Changed charter milestone'), (b'initial_review', b'Set initial review time'), (b'changed_review_announcement', b'Changed WG Review text'), (b'changed_action_announcement', b'Changed WG Action text'), (b'started_iesg_process', b'Started IESG process on document'), (b'created_ballot', b'Created ballot'), (b'closed_ballot', b'Closed ballot'), (b'sent_ballot_announcement', b'Sent ballot announcement'), (b'changed_ballot_position', b'Changed ballot position'), (b'changed_ballot_approval_text', b'Changed ballot approval text'), (b'changed_ballot_writeup_text', b'Changed ballot writeup text'), (b'changed_rfc_editor_note_text', b'Changed RFC Editor Note text'), (b'changed_last_call_text', b'Changed last call text'), (b'requested_last_call', b'Requested last call'), (b'sent_last_call', b'Sent last call'), (b'scheduled_for_telechat', b'Scheduled for telechat'), (b'iesg_approved', b'IESG approved document (no problem)'), (b'iesg_disapproved', b'IESG disapproved document (do not publish)'), (b'approved_in_minute', b'Approved in minute'), (b'iana_review', b'IANA review comment'), (b'rfc_in_iana_registry', b'RFC is in IANA registry'), (b'rfc_editor_received_announcement', b'Announcement was received by RFC Editor'), (b'requested_publication', b'Publication at RFC Editor requested'), (b'sync_from_rfc_editor', b'Received updated information from RFC Editor'), (b'requested_review', b'Requested review'), (b'assigned_review_request', b'Assigned review request'), (b'closed_review_request', b'Closed review request'), (b'closed_review_assignment', b'Closed review assignment'), (b'downref_approved', b'Downref approved')], max_length=50),
),
]

View file

@ -994,6 +994,7 @@ EVENT_TYPES = [
("requested_review", "Requested review"),
("assigned_review_request", "Assigned review request"),
("closed_review_request", "Closed review request"),
("closed_review_assignment", "Closed review assignment"),
# downref
("downref_approved", "Downref approved"),

View file

@ -19,7 +19,7 @@ import debug # pyflakes:ignore
import ietf.review.mailarch
from ietf.doc.factories import NewRevisionDocEventFactory, WgDraftFactory, WgRfcFactory, ReviewFactory
from ietf.doc.models import DocumentAuthor, RelatedDocument, DocEvent, ReviewAssignmentDocEvent
from ietf.doc.models import DocumentAuthor, RelatedDocument, DocEvent, ReviewRequestDocEvent, ReviewAssignmentDocEvent
from ietf.group.factories import RoleFactory, ReviewTeamFactory
from ietf.group.models import Group
from ietf.message.models import Message
@ -207,9 +207,15 @@ class ReviewTests(TestCase):
review_req = reload_db_objects(review_req)
self.assertEqual(review_req.state_id, "withdrawn")
e = doc.latest_event()
e = doc.latest_event(ReviewRequestDocEvent)
self.assertEqual(e.type, "closed_review_request")
self.assertTrue("closed" in e.desc.lower())
e = doc.latest_event(ReviewAssignmentDocEvent)
self.assertEqual(e.type, "closed_review_assignment")
self.assertTrue("closed" in e.desc.lower())
self.assertEqual(len(outbox), 1)
self.assertTrue("closed" in outbox[0].get_payload(decode=True).decode("utf-8").lower())
@ -465,7 +471,7 @@ class ReviewTests(TestCase):
assignment = reload_db_objects(assignment)
self.assertEqual(assignment.state_id, "rejected")
e = doc.latest_event()
self.assertEqual(e.type, "closed_review_request")
self.assertEqual(e.type, "closed_review_assignment")
self.assertTrue("rejected" in e.desc)
self.assertEqual(len(outbox), 1)
self.assertTrue("Test message" in outbox[0].get_payload(decode=True).decode("utf-8"))
@ -867,7 +873,7 @@ class ReviewTests(TestCase):
assignment = reload_db_objects(assignment)
self.assertEqual(assignment.state_id, "completed")
event = ReviewAssignmentDocEvent.objects.get(type="closed_review_request", review_assignment=assignment)
event = ReviewAssignmentDocEvent.objects.get(type="closed_review_assignment", review_assignment=assignment)
self.assertEqual(event.time, datetime.datetime(2012, 12, 24, 12, 13, 14))
with open(os.path.join(self.review_subdir, assignment.review.name + ".txt")) as f:
@ -892,7 +898,7 @@ class ReviewTests(TestCase):
assignment = reload_db_objects(assignment)
self.assertEqual(assignment.review.rev, "01")
event = ReviewAssignmentDocEvent.objects.get(type="closed_review_request", review_assignment=assignment)
event = ReviewAssignmentDocEvent.objects.get(type="closed_review_assignment", review_assignment=assignment)
self.assertEqual(event.time, datetime.datetime(2013, 12, 24, 11, 11, 11))
self.assertEqual(len(outbox), 0)

View file

@ -333,7 +333,7 @@ def reject_reviewer_assignment(request, name, assignment_id):
review_assignment.save()
ReviewAssignmentDocEvent.objects.create(
type="closed_review_request",
type="closed_review_assignment",
doc=review_assignment.review_request.doc,
rev=review_assignment.review_request.doc.rev,
by=request.user.person,
@ -378,7 +378,7 @@ def withdraw_reviewer_assignment(request, name, assignment_id):
review_assignment.save()
ReviewAssignmentDocEvent.objects.create(
type="closed_review_request",
type="closed_review_assignment",
doc=review_assignment.review_request.doc,
rev=review_assignment.review_request.doc.rev,
by=request.user.person,
@ -415,7 +415,7 @@ def mark_reviewer_assignment_no_response(request, name, assignment_id):
review_assignment.save()
ReviewAssignmentDocEvent.objects.create(
type="closed_review_request",
type="closed_review_assignment",
doc=review_assignment.review_request.doc,
rev=review_assignment.review_request.doc.rev,
by=request.user.person,
@ -652,9 +652,9 @@ def complete_review(request, name, assignment_id):
if need_to_email_review:
desc += " " + "Sent review to list."
close_event = ReviewAssignmentDocEvent.objects.filter(type="closed_review_request", review_assignment=assignment).first()
close_event = ReviewAssignmentDocEvent.objects.filter(type="closed_review_assignment", review_assignment=assignment).first()
if not close_event:
close_event = ReviewAssignmentDocEvent(type="closed_review_request", review_assignment=assignment)
close_event = ReviewAssignmentDocEvent(type="closed_review_assignment", review_assignment=assignment)
close_event.doc = assignment.review_request.doc
close_event.rev = assignment.review_request.doc.rev

View file

@ -583,7 +583,7 @@ def close_review_request(request, review_req, close_state):
assignment.state_id = 'withdrawn'
assignment.save()
ReviewAssignmentDocEvent.objects.create(
type='closed_review_request',
type='closed_review_assignment',
doc=review_req.doc,
rev=review_req.doc.rev,
by=request.user.person,

View file

@ -129,7 +129,8 @@ def send_smtp(msg, bcc=None):
server.quit()
except smtplib.SMTPServerDisconnected:
pass
log(u"sent email from '%s' to %s id %s subject '%s'" % (frm, to, msg.get('Message-ID', ''), msg.get('Subject', '[no subject]')))
subj = msg.get('Subject', u'[no subject]')
log(u"sent email from '%s' to %s id %s subject '%s'" % (frm, to, msg.get('Message-ID', u''), subj))
def copy_email(msg, to, toUser=False, originalBcc=None):
'''
@ -377,6 +378,23 @@ def parse_preformatted(preformatted, extra={}, override={}):
else:
extra[k] = v
# Handle non-ascii address names and some other fields
for key in ['To', 'From', 'Cc', 'Bcc']:
values = msg.get_all(key, [])
if values:
values = getaddresses(values)
del msg[key]
msg[key] = ',\n '.join(formataddr(v) for v in values)
for key in ['Subject', ]:
values = msg.get_all(key)
if values:
del msg[key]
for v in values:
if isascii(v):
msg[key] = v
else:
msg[key] = Header(v, 'utf-8')
bcc = msg['Bcc']
del msg['Bcc']

View file

@ -34,6 +34,7 @@
import os
import re
import email
import html5lib
import sys
import urllib2
@ -109,6 +110,16 @@ class TestCase(django.test.TestCase):
self.assertTrue(resp['Content-Type'].startswith('text/html'))
self.assertValidHTML(resp.content)
def assertSameEmail(self, a, b, msg=None):
def normalize(x):
if x:
if not isinstance(x, list):
x = [ x ]
x = email.utils.getaddresses(x)
x.sort()
return x
return self.assertEqual(normalize(a), normalize(b), msg)
def tempdir(self, label):
slug = slugify(self.__class__.__name__.replace('.','-'))
dirname = "tmp-{label}-{slug}-dir".format(**locals())

View file

@ -73,10 +73,10 @@ body
"""
send_mail_preformatted(None, msg, {}, {})
recv = outbox[-1]
self.assertEqual(recv['To'], '<to1@example.com>, <to2@example.com>')
self.assertEqual(recv['From'], 'from1@ietf.org, from2@ietf.org')
self.assertEqual(recv['Cc'], 'cc1@example.com, cc2@example.com')
self.assertEqual(recv['Bcc'], None)
self.assertSameEmail(recv['To'], '<to1@example.com>, <to2@example.com>')
self.assertSameEmail(recv['From'], 'from1@ietf.org, from2@ietf.org')
self.assertSameEmail(recv['Cc'], 'cc1@example.com, cc2@example.com')
self.assertSameEmail(recv['Bcc'], None)
self.assertEqual(recv['Subject'], 'subject')
self.assertEqual(recv.get_payload(), 'body\n')
@ -88,10 +88,10 @@ body
}
send_mail_preformatted(request=None, preformatted=msg, extra={}, override=override)
recv = outbox[-1]
self.assertEqual(recv['To'], '<oto1@example.net>, <oto2@example.net>')
self.assertEqual(recv['From'], 'ofrom1@ietf.org, ofrom2@ietf.org')
self.assertEqual(recv['Cc'], 'occ1@example.net, occ2@example.net')
self.assertEqual(recv['Bcc'], None)
self.assertSameEmail(recv['To'], '<oto1@example.net>, <oto2@example.net>')
self.assertSameEmail(recv['From'], 'ofrom1@ietf.org, ofrom2@ietf.org')
self.assertSameEmail(recv['Cc'], 'occ1@example.net, occ2@example.net')
self.assertSameEmail(recv['Bcc'], None)
self.assertEqual(recv['Subject'], 'osubject')
self.assertEqual(recv.get_payload(), 'body\n')
@ -103,10 +103,10 @@ body
}
send_mail_preformatted(request=None, preformatted=msg, extra={}, override=override)
recv = outbox[-1]
self.assertEqual(recv['To'], '<oto1@example.net>, <oto2@example.net>')
self.assertEqual(recv['From'], '<ofrom1@ietf.org>, ofrom2@ietf.org')
self.assertEqual(recv['Cc'], '<occ1@example.net>, occ2@example.net')
self.assertEqual(recv['Bcc'], None)
self.assertSameEmail(recv['To'], '<oto1@example.net>, <oto2@example.net>')
self.assertSameEmail(recv['From'], '<ofrom1@ietf.org>, ofrom2@ietf.org')
self.assertSameEmail(recv['Cc'], '<occ1@example.net>, occ2@example.net')
self.assertSameEmail(recv['Bcc'], None)
self.assertEqual(recv['Subject'], 'osubject')
self.assertEqual(recv.get_payload(), 'body\n')