Skip to content

Commit 9d8d0d6

Browse files
committed
Changes when returning_item is automatically set to match the current IESGs preferences.
Removes several chunks of dead code related to editing telechat dates. Improves returning item tests. Partially addresses ietf-tools#1209 Commit ready for merge. - Legacy-Id: 8262
1 parent 1a29f28 commit 9d8d0d6

8 files changed

Lines changed: 82 additions & 63 deletions

File tree

ietf/doc/tests_ballot.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -475,7 +475,7 @@ def helper_test_defer(self,name):
475475
self.assertEqual(r.status_code, 302)
476476
doc = Document.objects.get(name=name)
477477
self.assertEqual(doc.telechat_date(), second_date)
478-
self.assertTrue(doc.returning_item())
478+
self.assertFalse(doc.returning_item())
479479
defer_states = dict(draft=['draft-iesg','defer'],conflrev=['conflrev','defer'],statchg=['statchg','defer'])
480480
if doc.type_id in defer_states:
481481
self.assertEqual(doc.get_state(defer_states[doc.type_id][0]).slug,defer_states[doc.type_id][1])

ietf/doc/tests_charter.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,35 @@ def test_edit_telechat_date(self):
138138
charter = Document.objects.get(name=charter.name)
139139
self.assertTrue(not charter.latest_event(TelechatDocEvent, "scheduled_for_telechat").telechat_date)
140140

141+
def test_no_returning_item_for_different_ballot(self):
142+
make_test_data()
143+
144+
group = Group.objects.get(acronym="ames")
145+
charter = group.charter
146+
url = urlreverse('charter_telechat_date', kwargs=dict(name=charter.name))
147+
login_testing_unauthorized(self, "secretary", url)
148+
login = Person.objects.get(user__username="secretary")
149+
150+
# Make it so that the charter has been through internal review, and passed its external review
151+
# ballot on a previous telechat
152+
last_week = datetime.date.today()-datetime.timedelta(days=7)
153+
BallotDocEvent.objects.create(type='created_ballot',by=login,doc=charter,
154+
ballot_type=BallotType.objects.get(doc_type=charter.type,slug='r-extrev'),
155+
time=last_week)
156+
TelechatDocEvent.objects.create(type='scheduled_for_telechat',doc=charter,by=login,telechat_date=last_week,returning_item=False)
157+
BallotDocEvent.objects.create(type='created_ballot',by=login,doc=charter,
158+
ballot_type=BallotType.objects.get(doc_type=charter.type,slug='approve'))
159+
160+
# Put the charter onto a future telechat and verify returning item is not set
161+
telechat_date = TelechatDate.objects.active()[1].date
162+
r = self.client.post(url, dict(name=group.name, acronym=group.acronym, telechat_date=telechat_date.isoformat()))
163+
self.assertEqual(r.status_code, 302)
164+
165+
charter = Document.objects.get(name=charter.name)
166+
telechat_event = charter.latest_event(TelechatDocEvent, "scheduled_for_telechat")
167+
self.assertEqual(telechat_event.telechat_date, telechat_date)
168+
self.assertFalse(telechat_event.returning_item)
169+
141170
def test_edit_notify(self):
142171
make_test_data()
143172

ietf/doc/tests_conflict_review.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -224,17 +224,11 @@ def test_edit_telechat_date(self):
224224
doc = Document.objects.get(name='conflict-review-imaginary-irtf-submission')
225225
self.assertEqual(doc.latest_event(TelechatDocEvent, "scheduled_for_telechat").telechat_date,telechat_date)
226226

227-
# move it forward a telechat (this should set the returning item bit)
227+
# move it forward a telechat (this should NOT set the returning item bit)
228228
telechat_date = TelechatDate.objects.active().order_by('date')[1].date
229229
r = self.client.post(url,dict(telechat_date=telechat_date.isoformat()))
230230
self.assertEqual(r.status_code,302)
231231
doc = Document.objects.get(name='conflict-review-imaginary-irtf-submission')
232-
self.assertTrue(doc.returning_item())
233-
234-
# clear the returning item bit
235-
r = self.client.post(url,dict(telechat_date=telechat_date.isoformat()))
236-
self.assertEqual(r.status_code,302)
237-
doc = Document.objects.get(name='conflict-review-imaginary-irtf-submission')
238232
self.assertFalse(doc.returning_item())
239233

240234
# set the returning item bit without changing the date
@@ -243,6 +237,12 @@ def test_edit_telechat_date(self):
243237
doc = Document.objects.get(name='conflict-review-imaginary-irtf-submission')
244238
self.assertTrue(doc.returning_item())
245239

