def test_add_possible_wg(self): url = urlreverse('iesg_working_group_actions') login_testing_unauthorized(self, "klm", url) r = self.client.post(url, dict(add="1", filename='sieve-charter.txt')) self.assertEquals(r.status_code, 302) add_url = r['Location'] r = self.client.get(add_url) self.assertEquals(r.status_code, 200) q = PyQuery(r.content) self.assertTrue('(sieve)' in r.content) self.assertEquals(len(q('form select[name=token_name]')), 1) self.assertEquals(q('form input[name=status_date]')[0].get("value"), "2010-05-07") self.assertEquals(len(q('form select[name=telechat_date]')), 1) wgas_before = WGAction.objects.all().count() dates = TelechatDates.objects.all()[0] token_name = IESGLogin.active_iesg()[0].first_name r = self.client.post(add_url, dict(status_date=dates.date1.isoformat(), token_name=token_name, category="23", note="Testing.", telechat_date=dates.date4.isoformat())) self.assertEquals(r.status_code, 302) self.assertEquals(wgas_before + 1, WGAction.objects.all().count())
def test_approve_ballot(self): draft = make_test_data() draft.set_state(State.objects.get(used=True, type="draft-iesg", slug="iesg-eva")) # make sure it's approvable url = urlreverse('doc_approve_ballot', kwargs=dict(name=draft.name)) login_testing_unauthorized(self, "secretary", url) # normal get r = self.client.get(url) self.assertEqual(r.status_code, 200) q = PyQuery(r.content) self.assertTrue("send out the announcement" in q('.actions input[type=submit]')[0].get('value').lower()) self.assertEqual(len(q('.announcement pre:contains("Subject: Protocol Action")')), 1) # approve mailbox_before = len(outbox) r = self.client.post(url, dict(skiprfceditorpost="1")) self.assertEqual(r.status_code, 302) draft = Document.objects.get(name=draft.name) self.assertEqual(draft.get_state_slug("draft-iesg"), "ann") self.assertEqual(len(outbox), mailbox_before + 4) self.assertTrue("Protocol Action" in outbox[-2]['Subject']) # the IANA copy self.assertTrue("Protocol Action" in outbox[-1]['Subject']) self.assertTrue(not outbox[-1]['CC']) self.assertTrue("Protocol Action" in draft.message_set.order_by("-time")[0].subject)
def test_notify_page(self): # check that we can get the notify page url = urlreverse("ietf.sync.views.notify", kwargs=dict(org="iana", notification="changes")) login_testing_unauthorized(self, "secretary", url) r = self.client.get(url) self.assertEqual(r.status_code, 200) self.assertTrue("new changes at" in unicontent(r))
def test_reset_charter_milestones(self): m1, m2, group = self.create_test_milestones() url = urlreverse('wg_reset_charter_milestones', kwargs=dict(acronym=group.acronym)) login_testing_unauthorized(self, "secretary", url) # normal get r = self.client.get(url) self.assertEquals(r.status_code, 200) q = PyQuery(r.content) self.assertEquals(q('input[name=milestone]').val(), str(m1.pk)) events_before = group.charter.docevent_set.count() # reset r = self.client.post(url, dict(milestone=[str(m1.pk)])) self.assertEquals(r.status_code, 302) self.assertEquals( GroupMilestone.objects.get(pk=m1.pk).state_id, "active") self.assertEquals( GroupMilestone.objects.get(pk=m2.pk).state_id, "deleted") self.assertEquals( GroupMilestone.objects.filter(due=m1.due, desc=m1.desc, state="charter").count(), 1) self.assertEquals(group.charter.docevent_set.count(), events_before + 2) # 1 delete, 1 add
def test_create(self): make_test_data() url = urlreverse('wg_create') login_testing_unauthorized(self, "secretary", url) num_wgs = len(Group.objects.filter(type="wg")) # normal get r = self.client.get(url) self.assertEquals(r.status_code, 200) q = PyQuery(r.content) self.assertEquals(len(q('form input[name=acronym]')), 1) # faulty post r = self.client.post(url, dict(acronym="foobarbaz")) # No name self.assertEquals(r.status_code, 200) q = PyQuery(r.content) self.assertTrue(len(q('form ul.errorlist')) > 0) self.assertEquals(len(Group.objects.filter(type="wg")), num_wgs) # creation state = GroupStateName.objects.get(slug="bof") r = self.client.post( url, dict(acronym="testwg", name="Testing WG", state=state.pk)) self.assertEquals(r.status_code, 302) self.assertEquals(len(Group.objects.filter(type="wg")), num_wgs + 1) group = Group.objects.get(acronym="testwg") self.assertEquals(group.name, "Testing WG") self.assertEquals(group.charter.name, "charter-ietf-testwg") self.assertEquals(group.charter.rev, "00-00")
def test_conclude(self): make_test_data() group = Group.objects.get(acronym="mars") url = urlreverse('wg_conclude', kwargs=dict(acronym=group.acronym)) login_testing_unauthorized(self, "secretary", url) # normal get r = self.client.get(url) self.assertEquals(r.status_code, 200) q = PyQuery(r.content) self.assertEquals(len(q('form textarea[name=instructions]')), 1) # faulty post r = self.client.post(url, dict(instructions="")) # No instructions self.assertEquals(r.status_code, 200) q = PyQuery(r.content) self.assertTrue(len(q('form ul.errorlist')) > 0) # request conclusion mailbox_before = len(outbox) r = self.client.post(url, dict(instructions="Test instructions")) self.assertEquals(r.status_code, 302) self.assertEquals(len(outbox), mailbox_before + 1) # the WG remains active until the Secretariat takes action group = Group.objects.get(acronym=group.acronym) self.assertEquals(group.state_id, "active")
def test_delete_milestone(self): m1, m2, group = self.create_test_milestones() url = urlreverse('wg_edit_milestones', kwargs=dict(acronym=group.acronym)) login_testing_unauthorized(self, "secretary", url) milestones_before = GroupMilestone.objects.count() events_before = group.groupevent_set.count() # delete r = self.client.post( url, { 'prefix': "m1", 'm1-id': m1.id, 'm1-desc': m1.desc, 'm1-due_month': str(m1.due.month), 'm1-due_year': str(m1.due.year), 'm1-resolved': "", 'm1-docs': ",".join(m1.docs.values_list("name", flat=True)), 'm1-delete': "checked", 'action': "save", }) self.assertEquals(r.status_code, 302) self.assertEquals(GroupMilestone.objects.count(), milestones_before) self.assertEquals(group.groupevent_set.count(), events_before + 1) m = GroupMilestone.objects.get(pk=m1.pk) self.assertEquals(m.state_id, "deleted") self.assertTrue( "Deleted milestone" in m.milestonegroupevent_set.all()[0].desc)
def test_delete_milestone(self): m1, m2, group = self.create_test_milestones() url = urlreverse('group_edit_milestones', kwargs=dict(group_type=group.type_id, acronym=group.acronym)) login_testing_unauthorized(self, "secretary", url) milestones_before = GroupMilestone.objects.count() events_before = group.groupevent_set.count() # delete r = self.client.post(url, { 'prefix': "m1", 'm1-id': m1.id, 'm1-desc': m1.desc, 'm1-due_month': str(m1.due.month), 'm1-due_year': str(m1.due.year), 'm1-resolved': "", 'm1-docs': ",".join(m1.docs.values_list("name", flat=True)), 'm1-delete': "checked", 'action': "save", }) self.assertEqual(r.status_code, 302) self.assertEqual(GroupMilestone.objects.count(), milestones_before) self.assertEqual(group.groupevent_set.count(), events_before + 1) m = GroupMilestone.objects.get(pk=m1.pk) self.assertEqual(m.state_id, "deleted") self.assertTrue("Deleted milestone" in m.milestonegroupevent_set.all()[0].desc)
def test_edit_position_as_secretary(self): draft = make_test_data() url = urlreverse('ietf.doc.views_ballot.edit_position', kwargs=dict(name=draft.name, ballot_id=draft.latest_event( BallotDocEvent, type="created_ballot").pk)) ad = Person.objects.get(name="Areað Irector") url += "?ad=%s" % ad.pk login_testing_unauthorized(self, "secretary", url) # normal get r = self.client.get(url) self.assertEqual(r.status_code, 200) q = PyQuery(r.content) self.assertTrue(len(q('form input[name=position]')) > 0) # vote on behalf of AD # events_before = draft.docevent_set.count() r = self.client.post( url, dict(position="discuss", discuss="Test discuss text")) self.assertEqual(r.status_code, 302) pos = draft.latest_event(BallotPositionDocEvent, ad=ad) self.assertEqual(pos.pos.slug, "discuss") self.assertEqual(pos.discuss, "Test discuss text") self.assertTrue("New position" in pos.desc) self.assertTrue("by Sec" in pos.desc)
def test_edit_action_announcement_text(self): draft = make_test_data() charter = draft.group.charter url = urlreverse('ietf.doc.views_charter.action_announcement_text', kwargs=dict(name=charter.name)) self.client.logout() login_testing_unauthorized(self, "secretary", url) # normal get r = self.client.get(url) self.assertEqual(r.status_code, 200) q = PyQuery(r.content) self.assertEqual(len(q('textarea[name=announcement_text]')), 1) # save r = self.client.post(url, dict( announcement_text="This is a simple test.", save_text="1")) self.assertEqual(r.status_code, 302) self.assertTrue("This is a simple test" in charter.latest_event(WriteupDocEvent, type="changed_action_announcement").text) # test regenerate r = self.client.post(url, dict( announcement_text="This is a simple test.", regenerate_text="1")) self.assertEqual(r.status_code, 200) q = PyQuery(r.content) self.assertTrue(draft.group.name in charter.latest_event(WriteupDocEvent, type="changed_action_announcement").text)
def test_submit_initial_charter(self): make_test_data() group = Group.objects.get(acronym="mars") # get rid of existing charter charter = group.charter group.charter = None group.save() charter.delete() charter = None url = urlreverse('ietf.doc.views_charter.submit', kwargs=dict(name=charter_name_for_group(group))) login_testing_unauthorized(self, "secretary", url) # normal get r = self.client.get(url) self.assertEqual(r.status_code, 200) q = PyQuery(r.content) self.assertEqual(len(q('form input[name=txt]')), 1) # create charter test_file = StringIO("Simple test") test_file.name = "unnamed" r = self.client.post(url, dict(txt=test_file)) self.assertEqual(r.status_code, 302) charter = Document.objects.get(name="charter-ietf-%s" % group.acronym) self.assertEqual(charter.rev, "00-00") self.assertTrue("new_revision" in charter.latest_event().type) group = Group.objects.get(pk=group.pk) self.assertEqual(group.charter, charter)
def test_no_returning_item_for_different_ballot(self): make_test_data() group = Group.objects.get(acronym="ames") charter = group.charter url = urlreverse('charter_telechat_date', kwargs=dict(name=charter.name)) login_testing_unauthorized(self, "secretary", url) login = Person.objects.get(user__username="******") # Make it so that the charter has been through internal review, and passed its external review # ballot on a previous telechat last_week = datetime.date.today()-datetime.timedelta(days=7) BallotDocEvent.objects.create(type='created_ballot',by=login,doc=charter, ballot_type=BallotType.objects.get(doc_type=charter.type,slug='r-extrev'), time=last_week) TelechatDocEvent.objects.create(type='scheduled_for_telechat',doc=charter,by=login,telechat_date=last_week,returning_item=False) BallotDocEvent.objects.create(type='created_ballot',by=login,doc=charter, ballot_type=BallotType.objects.get(doc_type=charter.type,slug='approve')) # Put the charter onto a future telechat and verify returning item is not set telechat_date = TelechatDate.objects.active()[1].date r = self.client.post(url, dict(name=group.name, acronym=group.acronym, telechat_date=telechat_date.isoformat())) self.assertEqual(r.status_code, 302) charter = Document.objects.get(name=charter.name) telechat_event = charter.latest_event(TelechatDocEvent, "scheduled_for_telechat") self.assertEqual(telechat_event.telechat_date, telechat_date) self.assertFalse(telechat_event.returning_item)
def test_edit_notify(self): make_test_data() charter = Group.objects.get(acronym="mars").charter url = urlreverse('charter_edit_notify', kwargs=dict(name=charter.name)) login_testing_unauthorized(self, "secretary", url) # get r = self.client.get(url) self.assertEqual(r.status_code, 200) # post self.assertTrue(not charter.notify) newlist = "[email protected], [email protected]" r = self.client.post(url, dict(notify=newlist,save_addresses="1")) self.assertEqual(r.status_code, 302) charter = Document.objects.get(name=charter.name) self.assertEqual(charter.notify, newlist) # Ask the form to regenerate the list r = self.client.post(url,dict(regenerate_addresses="1")) self.assertEqual(r.status_code,200) charter= Document.objects.get(name=charter.name) # Regenerate does not save! self.assertEqual(charter.notify,newlist) q = PyQuery(r.content) formlist = q('form input[name=notify]')[0].value self.assertEqual(formlist, None)
def test_change_review_secretary_settings(self): doc = make_test_data() review_req = make_review_data(doc) secretary = Person.objects.get(user__username="******") url = urlreverse(ietf.group.views.change_review_secretary_settings, kwargs={ "acronym": review_req.team.acronym, }) login_testing_unauthorized(self, secretary.user.username, url) url = urlreverse(ietf.group.views.change_review_secretary_settings, kwargs={ "group_type": review_req.team.type_id, "acronym": review_req.team.acronym, }) # get r = self.client.get(url) self.assertEqual(r.status_code, 200) # set settings r = self.client.post(url, { "remind_days_before_deadline": "6" }) self.assertEqual(r.status_code, 302) settings = ReviewSecretarySettings.objects.get(person=secretary, team=review_req.team) self.assertEqual(settings.remind_days_before_deadline, 6)
def test_add_delegate(self): make_test_data() url = urlreverse('manage_delegates', kwargs=dict(acronym="mars")) login_testing_unauthorized(self, "secretary", url) # get r = self.client.get(url) self.assertEquals(r.status_code, 200) q = PyQuery(r.content) self.assertEquals(len(q('form input[name=email]')), 1) # add existing person history_before = GroupHistory.objects.filter(acronym="mars").count() r = self.client.post( url, dict(email="*****@*****.**", form_type="single")) self.assertEquals(r.status_code, 200) q = PyQuery(r.content) self.assertTrue("new delegate" in r.content) self.assertTrue( Email.objects.get( address="*****@*****.**").person.plain_name() in r.content) self.assertEquals( Role.objects.filter(name="delegate", group__acronym="mars", email__address="*****@*****.**").count(), 1) self.assertEquals(history_before + 1, GroupHistory.objects.filter(acronym="mars").count())
def test_add_not_existing_delegate(self): make_test_data() url = urlreverse('manage_delegates', kwargs=dict(acronym="mars")) login_testing_unauthorized(self, "secretary", url) # get r = self.client.get(url) self.assertEquals(r.status_code, 200) q = PyQuery(r.content) self.assertEquals(len(q('form input[name=email]')), 1) # add non-existing r = self.client.post( url, dict(email="*****@*****.**", form_type="single")) self.assertEquals(r.status_code, 200) self.assertTrue("*****@*****.**" in r.content) q = PyQuery(r.content) self.assertEquals( len(q('form input[type=submit][value*="Send email"]')), 1) # we get back a warning and offer to send email, do that mailbox_before = len(outbox) r = self.client.post( url, dict(email="*****@*****.**", form_type="notexist")) self.assertEquals(r.status_code, 200) self.assertTrue("Email sent" in r.content) self.assertEquals(len(outbox), mailbox_before + 3)
def test_no_returning_item_for_different_ballot(self): make_test_data() group = Group.objects.get(acronym="ames") charter = group.charter url = urlreverse('ietf.doc.views_doc.telechat_date;charter', kwargs=dict(name=charter.name)) login_testing_unauthorized(self, "secretary", url) login = Person.objects.get(user__username="******") # Make it so that the charter has been through internal review, and passed its external review # ballot on a previous telechat last_week = datetime.date.today()-datetime.timedelta(days=7) BallotDocEvent.objects.create(type='created_ballot',by=login,doc=charter, rev=charter.rev, ballot_type=BallotType.objects.get(doc_type=charter.type,slug='r-extrev'), time=last_week) TelechatDocEvent.objects.create(type='scheduled_for_telechat', doc=charter, rev=charter.rev, by=login, telechat_date=last_week, returning_item=False) BallotDocEvent.objects.create(type='created_ballot', by=login, doc=charter, rev=charter.rev, ballot_type=BallotType.objects.get(doc_type=charter.type, slug='approve')) # Put the charter onto a future telechat and verify returning item is not set telechat_date = TelechatDate.objects.active()[1].date r = self.client.post(url, dict(name=group.name, acronym=group.acronym, telechat_date=telechat_date.isoformat())) self.assertEqual(r.status_code, 302) charter = Document.objects.get(name=charter.name) telechat_event = charter.latest_event(TelechatDocEvent, "scheduled_for_telechat") self.assertEqual(telechat_event.telechat_date, telechat_date) self.assertFalse(telechat_event.returning_item)
def test_edit_relations(self): doc = Document.objects.get(name='status-change-imaginary-mid-review') url = urlreverse('status_change_relations',kwargs=dict(name=doc.name)) login_testing_unauthorized(self, "secretary", url) # Some additional setup doc.relateddocument_set.create(target=DocAlias.objects.get(name='rfc9999'),relationship_id='tois') doc.relateddocument_set.create(target=DocAlias.objects.get(name='rfc9998'),relationship_id='tohist') # get r = self.client.get(url) self.assertEquals(r.status_code, 200) q = PyQuery(r.content) self.assertEquals(len(q('form.edit-status-change-rfcs')),1) # There should be three rows on the form self.assertEquals(len(q('tr[id^=relation_row]')),3) # Try to add a relation to an RFC that doesn't exist r = self.client.post(url,dict(new_relation_row_blah="rfc9997", statchg_relation_row_blah="tois", Submit="Submit")) self.assertEquals(r.status_code, 200) q = PyQuery(r.content) self.assertTrue(len(q('form ul.errorlist')) > 0) # Try to add a relation leaving the relation type blank r = self.client.post(url,dict(new_relation_row_blah="rfc9999", statchg_relation_row_blah="", Submit="Submit")) self.assertEquals(r.status_code, 200) q = PyQuery(r.content) self.assertTrue(len(q('form ul.errorlist')) > 0) # Try to add a relation with an unknown relationship type r = self.client.post(url,dict(new_relation_row_blah="rfc9999", statchg_relation_row_blah="badslug", Submit="Submit")) self.assertEquals(r.status_code, 200) q = PyQuery(r.content) self.assertTrue(len(q('form ul.errorlist')) > 0) # Successful change of relations r = self.client.post(url,dict(new_relation_row_blah="rfc9999", statchg_relation_row_blah="toexp", new_relation_row_foo="rfc9998", statchg_relation_row_foo="tobcp", Submit="Submit")) self.assertEquals(r.status_code, 302) doc = Document.objects.get(name='status-change-imaginary-mid-review') self.assertEquals(doc.relateddocument_set.count(),2) verify9999 = doc.relateddocument_set.filter(target__name='rfc9999') self.assertTrue(verify9999) self.assertEquals(verify9999.count(),1) self.assertEquals(verify9999[0].relationship.slug,'toexp') verify9998 = doc.relateddocument_set.filter(target__name='rfc9998') self.assertTrue(verify9998) self.assertEquals(verify9998.count(),1) self.assertEquals(verify9998[0].relationship.slug,'tobcp') self.assertTrue(doc.latest_event(DocEvent,type="added_comment").desc.startswith('Affected RFC list changed.'))
def test_edit_notify(self): make_test_data() charter = Group.objects.get(acronym="mars").charter url = urlreverse('ietf.doc.views_doc.edit_notify;charter', kwargs=dict(name=charter.name)) login_testing_unauthorized(self, "secretary", url) # get r = self.client.get(url) self.assertEqual(r.status_code, 200) # post self.assertTrue(not charter.notify) newlist = "[email protected], [email protected]" r = self.client.post(url, dict(notify=newlist,save_addresses="1")) self.assertEqual(r.status_code, 302) charter = Document.objects.get(name=charter.name) self.assertEqual(charter.notify, newlist) # Ask the form to regenerate the list r = self.client.post(url,dict(regenerate_addresses="1")) self.assertEqual(r.status_code,200) charter= Document.objects.get(name=charter.name) # Regenerate does not save! self.assertEqual(charter.notify,newlist) q = PyQuery(r.content) formlist = q('form input[name=notify]')[0].value self.assertEqual(formlist, None)
def test_initial_submission(self): doc = Document.objects.get(name='status-change-imaginary-mid-review') url = urlreverse('status_change_submit',kwargs=dict(name=doc.name)) login_testing_unauthorized(self, "ad", url) # normal get r = self.client.get(url) self.assertEquals(r.status_code,200) q = PyQuery(r.content) self.assertTrue(q('textarea')[0].text.startswith("Provide a description")) # Faulty posts using textbox # Right now, nothing to test - we let people put whatever the web browser will let them put into that textbox # sane post using textbox path = os.path.join(settings.STATUS_CHANGE_PATH, '%s-%s.txt' % (doc.canonical_name(), doc.rev)) self.assertEquals(doc.rev,u'00') self.assertFalse(os.path.exists(path)) r = self.client.post(url,dict(content="Some initial review text\n",submit_response="1")) self.assertEquals(r.status_code,302) doc = Document.objects.get(name='status-change-imaginary-mid-review') self.assertEquals(doc.rev,u'00') with open(path) as f: self.assertEquals(f.read(),"Some initial review text\n") f.close() self.assertTrue( "mid-review-00" in doc.latest_event(NewRevisionDocEvent).desc)
def test_edit_action_announcement_text(self): draft = make_test_data() charter = draft.group.charter url = urlreverse('ietf.doc.views_charter.action_announcement_text', kwargs=dict(name=charter.name)) self.client.logout() login_testing_unauthorized(self, "secretary", url) # normal get r = self.client.get(url) self.assertEqual(r.status_code, 200) q = PyQuery(r.content) self.assertEqual(len(q('textarea[name=announcement_text]')), 1) # save r = self.client.post(url, dict( announcement_text="This is a simple test.", save_text="1")) self.assertEqual(r.status_code, 302) self.assertTrue("This is a simple test" in charter.latest_event(WriteupDocEvent, type="changed_action_announcement").text) # test regenerate r = self.client.post(url, dict( announcement_text="This is a simple test.", regenerate_text="1")) self.assertEqual(r.status_code, 200) q = PyQuery(r.content) self.assertTrue(draft.group.name in charter.latest_event(WriteupDocEvent, type="changed_action_announcement").text)
def test_create(self): make_test_data() url = urlreverse('wg_create') login_testing_unauthorized(self, "secretary", url) num_wgs = len(Group.objects.filter(type="wg")) # normal get r = self.client.get(url) self.assertEquals(r.status_code, 200) q = PyQuery(r.content) self.assertEquals(len(q('form input[name=acronym]')), 1) # faulty post r = self.client.post(url, dict(acronym="foobarbaz")) # No name self.assertEquals(r.status_code, 200) q = PyQuery(r.content) self.assertTrue(len(q('form ul.errorlist')) > 0) self.assertEquals(len(Group.objects.filter(type="wg")), num_wgs) # creation state = GroupStateName.objects.get(slug="bof") r = self.client.post(url, dict(acronym="testwg", name="Testing WG", state=state.pk)) self.assertEquals(r.status_code, 302) self.assertEquals(len(Group.objects.filter(type="wg")), num_wgs + 1) group = Group.objects.get(acronym="testwg") self.assertEquals(group.name, "Testing WG") self.assertEquals(group.charter.name, "charter-ietf-testwg") self.assertEquals(group.charter.rev, "00-00")
def test_accept_milestone(self): m1, m2, group = self.create_test_milestones() m1.state_id = "review" m1.save() url = urlreverse('group_edit_milestones', kwargs=dict(group_type=group.type_id, acronym=group.acronym)) login_testing_unauthorized(self, "ad", url) # normal get r = self.client.get(url) self.assertEqual(r.status_code, 200) events_before = group.groupevent_set.count() # add r = self.client.post(url, { 'prefix': "m1", 'm1-id': m1.id, 'm1-desc': m1.desc, 'm1-due_month': str(m1.due.month), 'm1-due_year': str(m1.due.year), 'm1-resolved': m1.resolved, 'm1-docs': ",".join(m1.docs.values_list("name", flat=True)), 'm1-accept': "accept", 'action': "save", }) self.assertEqual(r.status_code, 302) m = GroupMilestone.objects.get(pk=m1.pk) self.assertEqual(m.state_id, "active") self.assertEqual(group.groupevent_set.count(), events_before + 1) self.assertTrue("to active from review" in m.milestonegroupevent_set.all()[0].desc)
def test_edit_ballot_writeup(self): draft = make_test_data() url = urlreverse('doc_ballot_writeupnotes', kwargs=dict(name=draft.name)) login_testing_unauthorized(self, "secretary", url) # add a IANA review note draft.set_state(State.objects.get(used=True, type="draft-iana-review", slug="not-ok")) DocEvent.objects.create(type="iana_review", doc=draft, by=Person.objects.get(user__username="******"), desc="IANA does not approve of this document, it does not make sense.", ) # normal get r = self.client.get(url) self.assertEqual(r.status_code, 200) q = PyQuery(r.content) self.assertEqual(len(q('textarea[name=ballot_writeup]')), 1) self.assertEqual(len(q('input[type=submit][value*="Save Ballot Writeup"]')), 1) self.assertTrue("IANA does not" in r.content) # save r = self.client.post(url, dict( ballot_writeup="This is a simple test.", save_ballot_writeup="1")) self.assertEqual(r.status_code, 200) draft = Document.objects.get(name=draft.name) self.assertTrue("This is a simple test" in draft.latest_event(WriteupDocEvent, type="changed_ballot_writeup_text").text)
def test_create_based_on_existing(self): make_test_data() url = urlreverse('group_create', kwargs=dict(group_type="wg")) login_testing_unauthorized(self, "secretary", url) group = Group.objects.get(acronym="mars") # try hijacking area - faulty r = self.client.post(url, dict(name="Test", acronym=group.parent.acronym)) self.assertEqual(r.status_code, 200) q = PyQuery(r.content) self.assertTrue(len(q('form ul.errorlist')) > 0) self.assertEqual(len(q('form input[name="confirmed"]')), 0) # can't confirm us out of this # try elevating BoF to WG group.state_id = "bof" group.save() r = self.client.post(url, dict(name="Test", acronym=group.acronym)) self.assertEqual(r.status_code, 200) q = PyQuery(r.content) self.assertTrue(len(q('form ul.errorlist')) > 0) self.assertEqual(len(q('form input[name="confirmed"]')), 1) self.assertEqual(Group.objects.get(acronym=group.acronym).state_id, "bof") # confirm elevation state = GroupStateName.objects.get(slug="proposed") r = self.client.post(url, dict(name="Test", acronym=group.acronym, confirmed="1",state=state.pk)) self.assertEqual(r.status_code, 302) self.assertEqual(Group.objects.get(acronym=group.acronym).state_id, "proposed") self.assertEqual(Group.objects.get(acronym=group.acronym).name, "Test")
def test_initial_submission(self): doc = Document.objects.get(name='status-change-imaginary-mid-review') url = urlreverse('status_change_submit', kwargs=dict(name=doc.name)) login_testing_unauthorized(self, "ad", url) # normal get r = self.client.get(url) self.assertEquals(r.status_code, 200) q = PyQuery(r.content) self.assertTrue( q('textarea')[0].text.startswith("Provide a description")) # Faulty posts using textbox # Right now, nothing to test - we let people put whatever the web browser will let them put into that textbox # sane post using textbox path = os.path.join(settings.STATUS_CHANGE_PATH, '%s-%s.txt' % (doc.canonical_name(), doc.rev)) self.assertEquals(doc.rev, u'00') self.assertFalse(os.path.exists(path)) r = self.client.post( url, dict(content="Some initial review text\n", submit_response="1")) self.assertEquals(r.status_code, 302) doc = Document.objects.get(name='status-change-imaginary-mid-review') self.assertEquals(doc.rev, u'00') with open(path) as f: self.assertEquals(f.read(), "Some initial review text\n") f.close() self.assertTrue( "mid-review-00" in doc.latest_event(NewRevisionDocEvent).desc)
def test_approval(self): make_test_data() liaison = make_liaison_models() # has to come from WG to need approval liaison.from_group = Group.objects.get(acronym="mars") liaison.approved = None liaison.save() url = urlreverse('liaison_approval_detail', kwargs=dict(object_id=liaison.pk)) # this liaison is for a WG so we need the AD for the area login_testing_unauthorized(self, "ad", url) # normal get r = self.client.get(url) self.assertEquals(r.status_code, 200) q = PyQuery(r.content) self.assertEquals(len(q('form input[name=do_approval]')), 1) # approve mailbox_before = len(outbox) r = self.client.post(url, dict(do_approval="1")) self.assertEquals(r.status_code, 302) liaison = LiaisonStatement.objects.get(id=liaison.id) self.assertTrue(liaison.approved) self.assertEquals(len(outbox), mailbox_before + 1) self.assertTrue("Liaison Statement" in outbox[-1]["Subject"])
def test_add_milestone_as_chair(self): m1, m2, group = self.create_test_milestones() url = urlreverse('group_edit_milestones', kwargs=dict(group_type=group.type_id, acronym=group.acronym)) login_testing_unauthorized(self, "marschairman", url) # normal get r = self.client.get(url) self.assertEqual(r.status_code, 200) milestones_before = GroupMilestone.objects.count() events_before = group.groupevent_set.count() due = self.last_day_of_month(datetime.date.today() + datetime.timedelta(days=365)) # add r = self.client.post(url, { 'prefix': "m-1", 'm-1-id': -1, 'm-1-desc': "Test 3", 'm-1-due_month': str(due.month), 'm-1-due_year': str(due.year), 'm-1-resolved': "", 'm-1-docs': "", 'action': "save", }) self.assertEqual(r.status_code, 302) self.assertEqual(GroupMilestone.objects.count(), milestones_before + 1) m = GroupMilestone.objects.get(desc="Test 3") self.assertEqual(m.state_id, "review") self.assertEqual(group.groupevent_set.count(), events_before + 1) self.assertTrue("for review" in m.milestonegroupevent_set.all()[0].desc)
def test_manage_stream_delegates(self): make_test_data() url = urlreverse('stream_delegates', kwargs=dict(stream_name="IETF")) login_testing_unauthorized(self, "secretary", url) # get r = self.client.get(url) self.assertEquals(r.status_code, 200) q = PyQuery(r.content) self.assertEquals(len(q('input[type=submit][value*=Add]')), 1) delegate = Email.objects.get(address="*****@*****.**") # add delegate r = self.client.post(url, dict(email=delegate.address)) self.assertEquals(r.status_code, 200) self.assertEquals(Role.objects.filter(group__acronym="ietf", name="delegate", person__email__address=delegate.address).count(), 1) # remove delegate again r = self.client.post(url, dict(remove_delegate=[delegate.person.pk], delete="1")) self.assertEquals(r.status_code, 200) self.assertEquals(Role.objects.filter(group__acronym="ietf", name="delegate", person__email__address=delegate.address).count(), 0)
def test_adopt_document(self): draft = make_test_data() draft.stream = None draft.group = Group.objects.get(type="individ") draft.save() draft.unset_state("draft-stream-ietf") url = urlreverse('edit_adopt', kwargs=dict(name=draft.name)) login_testing_unauthorized(self, "marschairman", url) # get r = self.client.get(url) self.assertEquals(r.status_code, 200) q = PyQuery(r.content) self.assertEquals(len(q('form input[type=submit][value*=adopt]')), 1) self.assertEquals(len(q('form select[name="group"] option')), 1) # we can only select "mars" # adopt in mars WG mailbox_before = len(outbox) events_before = draft.docevent_set.count() r = self.client.post(url, dict(comment="some comment", group=Group.objects.get(acronym="mars").pk, weeks="10")) self.assertEquals(r.status_code, 302) draft = Document.objects.get(pk=draft.pk) self.assertEquals(draft.group.acronym, "mars") self.assertEquals(draft.stream_id, "ietf") self.assertEquals(draft.docevent_set.count() - events_before, 4) self.assertEquals(len(outbox), mailbox_before + 1) self.assertTrue("state changed" in outbox[-1]["Subject"].lower()) self.assertTrue("*****@*****.**" in unicode(outbox[-1])) self.assertTrue("*****@*****.**" in unicode(outbox[-1]))
def test_edit_notices(self): doc = Document.objects.get(name='status-change-imaginary-mid-review') url = urlreverse('status_change_notices',kwargs=dict(name=doc.name)) login_testing_unauthorized(self, "ad", url) # normal get r = self.client.get(url) self.assertEqual(r.status_code, 200) q = PyQuery(r.content) self.assertEqual(len(q('form input[name=notify]')),1) self.assertEqual(doc.notify,q('form input[name=notify]')[0].value) # change notice list newlist = '"Foo Bar" <*****@*****.**>' r = self.client.post(url,dict(notify=newlist,save_addresses="1")) self.assertEqual(r.status_code,302) doc = Document.objects.get(name='status-change-imaginary-mid-review') self.assertEqual(doc.notify,newlist) self.assertTrue(doc.latest_event(DocEvent,type="added_comment").desc.startswith('Notification list changed')) # Some additional setup so there's something to put in a generated notify list doc.relateddocument_set.create(target=DocAlias.objects.get(name='rfc9999'),relationship_id='tois') doc.relateddocument_set.create(target=DocAlias.objects.get(name='rfc9998'),relationship_id='tohist') # Ask the form to regenerate the list r = self.client.post(url,dict(regenerate_addresses="1")) self.assertEqual(r.status_code,200) doc = Document.objects.get(name='status-change-imaginary-mid-review') # Regenerate does not save! self.assertEqual(doc.notify,newlist) q = PyQuery(r.content) formlist = q('form input[name=notify]')[0].value self.assertEqual(None,formlist)
def test_edit_notices(self): doc = Document.objects.get(name='conflict-review-imaginary-irtf-submission') url = urlreverse('conflict_review_notices',kwargs=dict(name=doc.name)) login_testing_unauthorized(self, "ad", url) # normal get r = self.client.get(url) self.assertEqual(r.status_code, 200) q = PyQuery(r.content) self.assertEqual(len(q('form input[name=notify]')),1) self.assertEqual(doc.notify,q('form input[name=notify]')[0].value) # change notice list newlist = '"Foo Bar" <*****@*****.**>' r = self.client.post(url,dict(notify=newlist,save_addresses="1")) self.assertEqual(r.status_code,302) doc = Document.objects.get(name='conflict-review-imaginary-irtf-submission') self.assertEqual(doc.notify,newlist) self.assertTrue(doc.latest_event(DocEvent,type="added_comment").desc.startswith('Notification list changed')) # Ask the form to regenerate the list r = self.client.post(url,dict(regenerate_addresses="1")) self.assertEqual(r.status_code,200) doc = Document.objects.get(name='conflict-review-imaginary-irtf-submission') # Regenerate does not save! self.assertEqual(doc.notify,newlist) q = PyQuery(r.content) self.assertEqual(None,q('form input[name=notify]')[0].value)
def test_edit_material_presentations(self): doc = self.create_slides() meeting = make_meeting_test_data() meeting.session_set.filter(group__acronym='mars').update(group=doc.group) session = meeting.agenda.assignments.filter(session__group__acronym='testteam').first().session url = urlreverse(edit_material_presentations,kwargs=dict(name=doc.name,acronym='testteam',seq=1)) login_testing_unauthorized(self, "secretary", url) r = self.client.get(url) self.assertEqual(r.status_code, 200) self.assertEqual(doc.sessionpresentation_set.count(),0) # add the materials to a session r = self.client.post(url, dict(action="Save",version="00")) self.assertEqual(r.status_code, 302) self.assertEqual(doc.sessionpresentation_set.first().session , session) # change the version r = self.client.post(url, dict(action="Save",version="01")) self.assertEqual(r.status_code, 302) self.assertEqual(doc.sessionpresentation_set.first().session , session) # take the slides back off that meeting r = self.client.post(url, dict(action="Save",version="notpresented")) self.assertEqual(r.status_code, 302) self.assertEqual(doc.sessionpresentation_set.count(),0)
def test_add_comment(self): draft = make_test_data() url = urlreverse('doc_add_comment', kwargs=dict(name=draft.name)) login_testing_unauthorized(self, "secretary", url) # normal get r = self.client.get(url) self.assertEqual(r.status_code, 200) q = PyQuery(r.content) self.assertEqual(len(q('form textarea[name=comment]')), 1) # request resurrect events_before = draft.docevent_set.count() mailbox_before = len(outbox) r = self.client.post(url, dict(comment="This is a test.")) self.assertEqual(r.status_code, 302) self.assertEqual(draft.docevent_set.count(), events_before + 1) self.assertEqual("This is a test.", draft.latest_event().desc) self.assertEqual("added_comment", draft.latest_event().type) self.assertEqual(len(outbox), mailbox_before + 1) self.assertTrue("updated" in outbox[-1]['Subject']) self.assertTrue(draft.name in outbox[-1]['Subject']) # Make sure we can also do it as IANA 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 textarea[name=comment]')), 1)
def test_edit_wgaction(self): from ietf.utils.test_data import make_test_data from ietf.person.models import Person make_test_data() wga = WGAction.objects.all()[0] url = urlreverse('iesg_edit_working_group_action', kwargs=dict(wga_id=wga.pk)) login_testing_unauthorized(self, "secretary", url) # normal get r = self.client.get(url) self.assertEquals(r.status_code, 200) q = PyQuery(r.content) self.assertEquals(len(q('form select[name=token_name]')), 1) self.assertEquals(len(q('form select[name=telechat_date]')), 1) # change dates = TelechatDate.objects.active() token_name = Person.objects.get(name="Ad No1").plain_name() old = wga.pk r = self.client.post(url, dict(status_date=dates[0].date.isoformat(), token_name=token_name, category="23", note="Testing.", telechat_date=dates[3].date.isoformat())) self.assertEquals(r.status_code, 302) wga = WGAction.objects.get(pk=old) self.assertEquals(wga.status_date, dates[0].date) self.assertEquals(wga.token_name, token_name) self.assertEquals(wga.category, 23) self.assertEquals(wga.note, "Testing.") self.assertEquals(wga.telechat_date, dates[3].date)
def test_material_presentations(self): doc = self.create_slides() meeting = make_meeting_test_data() meeting.session_set.filter(group__acronym='mars').update(group=doc.group) url = urlreverse(material_presentations,kwargs=dict(name=doc.name)) login_testing_unauthorized(self, "secretary", url) r = self.client.get(url) self.assertEqual(r.status_code, 200) url = urlreverse(material_presentations,kwargs=dict(name=doc.name,seq=1)) r = self.client.get(url) self.assertEqual(r.status_code, 200) when = meeting.agenda.assignments.filter(session__group__acronym='testteam').first().timeslot.time mdw = when.date().isoformat() dow = ['mon','tue','wed','thu','fri','sat','sun'][when.weekday()] for kw in [ dict(), dict(seq=1), dict(week_day=dow), dict(week_day=dow,seq=1), dict(date=mdw), dict(date=mdw,seq=1), dict(date=mdw+'-0930'), dict(date=mdw+'-0930',seq=1), ]: kw['name'] = doc.name kw['acronym'] = 'testteam' url = urlreverse(material_presentations,kwargs=kw) r = self.client.get(url) self.assertEqual(r.status_code, 200)
def test_make_last_call(self): draft = make_test_data() draft.set_state(State.objects.get(used=True, type="draft-iesg", slug="lc-req")) url = urlreverse('doc_make_last_call', kwargs=dict(name=draft.name)) login_testing_unauthorized(self, "secretary", url) # normal get r = self.client.get(url) self.assertEqual(r.status_code, 200) q = PyQuery(r.content) self.assertEqual(len(q('input[name=last_call_sent_date]')), 1) # make last call mailbox_before = len(outbox) expire_date = q('input[name=last_call_expiration_date]')[0].get("value") r = self.client.post(url, dict(last_call_sent_date=q('input[name=last_call_sent_date]')[0].get("value"), last_call_expiration_date=expire_date )) self.assertEqual(r.status_code, 302) draft = Document.objects.get(name=draft.name) self.assertEqual(draft.get_state_slug("draft-iesg"), "lc") self.assertEqual(draft.latest_event(LastCallDocEvent, "sent_last_call").expires.strftime("%Y-%m-%d"), expire_date) self.assertEqual(len(outbox), mailbox_before + 4) self.assertTrue("Last Call" in outbox[-4]['Subject']) # the IANA copy self.assertTrue("Last Call" in outbox[-3]['Subject']) self.assertTrue("Last Call" in draft.message_set.order_by("-time")[0].subject)
def test_edit_wgaction(self): wga = WGAction.objects.all()[0] url = urlreverse('iesg_edit_working_group_action', kwargs=dict(wga_id=wga.pk)) login_testing_unauthorized(self, "klm", url) # normal get r = self.client.get(url) self.assertEquals(r.status_code, 200) q = PyQuery(r.content) self.assertEquals(len(q('form select[name=token_name]')), 1) self.assertEquals(len(q('form select[name=telechat_date]')), 1) # change dates = TelechatDates.objects.all()[0] token_name = IESGLogin.active_iesg().exclude(first_name=wga.token_name)[0].first_name old = wga.pk r = self.client.post(url, dict(status_date=dates.date1.isoformat(), token_name=token_name, category="23", note="Testing.", telechat_date=dates.date4.isoformat())) self.assertEquals(r.status_code, 302) wga = WGAction.objects.get(pk=old) self.assertEquals(wga.status_date, dates.date1) self.assertEquals(wga.token_name, token_name) self.assertEquals(wga.category, 23) self.assertEquals(wga.note, "Testing.") self.assertEquals(wga.telechat_date, dates.date4)
def test_conclude(self): make_test_data() group = Group.objects.get(acronym="mars") url = urlreverse('ietf.group.edit.conclude', kwargs=dict(group_type=group.type_id, acronym=group.acronym)) login_testing_unauthorized(self, "secretary", url) # normal get r = self.client.get(url) self.assertEqual(r.status_code, 200) q = PyQuery(r.content) self.assertEqual(len(q('form textarea[name=instructions]')), 1) # faulty post r = self.client.post(url, dict(instructions="")) # No instructions self.assertEqual(r.status_code, 200) q = PyQuery(r.content) self.assertTrue(len(q('form ul.errorlist')) > 0) # request conclusion mailbox_before = len(outbox) r = self.client.post(url, dict(instructions="Test instructions")) self.assertEqual(r.status_code, 302) self.assertEqual(len(outbox), mailbox_before + 1) # the WG remains active until the Secretariat takes action group = Group.objects.get(acronym=group.acronym) self.assertEqual(group.state_id, "active")
def test_approval(self): make_test_data() liaison = make_liaison_models() # has to come from WG to need approval liaison.from_group = Group.objects.get(acronym="mars") liaison.approved = None liaison.save() url = urlreverse('liaison_approval_detail', kwargs=dict(object_id=liaison.pk)) # this liaison is for a WG so we need the AD for the area login_testing_unauthorized(self, "ad", url) # normal get r = self.client.get(url) self.assertEquals(r.status_code, 200) q = PyQuery(r.content) self.assertEquals(len(q('form input[name=do_approval]')), 1) # approve mailbox_before = len(outbox) r = self.client.post(url, dict(do_approval="1")) self.assertEquals(r.status_code, 302) liaison = LiaisonStatement.objects.get(id=liaison.id) self.assertTrue(liaison.approved) self.assertEquals(len(outbox), mailbox_before + 1) self.assertTrue("Liaison Statement" in outbox[-1]["Subject"])
def test_edit_lc(self): doc = Document.objects.get(name='status-change-imaginary-mid-review') url = urlreverse('status_change_last_call', kwargs=dict(name=doc.name)) login_testing_unauthorized(self, "ad", url) # additional setup doc.relateddocument_set.create( target=DocAlias.objects.get(name='rfc9999'), relationship_id='tois') doc.relateddocument_set.create( target=DocAlias.objects.get(name='rfc9998'), relationship_id='tohist') doc.ad = Person.objects.get(name='Ad No2') doc.save() # get r = self.client.get(url) self.assertEquals(r.status_code, 200) q = PyQuery(r.content) self.assertEquals(len(q('form.edit-last-call-text')), 1) self.assertTrue('RFC9999 from Proposed Standard to Internet Standard' in ''.join(wrap(r.content, 2**16))) self.assertTrue('RFC9998 from Informational to Historic' in ''.join( wrap(r.content, 2**16))) # save r = self.client.post( url, dict(last_call_text="Bogus last call text", save_last_call_text="1")) self.assertEquals(r.status_code, 200) last_call_event = doc.latest_event(WriteupDocEvent, type="changed_last_call_text") self.assertEquals(last_call_event.text, "Bogus last call text") # reset r = self.client.post(url, dict(regenerate_last_call_text="1")) self.assertEquals(r.status_code, 200) self.assertTrue('RFC9999 from Proposed Standard to Internet Standard' in ''.join(wrap(r.content, 2**16))) self.assertTrue('RFC9998 from Informational to Historic' in ''.join( wrap(r.content, 2**16))) # request last call messages_before = len(outbox) r = self.client.post( url, dict(last_call_text='stuff', send_last_call_request='Save+and+Request+Last+Call')) self.assertEquals(r.status_code, 200) self.assertTrue( 'Last Call Requested' in ''.join(wrap(r.content, 2**16))) self.assertEquals(len(outbox), messages_before + 1) self.assertTrue('iesg-secretary' in outbox[-1]['To']) self.assertTrue('Last Call:' in outbox[-1]['Subject']) self.assertTrue('Last Call Request has been submitted' in ''.join( wrap(unicode(outbox[-1]), 2**16)))
def test_revise(self): doc = self.create_slides() session = Session.objects.create( name = "session-42-mars-1", meeting = Meeting.objects.get(number='42'), group = Group.objects.get(acronym='mars'), status = SessionStatusName.objects.create(slug='scheduled', name='Scheduled'), modified = datetime.datetime.now(), requested_by = Person.objects.get(user__username="******"), type_id="session", ) SessionPresentation.objects.create(session=session, document=doc, rev=doc.rev) url = urlreverse('material_edit', kwargs=dict(name=doc.name, action="revise")) login_testing_unauthorized(self, "secretary", url) content = "some text" test_file = StringIO(content) test_file.name = "unnamed.txt" # post r = self.client.post(url, dict(title="New title", abstract="New abstract", state=State.objects.get(type="slides", slug="active").pk, material=test_file)) self.assertEqual(r.status_code, 302) doc = Document.objects.get(name=doc.name) self.assertEqual(doc.rev, "02") self.assertEqual(doc.title, "New title") self.assertEqual(doc.get_state_slug(), "active") with open(os.path.join(doc.get_file_path(), doc.name + "-" + doc.rev + ".txt")) as f: self.assertEqual(f.read(), content)
def test_edit_notices(self): doc = Document.objects.get(name='conflict-review-imaginary-irtf-submission') url = urlreverse('ietf.doc.views_doc.edit_notify;conflict-review',kwargs=dict(name=doc.name)) login_testing_unauthorized(self, "ad", url) # normal get r = self.client.get(url) self.assertEqual(r.status_code, 200) q = PyQuery(r.content) self.assertEqual(len(q('form input[name=notify]')),1) self.assertEqual(doc.notify,q('form input[name=notify]')[0].value) # change notice list newlist = '"Foo Bar" <*****@*****.**>' r = self.client.post(url,dict(notify=newlist,save_addresses="1")) self.assertEqual(r.status_code,302) doc = Document.objects.get(name='conflict-review-imaginary-irtf-submission') self.assertEqual(doc.notify,newlist) self.assertTrue(doc.latest_event(DocEvent,type="added_comment").desc.startswith('Notification list changed')) # Ask the form to regenerate the list r = self.client.post(url,dict(regenerate_addresses="1")) self.assertEqual(r.status_code,200) doc = Document.objects.get(name='conflict-review-imaginary-irtf-submission') # Regenerate does not save! self.assertEqual(doc.notify,newlist) q = PyQuery(r.content) self.assertEqual(None,q('form input[name=notify]')[0].value)
def test_initial_submission(self): doc = Document.objects.get(name='conflict-review-imaginary-irtf-submission') url = urlreverse('ietf.doc.views_conflict_review.submit',kwargs=dict(name=doc.name)) login_testing_unauthorized(self, "ad", url) # normal get r = self.client.get(url) self.assertEqual(r.status_code,200) q = PyQuery(r.content) self.assertTrue(q('textarea[name="content"]')[0].text.strip().startswith("[Edit this page")) # Faulty posts using textbox # Right now, nothing to test - we let people put whatever the web browser will let them put into that textbox # sane post using textbox path = os.path.join(settings.CONFLICT_REVIEW_PATH, '%s-%s.txt' % (doc.canonical_name(), doc.rev)) self.assertEqual(doc.rev,u'00') self.assertFalse(os.path.exists(path)) r = self.client.post(url,dict(content="Some initial review text\n",submit_response="1")) self.assertEqual(r.status_code,302) doc = Document.objects.get(name='conflict-review-imaginary-irtf-submission') self.assertEqual(doc.rev,u'00') with open(path) as f: self.assertEqual(f.read(),"Some initial review text\n") f.close() self.assertTrue( "submission-00" in doc.latest_event(NewRevisionDocEvent).desc)
def test_initial_submission(self): doc = Document.objects.get(name='conflict-review-imaginary-irtf-submission') url = urlreverse('conflict_review_submit',kwargs=dict(name=doc.name)) login_testing_unauthorized(self, "ad", url) # normal get r = self.client.get(url) self.assertEqual(r.status_code,200) q = PyQuery(r.content) self.assertTrue(q('textarea[name="content"]')[0].text.strip().startswith("[Edit this page")) # Faulty posts using textbox # Right now, nothing to test - we let people put whatever the web browser will let them put into that textbox # sane post using textbox path = os.path.join(settings.CONFLICT_REVIEW_PATH, '%s-%s.txt' % (doc.canonical_name(), doc.rev)) self.assertEqual(doc.rev,u'00') self.assertFalse(os.path.exists(path)) r = self.client.post(url,dict(content="Some initial review text\n",submit_response="1")) self.assertEqual(r.status_code,302) doc = Document.objects.get(name='conflict-review-imaginary-irtf-submission') self.assertEqual(doc.rev,u'00') with open(path) as f: self.assertEqual(f.read(),"Some initial review text\n") f.close() self.assertTrue( "submission-00" in doc.latest_event(NewRevisionDocEvent).desc)
def test_manage_stream_delegates(self): make_test_data() url = urlreverse('stream_delegates', kwargs=dict(stream_name="IETF")) login_testing_unauthorized(self, "secretary", url) # get r = self.client.get(url) self.assertEquals(r.status_code, 200) q = PyQuery(r.content) self.assertEquals(len(q('input[type=submit][value*=Add]')), 1) delegate = Email.objects.get(address="*****@*****.**") # add delegate r = self.client.post(url, dict(email=delegate.address)) self.assertEquals(r.status_code, 200) self.assertEquals( Role.objects.filter( group__acronym="ietf", name="delegate", person__email__address=delegate.address).count(), 1) # remove delegate again r = self.client.post( url, dict(remove_delegate=[delegate.person.pk], delete="1")) self.assertEquals(r.status_code, 200) self.assertEquals( Role.objects.filter( group__acronym="ietf", name="delegate", person__email__address=delegate.address).count(), 0)
def testAliases(self): url = urlreverse('old_group_email_aliases', kwargs=dict(acronym="mars")) r = self.client.get(url) self.assertEqual(r.status_code, 302) for testdict in [dict(acronym="mars"),dict(acronym="mars",group_type="wg")]: url = urlreverse('old_group_email_aliases', kwargs=testdict) r = self.client.get(url,follow=True) self.assertTrue(all([x in unicontent(r) for x in ['mars-ads@','mars-chairs@']])) self.assertFalse(any([x in unicontent(r) for x in ['ames-ads@','ames-chairs@']])) url = urlreverse('ietf.group.info.email_aliases', kwargs=dict()) login_testing_unauthorized(self, "plain", url) r = self.client.get(url) self.assertTrue(r.status_code,200) self.assertTrue(all([x in unicontent(r) for x in ['mars-ads@','mars-chairs@','ames-ads@','ames-chairs@']])) url = urlreverse('ietf.group.info.email_aliases', kwargs=dict(group_type="wg")) r = self.client.get(url) self.assertEqual(r.status_code,200) self.assertTrue('mars-ads@' in unicontent(r)) url = urlreverse('ietf.group.info.email_aliases', kwargs=dict(group_type="rg")) r = self.client.get(url) self.assertEqual(r.status_code,200) self.assertFalse('mars-ads@' in unicontent(r))
def test_create_rg(self): make_test_data() url = urlreverse('group_create', kwargs=dict(group_type="rg")) login_testing_unauthorized(self, "secretary", url) irtf = Group.objects.get(acronym='irtf') num_rgs = len(Group.objects.filter(type="rg")) proposed_state = GroupStateName.objects.get(slug="proposed") # normal get r = self.client.get(url) self.assertEqual(r.status_code, 200) q = PyQuery(r.content) self.assertEqual(len(q('form input[name=acronym]')), 1) self.assertEqual(q('form input[name=parent]').attr('value'),'%s'%irtf.pk) r = self.client.post(url, dict(acronym="testrg", name="Testing RG", state=proposed_state.pk, parent=irtf.pk)) self.assertEqual(r.status_code, 302) self.assertEqual(len(Group.objects.filter(type="rg")), num_rgs + 1) group = Group.objects.get(acronym="testrg") self.assertEqual(group.name, "Testing RG") self.assertEqual(group.charter.name, "charter-irtf-testrg") self.assertEqual(group.charter.rev, "00-00") self.assertEqual(group.parent.acronym,'irtf')
def test_edit_telechat_date(self): doc = Document.objects.get( name='conflict-review-imaginary-irtf-submission') url = urlreverse('conflict_review_telechat_date', kwargs=dict(name=doc.name)) login_testing_unauthorized(self, "ad", url) # normal get r = self.client.get(url) self.assertEquals(r.status_code, 200) q = PyQuery(r.content) self.assertEquals(len(q('select[name=telechat_date]')), 1) # set a date self.assertFalse( doc.latest_event(TelechatDocEvent, "scheduled_for_telechat")) telechat_date = TelechatDate.objects.active().order_by('date')[0].date r = self.client.post(url, dict(telechat_date=telechat_date.isoformat())) self.assertEquals(r.status_code, 302) doc = Document.objects.get( name='conflict-review-imaginary-irtf-submission') self.assertEquals( doc.latest_event(TelechatDocEvent, "scheduled_for_telechat").telechat_date, telechat_date) # move it forward a telechat (this should set the returning item bit) telechat_date = TelechatDate.objects.active().order_by('date')[1].date r = self.client.post(url, dict(telechat_date=telechat_date.isoformat())) self.assertEquals(r.status_code, 302) doc = Document.objects.get( name='conflict-review-imaginary-irtf-submission') self.assertTrue(doc.returning_item()) # clear the returning item bit r = self.client.post(url, dict(telechat_date=telechat_date.isoformat())) self.assertEquals(r.status_code, 302) doc = Document.objects.get( name='conflict-review-imaginary-irtf-submission') self.assertFalse(doc.returning_item()) # set the returning item bit without changing the date r = self.client.post( url, dict(telechat_date=telechat_date.isoformat(), returning_item="on")) self.assertEquals(r.status_code, 302) doc = Document.objects.get( name='conflict-review-imaginary-irtf-submission') self.assertTrue(doc.returning_item()) # Take the doc back off any telechat r = self.client.post(url, dict(telechat_date="")) self.assertEquals(r.status_code, 302) self.assertEquals( doc.latest_event(TelechatDocEvent, "scheduled_for_telechat").telechat_date, None)
def test_edit_telechat_date(self): make_test_data() group = Group.objects.get(acronym="mars") charter = group.charter url = urlreverse('charter_telechat_date', kwargs=dict(name=charter.name)) login_testing_unauthorized(self, "secretary", url) # add to telechat self.assertTrue(not charter.latest_event(TelechatDocEvent, "scheduled_for_telechat")) telechat_date = TelechatDate.objects.active()[0].date r = self.client.post(url, dict(name=group.name, acronym=group.acronym, telechat_date=telechat_date.isoformat())) self.assertEquals(r.status_code, 302) charter = Document.objects.get(name=charter.name) self.assertTrue(charter.latest_event(TelechatDocEvent, "scheduled_for_telechat")) self.assertEquals(charter.latest_event(TelechatDocEvent, "scheduled_for_telechat").telechat_date, telechat_date) # change telechat telechat_date = TelechatDate.objects.active()[1].date r = self.client.post(url, dict(name=group.name, acronym=group.acronym, telechat_date=telechat_date.isoformat())) self.assertEquals(r.status_code, 302) charter = Document.objects.get(name=charter.name) self.assertEquals(charter.latest_event(TelechatDocEvent, "scheduled_for_telechat").telechat_date, telechat_date) # remove from agenda telechat_date = "" r = self.client.post(url, dict(name=group.name, acronym=group.acronym, telechat_date=telechat_date)) self.assertEquals(r.status_code, 302) charter = Document.objects.get(name=charter.name) self.assertTrue(not charter.latest_event(TelechatDocEvent, "scheduled_for_telechat").telechat_date)
def test_upload_slides(self): group = Group.objects.create(type_id="team", acronym="testteam", name="Test Team", state_id="active") url = urlreverse('ietf.doc.views_material.edit_material', kwargs=dict(acronym=group.acronym, doc_type="slides")) login_testing_unauthorized(self, "secretary", url) # normal get r = self.client.get(url) self.assertEqual(r.status_code, 200) content = "%PDF-1.5\n..." test_file = StringIO(content) test_file.name = "unnamed.pdf" # faulty post r = self.client.post( url, dict(title="", name="", state="", material=test_file)) self.assertEqual(r.status_code, 200) q = PyQuery(r.content) self.assertTrue(len(q('.has-error')) > 0) test_file.seek(0) # post r = self.client.post( url, dict(title="Test File - with fancy title", abstract="Test Abstract", name="slides-%s-test-file" % group.acronym, state=State.objects.get(type="slides", slug="active").pk, material=test_file)) self.assertEqual(r.status_code, 302) doc = Document.objects.get(name="slides-%s-test-file" % group.acronym) self.assertEqual(doc.rev, "00") self.assertEqual(doc.title, "Test File - with fancy title") self.assertEqual(doc.get_state_slug(), "active") with open( os.path.join(self.materials_dir, "slides", doc.name + "-" + doc.rev + ".pdf")) as f: self.assertEqual(f.read(), content) # check that posting same name is prevented test_file.seek(0) r = self.client.post( url, dict(title="Test File", name=doc.name, state=State.objects.get(type="slides", slug="active").pk, material=test_file)) self.assertEqual(r.status_code, 200) self.assertTrue(len(q('.has-error')) > 0)
def test_notify_page(self): # check that we can get the notify page url = urlreverse("ietf.sync.views.notify", kwargs=dict(org="iana", notification="changes")) login_testing_unauthorized(self, "secretary", url) r = self.client.get(url) self.assertEqual(r.status_code, 200) self.assertTrue("new changes at" in unicontent(r))
def test_delete_wgaction(self): wga = WGAction.objects.all()[0] url = urlreverse('iesg_edit_working_group_action', kwargs=dict(wga_id=wga.pk)) login_testing_unauthorized(self, "klm", url) r = self.client.post(url, dict(delete="1")) self.assertEquals(r.status_code, 302) self.assertTrue(not WGAction.objects.filter(pk=wga.pk))
def test_approve(self): doc = Document.objects.get(name='status-change-imaginary-mid-review') url = urlreverse('status_change_approve', kwargs=dict(name=doc.name)) login_testing_unauthorized(self, "secretary", url) # Some additional setup doc.relateddocument_set.create( target=DocAlias.objects.get(name='rfc9999'), relationship_id='tois') doc.relateddocument_set.create( target=DocAlias.objects.get(name='rfc9998'), relationship_id='tohist') create_ballot_if_not_open(doc, Person.objects.get(name="Sec Retary"), "statchg") doc.set_state(State.objects.get(slug='appr-pend', type='statchg')) doc.save() # get r = self.client.get(url) self.assertEquals(r.status_code, 200) q = PyQuery(r.content) self.assertEquals(len(q('form.approve')), 1) # There should be two messages to edit self.assertEquals(q('input#id_form-TOTAL_FORMS').val(), '2') self.assertTrue('(rfc9999) to Internet Standard' in ''.join( wrap(r.content, 2**16))) self.assertTrue( '(rfc9998) to Historic' in ''.join(wrap(r.content, 2**16))) # submit messages_before = len(outbox) msg0 = default_approval_text(doc, doc.relateddocument_set.all()[0]) msg1 = default_approval_text(doc, doc.relateddocument_set.all()[1]) r = self.client.post( url, { 'form-0-announcement_text': msg0, 'form-1-announcement_text': msg1, 'form-TOTAL_FORMS': '2', 'form-INITIAL_FORMS': '2', 'form-MAX_NUM_FORMS': '' }) self.assertEquals(r.status_code, 302) doc = Document.objects.get(name='status-change-imaginary-mid-review') self.assertEquals(doc.get_state_slug(), 'appr-sent') self.assertFalse(doc.ballot_open("statchg")) self.assertEquals(len(outbox), messages_before + 2) self.assertTrue('Action:' in outbox[-1]['Subject']) self.assertTrue('(rfc9999) to Internet Standard' in ''.join( wrap(unicode(outbox[-1]) + unicode(outbox[-2]), 2**16))) self.assertTrue('(rfc9998) to Historic' in ''.join( wrap(unicode(outbox[-1]) + unicode(outbox[-2]), 2**16))) self.assertTrue( doc.latest_event(DocEvent, type="added_comment").desc.startswith( 'The following approval message was sent'))
def test_delete_possible_wg(self): url = urlreverse('iesg_working_group_actions') login_testing_unauthorized(self, "klm", url) r = self.client.post(url, dict(delete="1", filename='sieve-charter.txt')) self.assertEquals(r.status_code, 200) self.assertTrue('(sieve)' not in r.content)
def test_edit_approval_text(self): draft = make_test_data() url = urlreverse('ietf.doc.views_ballot.ballot_approvaltext', kwargs=dict(name=draft.name)) login_testing_unauthorized(self, "secretary", url) # normal get r = self.client.get(url) self.assertEqual(r.status_code, 200) q = PyQuery(r.content) self.assertEqual(len(q('textarea[name=approval_text]')), 1) self.assertTrue(q('[type=submit]:contains("Save")')) # save r = self.client.post( url, dict(approval_text="This is a simple test.", save_approval_text="1")) self.assertEqual(r.status_code, 200) draft = Document.objects.get(name=draft.name) self.assertTrue("This is a simple test" in draft.latest_event( WriteupDocEvent, type="changed_ballot_approval_text").text) # test regenerate r = self.client.post(url, dict(regenerate_approval_text="1")) self.assertEqual(r.status_code, 200) self.assertTrue("Subject: Protocol Action" in draft.latest_event( WriteupDocEvent, type="changed_ballot_approval_text").text) # test regenerate when it's a disapprove draft.set_state( State.objects.get(used=True, type="draft-iesg", slug="nopubadw")) r = self.client.post(url, dict(regenerate_approval_text="1")) self.assertEqual(r.status_code, 200) self.assertTrue("NOT be published" in draft.latest_event( WriteupDocEvent, type="changed_ballot_approval_text").text) # test regenerate when it's a conflict review draft.group = Group.objects.get(type="individ") draft.stream_id = "irtf" draft.set_state( State.objects.get(used=True, type="draft-iesg", slug="iesg-eva")) draft.save_with_history([ DocEvent.objects.create( doc=draft, rev=draft.rev, type="changed_document", by=Person.objects.get(user__username="******"), desc="Test") ]) r = self.client.post(url, dict(regenerate_approval_text="1")) self.assertEqual(r.status_code, 200) self.assertTrue( "Subject: Results of IETF-conflict review" in draft.latest_event( WriteupDocEvent, type="changed_ballot_approval_text").text)
def test_approve_ballot(self): draft = make_test_data() draft.set_state( State.objects.get(used=True, type="draft-iesg", slug="iesg-eva")) # make sure it's approvable url = urlreverse('ietf.doc.views_ballot.approve_ballot', kwargs=dict(name=draft.name)) login_testing_unauthorized(self, "secretary", url) # normal get r = self.client.get(url) self.assertEqual(r.status_code, 200) q = PyQuery(r.content) self.assertTrue(q('[type=submit]:contains("send announcement")')) self.assertEqual( len(q('form pre:contains("Subject: Protocol Action")')), 1) self.assertEqual( len(q('form pre:contains("This is a note for the RFC Editor")')), 0) # add a note to the RFC Editor WriteupDocEvent.objects.create( doc=draft, rev=draft.rev, desc="Changed text", type="changed_rfc_editor_note_text", text="This is a note for the RFC Editor.", by=Person.objects.get(name="(System)")) r = self.client.get(url) self.assertEqual(r.status_code, 200) q = PyQuery(r.content) self.assertTrue(q('[type=submit]:contains("send announcement")')) self.assertEqual( len(q('form pre:contains("Subject: Protocol Action")')), 1) self.assertEqual( len(q('form pre:contains("This is a note for the RFC Editor")')), 1) # approve mailbox_before = len(outbox) r = self.client.post(url, dict(skiprfceditorpost="1")) self.assertEqual(r.status_code, 302) draft = Document.objects.get(name=draft.name) self.assertEqual(draft.get_state_slug("draft-iesg"), "ann") self.assertEqual(len(outbox), mailbox_before + 2) self.assertTrue("Protocol Action" in outbox[-2]['Subject']) self.assertTrue("ietf-announce" in outbox[-2]['To']) self.assertTrue("rfc-editor" in outbox[-2]['Cc']) # the IANA copy self.assertTrue("Protocol Action" in outbox[-1]['Subject']) self.assertTrue(not outbox[-1]['CC']) self.assertTrue('*****@*****.**' in outbox[-1]['To']) self.assertTrue("Protocol Action" in draft.message_set.order_by( "-time")[0].subject)