Skip to content

Commit 1501066

Browse files
committed
Handle the new-work message
- Legacy-Id: 10066
1 parent 12a03d2 commit 1501066

10 files changed

Lines changed: 305 additions & 91 deletions

File tree

ietf/doc/tests_charter.py

Lines changed: 91 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
from ietf.doc.models import ( Document, State, BallotDocEvent, BallotType, NewRevisionDocEvent,
1111
TelechatDocEvent, WriteupDocEvent )
12-
from ietf.doc.utils_charter import next_revision, default_review_text, default_action_text
12+
from ietf.doc.utils_charter import next_revision, default_review_text, default_action_text
1313
from ietf.group.models import Group, GroupMilestone
1414
from ietf.iesg.models import TelechatDate
1515
from ietf.person.models import Person
@@ -273,46 +273,101 @@ def test_submit_charter(self):
273273
self.assertEqual(f.read(),
274274
"Windows line\nMac line\nUnix line\n" + utf_8_snippet)
275275

276-
def test_edit_announcement_text(self):
276+
def test_edit_review_announcement_text(self):
277277
draft = make_test_data()
278278
charter = draft.group.charter
279279

280-
for ann in ("action", "review"):
281-
url = urlreverse('ietf.doc.views_charter.announcement_text', kwargs=dict(name=charter.name, ann=ann))
282-
self.client.logout()
283-
login_testing_unauthorized(self, "secretary", url)
280+
url = urlreverse('ietf.doc.views_charter.review_announcement_text', kwargs=dict(name=charter.name))
281+
self.client.logout()
282+
login_testing_unauthorized(self, "secretary", url)
284283

285-
# normal get
286-
r = self.client.get(url)
287-
self.assertEqual(r.status_code, 200)
288-
q = PyQuery(r.content)
289-
self.assertEqual(len(q('textarea[name=announcement_text]')), 1)
290-
# as Secretariat, we can send
291-
if ann == "review":
292-
mailbox_before = len(outbox)
293-
by = Person.objects.get(user__username="secretary")
294-
r = self.client.post(url, dict(
295-
announcement_text=default_review_text(draft.group, charter, by).text,
296-
send_text="1"))
297-
self.assertEqual(len(outbox), mailbox_before + 1)
298-
self.assertTrue('WG Review' in outbox[-1]['Subject'])
299-
self.assertTrue('ietf-announce@' in outbox[-1]['To'])
300-
self.assertTrue('mars-wg@' in outbox[-1]['Cc'])
301-
302-
# save
303-
r = self.client.post(url, dict(
304-
announcement_text="This is a simple test.",
305-
save_text="1"))
306-
self.assertEqual(r.status_code, 302)
307-
self.assertTrue("This is a simple test" in charter.latest_event(WriteupDocEvent, type="changed_%s_announcement" % ann).text)
284+
# normal get
285+
r = self.client.get(url)
286+
self.assertEqual(r.status_code, 200)
287+
q = PyQuery(r.content)
288+
self.assertEqual(len(q('textarea[name=announcement_text]')), 1)
289+
self.assertEqual(len(q('textarea[name=new_work_text]')), 1)
308290