240+
# clear the returning item bit
241+
r = self.client.post(url,dict(telechat_date=telechat_date.isoformat()))
242+
self.assertEqual(r.status_code,302)
243+
doc = Document.objects.get(name='conflict-review-imaginary-irtf-submission')
244+
self.assertFalse(doc.returning_item())
245+
246246
# Take the doc back off any telechat
247247
r = self.client.post(url,dict(telechat_date=""))
248248
self.assertEqual(r.status_code, 302)

ietf/doc/tests_draft.py

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@
1010
import debug # pyflakes:ignore
1111

1212
from ietf.doc.models import ( Document, DocAlias, DocReminder, DocumentAuthor, DocEvent,
13-
ConsensusDocEvent, LastCallDocEvent, RelatedDocument, State, TelechatDocEvent, WriteupDocEvent )
13+
ConsensusDocEvent, LastCallDocEvent, RelatedDocument, State, TelechatDocEvent,
14+
WriteupDocEvent, BallotDocEvent)
1415
from ietf.doc.utils import get_tags_for_stream_id
1516
from ietf.name.models import StreamName, IntendedStdLevelName, DocTagName
1617
from ietf.group.models import Group
@@ -255,7 +256,25 @@ def test_edit_telechat_date(self):
255256
self.assertEqual(r.status_code, 302)
256257

257258
draft = Document.objects.get(name=draft.name)
258-
self.assertEqual(draft.latest_event(TelechatDocEvent, type="scheduled_for_telechat").telechat_date, TelechatDate.objects.active()[1].date)
259+
telechat_event = draft.latest_event(TelechatDocEvent, type="scheduled_for_telechat")
260+
self.assertEqual(telechat_event.telechat_date, TelechatDate.objects.active()[1].date)
261+
self.assertFalse(telechat_event.returning_item)
262+
263+
# change to a telechat that should cause returning item to be auto-detected
264+
# First, make it appear that the previous telechat has already passed
265+
telechat_event.telechat_date = datetime.date.today()-datetime.timedelta(days=7)
266+
telechat_event.save()
267+
ballot = draft.latest_event(BallotDocEvent, type="created_ballot")
268+
ballot.time = telechat_event.telechat_date
269+
ballot.save()
270+
271+
r = self.client.post(url, data)
272+
self.assertEqual(r.status_code, 302)
273+
274+
draft = Document.objects.get(name=draft.name)
275+
telechat_event = draft.latest_event(TelechatDocEvent, type="scheduled_for_telechat")
276+
self.assertEqual(telechat_event.telechat_date, TelechatDate.objects.active()[1].date)
277+
self.assertTrue(telechat_event.returning_item)
259278

260279
# remove from agenda
261280
data["telechat_date"] = ""

ietf/doc/tests_status_change.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -204,17 +204,11 @@ def test_edit_telechat_date(self):
204204
doc = Document.objects.get(name='status-change-imaginary-mid-review')
205205
self.assertEqual(doc.latest_event(TelechatDocEvent, "scheduled_for_telechat").telechat_date,telechat_date)
206206

207-
# move it forward a telechat (this should set the returning item bit)
207+
# move it forward a telechat (this should NOT set the returning item bit)
208208
telechat_date = TelechatDate.objects.active().order_by('date')[1].date
209209
r = self.client.post(url,dict(telechat_date=telechat_date.isoformat()))
210210
self.assertEqual(r.status_code,302)
211211
doc = Document.objects.get(name='status-change-imaginary-mid-review')
212-
self.assertTrue(doc.returning_item())
213-
214-
# clear the returning item bit
215-
r = self.client.post(url,dict(telechat_date=telechat_date.isoformat()))
216-
self.assertEqual(r.status_code,302)
217-
doc = Document.objects.get(name='status-change-imaginary-mid-review')
218212
self.assertFalse(doc.returning_item())
219213

220214
# set the returning item bit without changing the date
@@ -223,6 +217,12 @@ def test_edit_telechat_date(self):
223217
doc = Document.objects.get(name='status-change-imaginary-mid-review')
224218
self.assertTrue(doc.returning_item())
225219

220+
# clear the returning item bit
221+
r = self.client.post(url,dict(telechat_date=telechat_date.isoformat()))
222+
self.assertEqual(r.status_code,302)
223+
doc = Document.objects.get(name='status-change-imaginary-mid-review')
224+
self.assertFalse(doc.returning_item())
225+
226226
# Take the doc back off any telechat
227227
r = self.client.post(url,dict(telechat_date=""))
228228
self.assertEqual(r.status_code, 302)

ietf/doc/utils.py

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import re
33
import urllib
44
import math
5+
import datetime
56

