def helper_test_defer(self,name): doc = Document.objects.get(name=name) url = urlreverse('doc_defer_ballot',kwargs=dict(name=doc.name)) login_testing_unauthorized(self, "ad", url) # Verify that you can't defer a document that's not on a telechat r = self.client.post(url,dict()) self.assertEqual(r.status_code, 404) # Put the document on a telechat dates = TelechatDate.objects.active().order_by("date") first_date = dates[0].date second_date = dates[1].date e = TelechatDocEvent(type="scheduled_for_telechat", doc = doc, by = Person.objects.get(name="Areað Irector"), telechat_date = first_date, returning_item = False, ) e.save() # get r = self.client.get(url) self.assertEqual(r.status_code, 200) q = PyQuery(r.content) self.assertEqual(len(q('[type=submit]:contains("Defer ballot")')),1) # defer mailbox_before = len(outbox) self.assertEqual(doc.telechat_date(), first_date) r = self.client.post(url,dict()) self.assertEqual(r.status_code, 302) doc = Document.objects.get(name=name) self.assertEqual(doc.telechat_date(), second_date) self.assertFalse(doc.returning_item()) defer_states = dict(draft=['draft-iesg','defer'],conflrev=['conflrev','defer'],statchg=['statchg','defer']) if doc.type_id in defer_states: self.assertEqual(doc.get_state(defer_states[doc.type_id][0]).slug,defer_states[doc.type_id][1]) self.assertTrue(doc.active_defer_event()) self.assertEqual(len(outbox), mailbox_before + 2) self.assertTrue('Telechat update' in outbox[-2]['Subject']) self.assertTrue('iesg-secretary@' in outbox[-2]['To']) self.assertTrue('iesg@' in outbox[-2]['To']) self.assertTrue("Deferred" in outbox[-1]['Subject']) self.assertTrue(doc.file_tag() in outbox[-1]['Subject']) self.assertTrue('iesg@' in outbox[-1]['To']) # Ensure it's not possible to defer again r = self.client.get(url) self.assertEqual(r.status_code, 404) r = self.client.post(url,dict()) self.assertEqual(r.status_code, 404)
def helper_test_undefer(self,name): doc = Document.objects.get(name=name) url = urlreverse('doc_undefer_ballot',kwargs=dict(name=doc.name)) login_testing_unauthorized(self, "ad", url) # some additional setup dates = TelechatDate.objects.active().order_by("date") first_date = dates[0].date second_date = dates[1].date e = TelechatDocEvent(type="scheduled_for_telechat", doc = doc, by = Person.objects.get(name="Aread Irector"), telechat_date = second_date, returning_item = True, ) e.save() defer_states = dict(draft=['draft-iesg','defer'],conflrev=['conflrev','defer'],statchg=['statchg','defer']) if doc.type_id in defer_states: doc.set_state(State.objects.get(used=True, type=defer_states[doc.type_id][0],slug=defer_states[doc.type_id][1])) doc.save() # get r = self.client.get(url) self.assertEqual(r.status_code, 200) q = PyQuery(r.content) self.assertEqual(len(q('form.undefer')),1) # undefer mailbox_before = len(outbox) self.assertEqual(doc.telechat_date(), second_date) r = self.client.post(url,dict()) self.assertEqual(r.status_code, 302) doc = Document.objects.get(name=name) self.assertEqual(doc.telechat_date(), first_date) self.assertTrue(doc.returning_item()) undefer_states = dict(draft=['draft-iesg','iesg-eva'],conflrev=['conflrev','iesgeval'],statchg=['statchg','iesgeval']) if doc.type_id in undefer_states: self.assertEqual(doc.get_state(undefer_states[doc.type_id][0]).slug,undefer_states[doc.type_id][1]) self.assertFalse(doc.active_defer_event()) self.assertEqual(len(outbox), mailbox_before + 2) self.assertTrue("State Update" in outbox[-2]['Subject']) self.assertTrue("Undeferred" in outbox[-1]['Subject']) self.assertTrue(doc.file_tag() in outbox[-1]['Subject']) # Ensure it's not possible to undefer again r = self.client.get(url) self.assertEqual(r.status_code, 404) r = self.client.post(url,dict()) self.assertEqual(r.status_code, 404)
def test_reschedule(self): draft = make_test_data() # add to schedule e = TelechatDocEvent(type="scheduled_for_telechat") e.doc = draft e.rev = draft.rev e.by = Person.objects.get(name="Areað Irector") e.telechat_date = TelechatDate.objects.active()[0].date e.returning_item = True e.save() form_id = draft.pk url = urlreverse('ietf.iesg.views.agenda_documents') self.client.login(username="******", password="******") # normal get r = self.client.get(url) self.assertEqual(r.status_code, 200) q = PyQuery(r.content) self.assertEqual(len(q('form select[name=%s-telechat_date]' % form_id)), 1) self.assertEqual(len(q('form input[name=%s-clear_returning_item]' % form_id)), 1) # reschedule events_before = draft.docevent_set.count() d = TelechatDate.objects.active()[3].date r = self.client.post(url, { '%s-telechat_date' % form_id: d.isoformat(), '%s-clear_returning_item' % form_id: "1" }) self.assertEqual(r.status_code, 302) # check that it moved below the right header in the DOM on the # agenda docs page r = self.client.get(url) self.assertEqual(r.status_code, 200) d_header_pos = r.content.find("IESG telechat %s" % d.isoformat()) draft_pos = unicontent(r)[d_header_pos:].find(draft.name) self.assertTrue(draft_pos>0) self.assertTrue(draft.latest_event(TelechatDocEvent, "scheduled_for_telechat")) self.assertEqual(draft.latest_event(TelechatDocEvent, "scheduled_for_telechat").telechat_date, d) self.assertTrue(not draft.latest_event(TelechatDocEvent, "scheduled_for_telechat").returning_item) self.assertEqual(draft.docevent_set.count(), events_before + 1)
def helper_test_undefer(self,name): doc = Document.objects.get(name=name) url = urlreverse('doc_undefer_ballot',kwargs=dict(name=doc.name)) login_testing_unauthorized(self, "ad", url) # some additional setup dates = TelechatDate.objects.active().order_by("date") first_date = dates[0].date second_date = dates[1].date e = TelechatDocEvent(type="scheduled_for_telechat", doc = doc, by = Person.objects.get(name="Aread Irector"), telechat_date = second_date, returning_item = True, ) e.save() defer_states = dict(draft=['draft-iesg','defer'],conflrev=['conflrev','defer']) if doc.type_id in defer_states: doc.set_state(State.objects.get(used=True, type=defer_states[doc.type_id][0],slug=defer_states[doc.type_id][1])) doc.save() # get r = self.client.get(url) self.assertEquals(r.status_code, 200) q = PyQuery(r.content) self.assertEquals(len(q('form.undefer')),1) # undefer self.assertEquals(doc.telechat_date(), second_date) r = self.client.post(url,dict()) self.assertEquals(r.status_code, 302) doc = Document.objects.get(name=name) self.assertEquals(doc.telechat_date(), first_date) self.assertTrue(doc.returning_item()) undefer_states = dict(draft=['draft-iesg','iesg-eva'],conflrev=['conflrev','iesgeval']) if doc.type_id in undefer_states: self.assertEquals(doc.get_state(undefer_states[doc.type_id][0]).slug,undefer_states[doc.type_id][1])
def test_reschedule(self): from ietf.utils.test_data import make_test_data from ietf.person.models import Person from ietf.doc.models import TelechatDocEvent draft = make_test_data() # add to schedule e = TelechatDocEvent(type="scheduled_for_telechat") e.doc = draft e.by = Person.objects.get(name="Aread Irector") e.telechat_date = TelechatDate.objects.active()[0].date e.returning_item = True e.save() form_id = draft.pk telechat_date_before = e.telechat_date url = urlreverse('ietf.iesg.views.agenda_documents') self.client.login(remote_user="******") # normal get r = self.client.get(url) self.assertEquals(r.status_code, 200) q = PyQuery(r.content) self.assertEquals(len(q('form select[name=%s-telechat_date]' % form_id)), 1) self.assertEquals(len(q('form input[name=%s-clear_returning_item]' % form_id)), 1) # reschedule events_before = draft.docevent_set.count() d = TelechatDate.objects.active()[3].date r = self.client.post(url, { '%s-telechat_date' % form_id: d.isoformat(), '%s-clear_returning_item' % form_id: "1" }) self.assertEquals(r.status_code, 200) # check that it moved below the right header in the DOM on the # agenda docs page d_header_pos = r.content.find("IESG telechat %s" % d.isoformat()) draft_pos = r.content.find(draft.name) self.assertTrue(d_header_pos < draft_pos) self.assertTrue(draft.latest_event(TelechatDocEvent, "scheduled_for_telechat")) self.assertEquals(draft.latest_event(TelechatDocEvent, "scheduled_for_telechat").telechat_date, d) self.assertTrue(not draft.latest_event(TelechatDocEvent, "scheduled_for_telechat").returning_item) self.assertEquals(draft.docevent_set.count(), events_before + 1)
def update_telechat(request, doc, by, new_telechat_date): # FIXME: reuse function in idrfc/utils.py instead of this one # (need to fix auto-setting returning item problem first though) from ietf.doc.models import TelechatDocEvent on_agenda = bool(new_telechat_date) prev = doc.latest_event(TelechatDocEvent, type="scheduled_for_telechat") prev_telechat = prev.telechat_date if prev else None prev_agenda = bool(prev_telechat) e = TelechatDocEvent() e.type = "scheduled_for_telechat" e.by = by e.doc = doc e.telechat_date = new_telechat_date if on_agenda != prev_agenda: if on_agenda: e.desc = "Placed on agenda for telechat - %s" % new_telechat_date else: e.desc = "Removed from agenda for telechat" e.save() elif on_agenda and new_telechat_date != prev_telechat: e.desc = "Telechat date has been changed to <b>%s</b> from <b>%s</b>" % ( new_telechat_date, prev_telechat) e.save()
def update_telechat(request, doc, by, new_telechat_date, new_returning_item=None): from ietf.doc.models import TelechatDocEvent on_agenda = bool(new_telechat_date) prev = doc.latest_event(TelechatDocEvent, type="scheduled_for_telechat") prev_returning = bool(prev and prev.returning_item) prev_telechat = prev.telechat_date if prev else None prev_agenda = bool(prev_telechat) if new_returning_item == None: returning = prev_returning else: returning = new_returning_item if returning == prev_returning and new_telechat_date == prev_telechat: # fully updated, nothing to do return # auto-set returning item _ONLY_ if the caller did not provide a value if ( new_returning_item != None and on_agenda and prev_agenda and new_telechat_date != prev_telechat and prev_telechat < datetime.date.today() and has_same_ballot(doc,prev.telechat_date) ): returning = True e = TelechatDocEvent() e.type = "scheduled_for_telechat" e.by = by e.doc = doc e.returning_item = returning e.telechat_date = new_telechat_date if on_agenda != prev_agenda: if on_agenda: e.desc = "Placed on agenda for telechat - %s" % (new_telechat_date) else: e.desc = "Removed from agenda for telechat" elif on_agenda and new_telechat_date != prev_telechat: e.desc = "Telechat date has been changed to <b>%s</b> from <b>%s</b>" % ( new_telechat_date, prev_telechat) else: # we didn't reschedule but flipped returning item bit - let's # just explain that if returning: e.desc = "Set telechat returning item indication" else: e.desc = "Removed telechat returning item indication" e.save()
def update_telechatREDESIGN(request, doc, by, new_telechat_date, new_returning_item=None): from ietf.doc.models import TelechatDocEvent on_agenda = bool(new_telechat_date) prev = doc.latest_event(TelechatDocEvent, type="scheduled_for_telechat") prev_returning = bool(prev and prev.returning_item) prev_telechat = prev.telechat_date if prev else None prev_agenda = bool(prev_telechat) returning_item_changed = bool(new_returning_item != None and new_returning_item != prev_returning) if new_returning_item == None: returning = prev_returning else: returning = new_returning_item if returning == prev_returning and new_telechat_date == prev_telechat: # fully updated, nothing to do return # auto-update returning item if (not returning_item_changed and on_agenda and prev_agenda and new_telechat_date != prev_telechat): returning = True e = TelechatDocEvent() e.type = "scheduled_for_telechat" e.by = by e.doc = doc e.returning_item = returning e.telechat_date = new_telechat_date if on_agenda != prev_agenda: if on_agenda: e.desc = "Placed on agenda for telechat - %s" % (new_telechat_date) else: e.desc = "Removed from agenda for telechat" elif on_agenda and new_telechat_date != prev_telechat: e.desc = "Telechat date has been changed to <b>%s</b> from <b>%s</b>" % ( new_telechat_date, prev_telechat) else: # we didn't reschedule but flipped returning item bit - let's # just explain that if returning: e.desc = "Set telechat returning item indication" else: e.desc = "Removed telechat returning item indication" e.save()
def update_telechat(request, doc, by, new_telechat_date): # FIXME: reuse function in idrfc/utils.py instead of this one # (need to fix auto-setting returning item problem first though) from ietf.doc.models import TelechatDocEvent on_agenda = bool(new_telechat_date) prev = doc.latest_event(TelechatDocEvent, type="scheduled_for_telechat") prev_telechat = prev.telechat_date if prev else None prev_agenda = bool(prev_telechat) e = TelechatDocEvent() e.type = "scheduled_for_telechat" e.by = by e.doc = doc e.telechat_date = new_telechat_date if on_agenda != prev_agenda: if on_agenda: e.desc = "Placed on agenda for telechat - %s" % new_telechat_date else: e.desc = "Removed from agenda for telechat" e.save() elif on_agenda and new_telechat_date != prev_telechat: e.desc = "Telechat date has been changed to <b>%s</b> from <b>%s</b>" % (new_telechat_date, prev_telechat) e.save()
def helper_test_undefer(self, name): doc = Document.objects.get(name=name) url = urlreverse('ietf.doc.views_ballot.undefer_ballot', kwargs=dict(name=doc.name)) login_testing_unauthorized(self, "ad", url) # some additional setup dates = TelechatDate.objects.active().order_by("date") first_date = dates[0].date second_date = dates[1].date e = TelechatDocEvent( type="scheduled_for_telechat", doc=doc, rev=doc.rev, by=Person.objects.get(name="Areað Irector"), telechat_date=second_date, returning_item=True, ) e.save() defer_states = dict(draft=['draft-iesg', 'defer'], conflrev=['conflrev', 'defer'], statchg=['statchg', 'defer']) if doc.type_id in defer_states: doc.set_state( State.objects.get(used=True, type=defer_states[doc.type_id][0], slug=defer_states[doc.type_id][1])) # get r = self.client.get(url) self.assertEqual(r.status_code, 200) q = PyQuery(r.content) self.assertEqual(len(q('[type=submit]:contains("Undefer ballot")')), 1) # undefer mailbox_before = len(outbox) self.assertEqual(doc.telechat_date(), second_date) r = self.client.post(url, dict()) self.assertEqual(r.status_code, 302) doc = Document.objects.get(name=name) self.assertEqual(doc.telechat_date(), first_date) self.assertTrue(doc.returning_item()) undefer_states = dict(draft=['draft-iesg', 'iesg-eva'], conflrev=['conflrev', 'iesgeval'], statchg=['statchg', 'iesgeval']) if doc.type_id in undefer_states: self.assertEqual( doc.get_state(undefer_states[doc.type_id][0]).slug, undefer_states[doc.type_id][1]) self.assertFalse(doc.active_defer_event()) self.assertEqual(len(outbox), mailbox_before + 2) self.assertTrue("Telechat update" in outbox[-2]['Subject']) self.assertTrue('iesg-secretary@' in outbox[-2]['To']) self.assertTrue('iesg@' in outbox[-2]['To']) self.assertTrue("Undeferred" in outbox[-1]['Subject']) self.assertTrue(doc.file_tag() in outbox[-1]['Subject']) self.assertTrue('iesg@' in outbox[-1]['To']) # Ensure it's not possible to undefer again r = self.client.get(url) self.assertEqual(r.status_code, 404) r = self.client.post(url, dict()) self.assertEqual(r.status_code, 404)
def update_telechat(request, doc, by, new_telechat_date, new_returning_item=None): on_agenda = bool(new_telechat_date) prev = doc.latest_event(TelechatDocEvent, type="scheduled_for_telechat") prev_returning = bool(prev and prev.returning_item) prev_telechat = prev.telechat_date if prev else None prev_agenda = bool(prev_telechat) if new_returning_item == None: returning = prev_returning else: returning = new_returning_item if returning == prev_returning and new_telechat_date == prev_telechat: # fully updated, nothing to do return # auto-set returning item _ONLY_ if the caller did not provide a value if ( new_returning_item != None and on_agenda and prev_agenda and new_telechat_date != prev_telechat and prev_telechat < datetime.date.today() and has_same_ballot(doc,prev.telechat_date) ): returning = True e = TelechatDocEvent() e.type = "scheduled_for_telechat" e.by = by e.doc = doc e.rev = doc.rev e.returning_item = returning e.telechat_date = new_telechat_date if on_agenda != prev_agenda: if on_agenda: e.desc = "Placed on agenda for telechat - %s" % (new_telechat_date) else: e.desc = "Removed from agenda for telechat" elif on_agenda and new_telechat_date != prev_telechat: e.desc = "Telechat date has been changed to <b>%s</b> from <b>%s</b>" % ( new_telechat_date, prev_telechat) else: # we didn't reschedule but flipped returning item bit - let's # just explain that if returning: e.desc = "Set telechat returning item indication" else: e.desc = "Removed telechat returning item indication" e.save() from ietf.doc.mails import email_update_telechat email_update_telechat(request, doc, e.desc) return e