309-
# test regenerate
310-
r = self.client.post(url, dict(
311-
announcement_text="This is a simple test.",
312-
regenerate_text="1"))
313-
self.assertEqual(r.status_code, 200)
314-
q = PyQuery(r.content)
315-
self.assertTrue(draft.group.name in charter.latest_event(WriteupDocEvent, type="changed_%s_announcement" % ann).text)
291+
by = Person.objects.get(user__username="secretary")
292+
293+
(e1, e2) = default_review_text(draft.group, charter, by)
294+
announcement_text = e1.text
295+
new_work_text = e2.text
296+
297+
empty_outbox()
298+
r = self.client.post(url, dict(
299+
announcement_text=announcement_text,
300+
new_work_text=new_work_text,
301+
send_both="1"))
302+
self.assertEqual(len(outbox), 2)
303+
self.assertTrue(all(['WG Review' in m['Subject'] for m in outbox]))
304+
self.assertTrue('ietf-announce@' in outbox[0]['To'])
305+
self.assertTrue('mars-wg@' in outbox[0]['Cc'])
306+
self.assertTrue('new-work@' in outbox[1]['To'])
307+
308+
empty_outbox()
309+
r = self.client.post(url, dict(
310+
announcement_text=announcement_text,
311+
new_work_text=new_work_text,
312+
send_annc_only="1"))
313+
self.assertEqual(len(outbox), 1)
314+
self.assertTrue('ietf-announce@' in outbox[0]['To'])
315+
316+
empty_outbox()
317+
r = self.client.post(url, dict(
318+
announcement_text=announcement_text,
319+
new_work_text=new_work_text,
320+
send_nw_only="1"))
321+
self.assertEqual(len(outbox), 1)
322+
self.assertTrue('new-work@' in outbox[0]['To'])
323+
324+
# save
325+
r = self.client.post(url, dict(
326+
announcement_text="This is a simple test.",
327+
new_work_text="New work gets something different.",
328+
save_text="1"))
329+
self.assertEqual(r.status_code, 302)
330+
self.assertTrue("This is a simple test" in charter.latest_event(WriteupDocEvent, type="changed_review_announcement").text)
331+
self.assertTrue("New work gets something different." in charter.latest_event(WriteupDocEvent, type="changed_new_work_text").text)
332+
333+
# test regenerate
334+
r = self.client.post(url, dict(
335+
announcement_text="This is a simple test.",
336+
new_work_text="Too simple perhaps?",
337+
regenerate_text="1"))
338+
self.assertEqual(r.status_code, 200)
339+
q = PyQuery(r.content)
340+
self.assertTrue(draft.group.name in charter.latest_event(WriteupDocEvent, type="changed_review_announcement").text)
341+
self.assertTrue(draft.group.name in charter.latest_event(WriteupDocEvent, type="changed_new_work_text").text)
342+
343+
def test_edit_action_announcement_text(self):
344+
draft = make_test_data()
345+
charter = draft.group.charter
346+
347+
url = urlreverse('ietf.doc.views_charter.action_announcement_text', kwargs=dict(name=charter.name))
348+
self.client.logout()
349+
login_testing_unauthorized(self, "secretary", url)
350+
351+
# normal get
352+
r = self.client.get(url)
353+
self.assertEqual(r.status_code, 200)
354+
q = PyQuery(r.content)
355+
self.assertEqual(len(q('textarea[name=announcement_text]')), 1)
356+
357+
# save
358+
r = self.client.post(url, dict(
359+
announcement_text="This is a simple test.",
360+
save_text="1"))
361+
self.assertEqual(r.status_code, 302)
362+
self.assertTrue("This is a simple test" in charter.latest_event(WriteupDocEvent, type="changed_action_announcement").text)
363+
364+
# test regenerate
365+
r = self.client.post(url, dict(
366+
announcement_text="This is a simple test.",
367+
regenerate_text="1"))
368+
self.assertEqual(r.status_code, 200)
369+
q = PyQuery(r.content)
370+
self.assertTrue(draft.group.name in charter.latest_event(WriteupDocEvent, type="changed_action_announcement").text)
316371

317372
def test_edit_ballot_writeupnotes(self):
318373
draft = make_test_data()

ietf/doc/urls_charter.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@
99
url(r'^telechat/$', "ietf.doc.views_doc.telechat_date", name='charter_telechat_date'),
1010
url(r'^notify/$', "ietf.doc.views_doc.edit_notify", name='charter_edit_notify'),
1111
url(r'^ad/$', "ietf.doc.views_charter.edit_ad", name='charter_edit_ad'),
12-
url(r'^(?P<ann>action|review)/$', "ietf.doc.views_charter.announcement_text", name="charter_edit_announcement"),
12+
url(r'^action/$', "ietf.doc.views_charter.action_announcement_text"),
13+
url(r'^review/$', "ietf.doc.views_charter.review_announcement_text"),
1314
url(r'^ballotwriteupnotes/$', "ietf.doc.views_charter.ballot_writeupnotes"),
1415
url(r'^approve/$', "ietf.doc.views_charter.approve", name='charter_approve'),
1516
url(r'^submit/(?:(?P<option>initcharter|recharter)/)?$', "ietf.doc.views_charter.submit", name='charter_submit'),