67
from django.conf import settings
78
from django.db.models.query import EmptyQuerySet
@@ -315,7 +316,14 @@ def update_telechat(request, doc, by, new_telechat_date, new_returning_item=None
315316
prev_returning = bool(prev and prev.returning_item)
316317
prev_telechat = prev.telechat_date if prev else None
317318
prev_agenda = bool(prev_telechat)
318-
319+
prev_telechat_happened = prev_telechat and prev_telechat < datetime.date.today()
320+
321+
prev_same_ballot = False
322+
if prev_telechat:
323+
prev_ballot = doc.docevent_set.filter(ballotdocevent__type='created_ballot').exclude(time__gt=prev_telechat).order_by('-time').first()
324+
cur_ballot = doc.docevent_set.filter(ballotdocevent__type='created_ballot').order_by('-time').first()
325+
prev_same_ballot = (prev_ballot == cur_ballot)
326+
319327
returning_item_changed = bool(new_returning_item != None and new_returning_item != prev_returning)
320328

321329
if new_returning_item == None:
@@ -328,8 +336,13 @@ def update_telechat(request, doc, by, new_telechat_date, new_returning_item=None
328336
return
329337

330338
# auto-update returning item
331-
if (not returning_item_changed and on_agenda and prev_agenda
332-
and new_telechat_date != prev_telechat):
339+
if ( not returning_item_changed
340+
and on_agenda
341+
and prev_agenda
342+
and new_telechat_date != prev_telechat
343+
and prev_telechat_happened
344+
and prev_same_ballot
345+
):
333346
returning = True
334347

335348
e = TelechatDocEvent()

ietf/doc/utils_charter.py

Lines changed: 0 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -83,34 +83,6 @@ def historic_milestones_for_charter(charter, rev):
8383

8484
return res
8585

86-
87-
def update_telechat(request, doc, by, new_telechat_date):
88-
# FIXME: reuse function in doc/utils.py instead of this one
89-
# (need to fix auto-setting returning item problem first though)
90-
from ietf.doc.models import TelechatDocEvent
91-
92-
on_agenda = bool(new_telechat_date)
93-
94-
prev = doc.latest_event(TelechatDocEvent, type="scheduled_for_telechat")
95-
prev_telechat = prev.telechat_date if prev else None
96-
prev_agenda = bool(prev_telechat)
97-
98-
e = TelechatDocEvent()
99-
e.type = "scheduled_for_telechat"
100-
e.by = by
101-
e.doc = doc
102-
e.telechat_date = new_telechat_date
103-
104-
if on_agenda != prev_agenda:
105-
if on_agenda:
106-
e.desc = "Placed on agenda for telechat - %s" % new_telechat_date
107-
else:
108-
e.desc = "Removed from agenda for telechat"
109-
e.save()
110-
elif on_agenda and new_telechat_date != prev_telechat:
111-
e.desc = "Telechat date has been changed to <b>%s</b> from <b>%s</b>" % (new_telechat_date, prev_telechat)
112-
e.save()
113-
11486
def email_state_changed(request, doc, text):
11587
to = [e.strip() for e in doc.notify.replace(';', ',').split(',')]
11688
if not to:

ietf/doc/views_draft.py

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
from ietf.ietfauth.utils import role_required
3030
from ietf.message.models import Message
3131
from ietf.name.models import IntendedStdLevelName, DocTagName, StreamName
32+
from ietf.doc.forms import TelechatForm
3233
from ietf.person.forms import EmailsField
3334
from ietf.person.models import Person, Email
3435
from ietf.secr.lib.template import jsonapi
@@ -877,21 +878,6 @@ def edit_notices(request, name):
877878
},
878879
context_instance = RequestContext(request))
879880

880-
class TelechatForm(forms.Form):
881-
telechat_date = forms.TypedChoiceField(coerce=lambda x: datetime.datetime.strptime(x, '%Y-%m-%d').date(), empty_value=None, required=False)
882-
returning_item = forms.BooleanField(required=False)
883-
884-
def __init__(self, *args, **kwargs):
885-
super(self.__class__, self).__init__(*args, **kwargs)
886-
887-
dates = [d.date for d in TelechatDate.objects.active().order_by('date')]
888-
init = kwargs['initial'].get("telechat_date")
889-
if init and init not in dates:
890-
dates.insert(0, init)
891-
892-
self.fields['telechat_date'].choices = [("", "(not on agenda)")] + [(d, d.strftime("%Y-%m-%d")) for d in dates]
893-
894-
895881
@role_required("Area Director", "Secretariat")
896882
def telechat_date(request, name):
897883
doc = get_object_or_404(Document, type="draft", name=name)

0 commit comments

Comments
 (0)