ietf/doc/utils_charter.py

Lines changed: 41 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from ietf.doc.models import NewRevisionDocEvent, WriteupDocEvent, BallotPositionDocEvent
77
from ietf.person.models import Person
88
from ietf.utils.history import find_history_active_at
9+
from ietf.utils.mail import parse_preformatted
910
from ietf.mailtoken.utils import gather_address_lists
1011

1112
def charter_name_for_group(group):
@@ -120,28 +121,51 @@ def default_action_text(group, charter, by):
120121
e.save()
121122
return e
122123

124+
def derive_new_work_text(review_text,group):
125+
addrs= gather_address_lists('charter_external_review_new_work',group=group).as_strings()
126+
(m,_,_) = parse_preformatted(review_text,
127+
override={'To':addrs.to,
128+
'Cc':addrs.cc,
129+
'From':'The IESG <iesg@ietf.org>',
130+
'Reply_to':'<iesg@ietf.org>'})
131+
if not addrs.cc:
132+
del m['Cc']
133+
return m.as_string()
134+
123135
def default_review_text(group, charter, by):
136+
now = datetime.datetime.now()
124137
addrs=gather_address_lists('charter_external_review',group=group).as_strings(compact=False)
125-
e = WriteupDocEvent(doc=charter, by=by)
126-
e.by = by
127-
e.type = "changed_review_announcement"
128-
e.desc = "%s review text was changed" % group.type.name
129-
e.text = render_to_string("doc/charter/review_text.txt",
138+
139+
e1 = WriteupDocEvent(doc=charter, by=by)
140+
e1.by = by
141+
e1.type = "changed_review_announcement"
142+
e1.desc = "%s review text was changed" % group.type.name
143+
e1.text = render_to_string("doc/charter/review_text.txt",
130144
dict(group=group,
131-
charter_url=settings.IDTRACKER_BASE_URL + charter.get_absolute_url(),
132-
charter_text=read_charter_text(charter),
133-
chairs=group.role_set.filter(name="chair"),
134-
secr=group.role_set.filter(name="secr"),
135-
techadv=group.role_set.filter(name="techadv"),
136-
milestones=group.groupmilestone_set.filter(state="charter"),
137-
review_date=(datetime.date.today() + datetime.timedelta(weeks=1)).isoformat(),
138-
review_type="new" if group.state_id == "proposed" else "recharter",
139-
to=addrs.to,
140-
cc=addrs.cc,
145+
charter_url=settings.IDTRACKER_BASE_URL + charter.get_absolute_url(),
146+
charter_text=read_charter_text(charter),
147+
chairs=group.role_set.filter(name="chair"),
148+
secr=group.role_set.filter(name="secr"),
149+
techadv=group.role_set.filter(name="techadv"),
150+
milestones=group.groupmilestone_set.filter(state="charter"),
151+
review_date=(datetime.date.today() + datetime.timedelta(weeks=1)).isoformat(),
152+
review_type="new" if group.state_id == "proposed" else "recharter",
153+
to=addrs.to,
154+
cc=addrs.cc,
141155
)
142156
)
143-
e.save()
144-
return e
157+
e1.time = now
158+
e1.save()
159+
160+
e2 = WriteupDocEvent(doc=charter, by=by)
161+
e2.by = by
162+
e2.type = "changed_new_work_text"
163+
e2.desc = "%s review text was changed" % group.type.name
164+
e2.text = derive_new_work_text(e1.text,group)
165+
e2.time = now
166+
e2.save()
167+
168+
return (e1,e2)
145169

146170
def generate_issue_ballot_mail(request, doc, ballot):
147171
active_ads = Person.objects.filter(email__role__name="ad", email__role__group__state="active", email__role__group__type="area").distinct()

0 commit comments

Comments
 (0)