def test_agenda(self): r = self.client.get(urlreverse("ietf.iesg.views.agenda")) self.assertEqual(r.status_code, 200) for k, d in self.telechat_docs.iteritems(): self.assertTrue(d.name in unicontent(r), "%s not in response" % k) self.assertTrue(d.title in unicontent(r), "%s title not in response" % k)
def test_iprs_for_drafts(self): draft = make_test_data() ipr = IprDisclosureBase.objects.get(title='Statement regarding rights') r = self.client.get(urlreverse("ietf.ipr.views.by_draft_txt")) self.assertEqual(r.status_code, 200) self.assertTrue(draft.name in unicontent(r)) self.assertTrue(str(ipr.pk) in unicontent(r))
def test_group_charter(self): draft = make_test_data() group = draft.group with open(os.path.join(self.charter_dir, "%s-%s.txt" % (group.charter.canonical_name(), group.charter.rev)), "w") as f: f.write("This is a charter.") milestone = GroupMilestone.objects.create( group=group, state_id="active", desc="Get Work Done", due=datetime.date.today() + datetime.timedelta(days=100)) milestone.docs.add(draft) for url in [group.about_url(), urlreverse('ietf.group.info.group_about',kwargs=dict(acronym=group.acronym)), urlreverse('ietf.group.info.group_about',kwargs=dict(acronym=group.acronym,group_type=group.type_id)), ]: r = self.client.get(url) self.assertEqual(r.status_code, 200) self.assertTrue(group.name in unicontent(r)) self.assertTrue(group.acronym in unicontent(r)) self.assertTrue("This is a charter." in unicontent(r)) self.assertTrue(milestone.desc in unicontent(r)) self.assertTrue(milestone.docs.all()[0].name in unicontent(r))
def test_submit_update_individual(self): draft = make_test_data() replaces_count = draft.relateddocument_set.filter(relationship_id='replaces').count() name = draft.name rev = '%02d'%(int(draft.rev)+1) status_url = self.do_submission(name,rev) mailbox_before = len(outbox) replaced_alias = draft.docalias_set.first() r = self.supply_extra_metadata(name, status_url, "Submitter Name", "*****@*****.**", replaces=str(replaced_alias.pk)) self.assertEqual(r.status_code, 200) self.assertTrue('cannot replace itself' in unicontent(r)) replaced_alias = DocAlias.objects.get(name='draft-ietf-random-thing') r = self.supply_extra_metadata(name, status_url, "Submitter Name", "*****@*****.**", replaces=str(replaced_alias.pk)) self.assertEqual(r.status_code, 200) self.assertTrue('cannot replace an RFC' in unicontent(r)) replaced_alias.document.set_state(State.objects.get(type='draft-iesg',slug='approved')) replaced_alias.document.set_state(State.objects.get(type='draft',slug='active')) r = self.supply_extra_metadata(name, status_url, "Submitter Name", "*****@*****.**", replaces=str(replaced_alias.pk)) self.assertEqual(r.status_code, 200) self.assertTrue('approved by the IESG and cannot' in unicontent(r)) r = self.supply_extra_metadata(name, status_url, "Submitter Name", "*****@*****.**", replaces='') self.assertEqual(r.status_code, 302) status_url = r["Location"] r = self.client.get(status_url) self.assertEqual(len(outbox), mailbox_before + 1) confirm_url = self.extract_confirm_url(outbox[-1]) mailbox_before = len(outbox) r = self.client.post(confirm_url) self.assertEqual(r.status_code, 302) draft = Document.objects.get(docalias__name=name) self.assertEqual(draft.rev, rev) self.assertEqual(draft.relateddocument_set.filter(relationship_id='replaces').count(), replaces_count)
def test_feed(self): draft = make_test_data() url = urlreverse(ietf.community.views.feed, kwargs={ "username": "******" }) # without list r = self.client.get(url) self.assertEqual(r.status_code, 200) # with list clist = CommunityList.objects.create(user=User.objects.get(username="******")) clist.added_docs.add(draft) SearchRule.objects.create( community_list=clist, rule_type="name_contains", state=State.objects.get(type="draft", slug="active"), text="test", ) r = self.client.get(url) self.assertEqual(r.status_code, 200) self.assertTrue(draft.name in unicontent(r)) # only significant r = self.client.get(url + "?significant=1") self.assertEqual(r.status_code, 200) self.assertTrue('<entry>' not in unicontent(r))
def test_feed(self): r = self.client.get("/feed/iesg-agenda/") self.assertEqual(r.status_code, 200) for d in self.telechat_docs.values(): self.assertTrue(d.name in unicontent(r)) self.assertTrue(d.title in unicontent(r))
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_document_primary_and_history_views(self): make_test_data() # Ensure primary views of both current and historic versions of documents works for docname in ["draft-imaginary-independent-submission", "conflict-review-imaginary-irtf-submission", "status-change-imaginary-mid-review", "charter-ietf-mars", "agenda-42-mars", "minutes-42-mars", "slides-42-mars-1", ]: doc = Document.objects.get(name=docname) # give it some history save_document_in_history(doc) doc.rev="01" doc.save() r = self.client.get(urlreverse("doc_view", kwargs=dict(name=doc.name))) self.assertEqual(r.status_code, 200) self.assertTrue("%s-01"%docname in unicontent(r)) r = self.client.get(urlreverse("doc_view", kwargs=dict(name=doc.name,rev="01"))) self.assertEqual(r.status_code, 302) r = self.client.get(urlreverse("doc_view", kwargs=dict(name=doc.name,rev="00"))) self.assertEqual(r.status_code, 200) self.assertTrue("%s-00"%docname in unicontent(r))
def test_not_meeting(self): make_test_data() group = Group.objects.get(acronym='mars') url = reverse('sessions_no_session',kwargs={'acronym':group.acronym}) self.client.login(username="******", password="******") empty_outbox() r = self.client.get(url,follow=True) # If the view invoked by that get throws an exception (such as an integrity error), # the traceback from this test will talk about a TransactionManagementError and # yell about executing queries before the end of an 'atomic' block # This is a sign of a problem - a get shouldn't have a side-effect like this one does self.assertEqual(r.status_code, 200) self.assertTrue('A message was sent to notify not having a session' in unicontent(r)) r = self.client.get(url,follow=True) self.assertEqual(r.status_code, 200) self.assertTrue('is already marked as not meeting' in unicontent(r)) self.assertEqual(len(outbox),1) self.assertTrue('Not having a session' in outbox[0]['Subject']) self.assertTrue('session-request@' in outbox[0]['To'])
def test_materials(self): make_test_data() group = Group.objects.create(type_id="team", acronym="testteam", name="Test Team", state_id="active") doc = Document.objects.create( name="slides-testteam-test-slides", rev="00", title="Test Slides", group=group, type_id="slides", ) doc.set_state(State.objects.get(type="slides", slug="active")) DocAlias.objects.create(name=doc.name, document=doc) for url in [ urlreverse("group_materials", kwargs={ 'acronym': group.acronym }), urlreverse("group_materials", kwargs={ 'acronym': group.acronym , 'group_type': group.type_id}), ]: r = self.client.get(url) self.assertEqual(r.status_code, 200) self.assertTrue(doc.title in unicontent(r)) self.assertTrue(doc.name in unicontent(r)) url = urlreverse("group_materials", kwargs={ 'acronym': group.acronym }) # try deleting the document and check it's gone doc.set_state(State.objects.get(type="slides", slug="deleted")) r = self.client.get(url) self.assertEqual(r.status_code, 200) self.assertTrue(doc.title not in unicontent(r))
def testExpansions(self): url = urlreverse('ietf.group.info.email', kwargs=dict(acronym="mars")) r = self.client.get(url) self.assertEqual(r.status_code,200) self.assertTrue('Email aliases' in unicontent(r)) self.assertTrue('*****@*****.**' in unicontent(r)) self.assertTrue('group_personnel_change' in unicontent(r))
def test_feed(self): meeting = make_meeting_test_data() session = Session.objects.filter(meeting=meeting, group__acronym="mars").first() r = self.client.get("/feed/wg-proceedings/") self.assertEqual(r.status_code, 200) self.assertTrue("agenda" in unicontent(r)) self.assertTrue(session.group.acronym in unicontent(r))
def test_subsequent_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) # A little additional setup # doc.rev is u'00' per the test setup - double-checking that here - if it fails, the breakage is in setUp self.assertEqual(doc.rev,u'00') path = os.path.join(settings.STATUS_CHANGE_PATH, '%s-%s.txt' % (doc.canonical_name(), doc.rev)) with open(path,'w') as f: f.write('This is the old proposal.') f.close() # Put the old proposal into IESG review (exercises ballot tab when looking at an older revision below) state_change_url = urlreverse('status_change_change_state',kwargs=dict(name=doc.name)) iesgeval_pk = str(State.objects.get(slug='iesgeval',type__slug='statchg').pk) r = self.client.post(state_change_url,dict(new_state=iesgeval_pk)) self.assertEqual(r.status_code, 302) # normal get r = self.client.get(url) self.assertEqual(r.status_code,200) q = PyQuery(r.content) self.assertTrue(q('textarea')[0].text.strip().startswith("This is the old proposal.")) # faulty posts trying to use file upload # Copied from wgtracker tests - is this really testing the server code, or is it testing # how client.post populates Content-Type? test_file = StringIO("\x10\x11\x12") # post binary file test_file.name = "unnamed" r = self.client.post(url, dict(txt=test_file,submit_response="1")) self.assertEqual(r.status_code, 200) self.assertTrue("does not appear to be a text file" in unicontent(r)) # sane post uploading a file test_file = StringIO("This is a new proposal.") test_file.name = "unnamed" r = self.client.post(url,dict(txt=test_file,submit_response="1")) self.assertEqual(r.status_code, 302) doc = Document.objects.get(name='status-change-imaginary-mid-review') self.assertEqual(doc.rev,u'01') path = os.path.join(settings.STATUS_CHANGE_PATH, '%s-%s.txt' % (doc.canonical_name(), doc.rev)) with open(path) as f: self.assertEqual(f.read(),"This is a new proposal.") f.close() self.assertTrue( "mid-review-01" in doc.latest_event(NewRevisionDocEvent).desc) # verify reset text button works r = self.client.post(url,dict(reset_text="1")) self.assertEqual(r.status_code, 200) q = PyQuery(r.content) self.assertTrue(q('textarea')[0].text.strip().startswith("Provide a description")) # make sure we can see the old revision url = urlreverse('doc_view',kwargs=dict(name=doc.name,rev='00')) r = self.client.get(url) self.assertEqual(r.status_code,200) self.assertTrue("This is the old proposal." in unicontent(r))
def test_agenda_scribe_template(self): r = self.client.get(urlreverse("ietf.iesg.views.agenda_scribe_template")) self.assertEqual(r.status_code, 200) for k, d in self.telechat_docs.iteritems(): if d.type_id == "charter": continue # scribe template doesn't contain chartering info self.assertTrue(d.name in unicontent(r), "%s not in response" % k) self.assertTrue(d.title in unicontent(r), "%s title not in response" % k)
def test_indexes(self): draft = make_test_data() r = self.client.get(urlreverse("index_all_drafts")) self.assertEqual(r.status_code, 200) self.assertTrue(draft.name in unicontent(r)) r = self.client.get(urlreverse("index_active_drafts")) self.assertEqual(r.status_code, 200) self.assertTrue(draft.title in unicontent(r))
def test_show_recipients(self): url = urlreverse('ietf.mailtrigger.views.show_recipients') r = self.client.get(url) self.assertEqual(r.status_code, 200) self.assertTrue('doc_group_mail_list' in unicontent(r)) url = urlreverse('ietf.mailtrigger.views.show_recipients',kwargs=dict(recipient_slug='doc_group_mail_list')) r = self.client.get(url) self.assertEqual(r.status_code, 200) self.assertTrue('doc_group_mail_list' in unicontent(r))
def test_iprs_for_drafts_recursive(self): draft = make_test_data() replaced = draft.all_related_that_doc(['replaces']) ipr = IprDisclosureBase.objects.get(title='Statement regarding rights') r = self.client.get( urlreverse("ietf.ipr.views.by_draft_recursive_txt")) self.assertEqual(r.status_code, 200) self.assertTrue(draft.name in unicontent(r)) for alias in replaced: self.assertTrue(alias.name in unicontent(r)) self.assertTrue(str(ipr.pk) in unicontent(r))
def test_show_triggers(self): url = urlreverse('ietf.mailtrigger.views.show_triggers') r = self.client.get(url) self.assertEqual(r.status_code, 200) self.assertTrue('ballot_saved' in unicontent(r)) url = urlreverse('ietf.mailtrigger.views.show_triggers',kwargs=dict(mailtrigger_slug='ballot_saved')) r = self.client.get(url) self.assertEqual(r.status_code, 200) self.assertTrue('ballot_saved' in unicontent(r))
def test_agenda_txt(self): r = self.client.get(urlreverse("ietf.iesg.views.agenda_txt")) self.assertEqual(r.status_code, 200) for k, d in self.telechat_docs.iteritems(): if d.type_id == "charter": self.assertTrue(d.group.name in unicontent(r), "%s not in response" % k) self.assertTrue(d.group.acronym in unicontent(r), "%s acronym not in response" % k) else: self.assertTrue(d.name in unicontent(r), "%s not in response" % k) self.assertTrue(d.title in unicontent(r), "%s title not in response" % k)
def testAliases(self): url = urlreverse('doc_specific_email_aliases', kwargs=dict(name="draft-ietf-mars-test")) r = self.client.get(url) self.assertEqual(r.status_code, 302) url = urlreverse('ietf.doc.views_doc.email_aliases', kwargs=dict()) login_testing_unauthorized(self, "plain", url) r = self.client.get(url) self.assertEqual(r.status_code, 200) self.assertTrue(all([x in unicontent(r) for x in ['mars-test@','mars-test.authors@','mars-test.chairs@']])) self.assertTrue(all([x in unicontent(r) for x in ['ames-test@','ames-test.authors@','ames-test.chairs@']]))
def test_drafts_pages(self): draft = make_test_data() r = self.client.get(urlreverse("docs_for_ad", kwargs=dict(name=draft.ad.full_name_as_key()))) self.assertEqual(r.status_code, 200) self.assertTrue(draft.title in unicontent(r)) draft.set_state(State.objects.get(type="draft-iesg", slug="lc")) r = self.client.get(urlreverse("drafts_in_last_call")) self.assertEqual(r.status_code, 200) self.assertTrue(draft.title in unicontent(r))
def test_document_nonietf_pubreq_button(self): doc = make_test_data() self.client.login(username='******', password='******') r = self.client.get(urlreverse("doc_view", kwargs=dict(name=doc.name))) self.assertEqual(r.status_code, 200) self.assertTrue("Request publication" not in unicontent(r)) Document.objects.filter(pk=doc.pk).update(stream='iab') r = self.client.get(urlreverse("doc_view", kwargs=dict(name=doc.name))) self.assertEqual(r.status_code, 200) self.assertTrue("Request publication" in unicontent(r))
def test_group_with_mailarch(self): group = GroupFactory() group.list_archive = 'https://mailarchive.ietf.org/arch/browse/%s/' % group.acronym group.save() url = urlreverse("ietf.group.views.derived_archives", kwargs=dict(acronym=group.acronym)) r = self.client.get(url) self.assertEqual(r.status_code, 200) q = PyQuery(r.content) self.assertEqual(url, q('.nav-tabs .active a')[0].attrib['href']) self.assertTrue(group.list_archive in unicontent(r)) self.assertTrue('web/%s/current' % group.acronym in unicontent(r))
def test_agenda_package(self): url = urlreverse("ietf.iesg.views.agenda_package") login_testing_unauthorized(self, "secretary", url) r = self.client.get(url) self.assertEqual(r.status_code, 200) for k, d in self.telechat_docs.iteritems(): if d.type_id == "charter": self.assertTrue(d.group.name in unicontent(r), "%s not in response" % k) self.assertTrue(d.group.acronym in unicontent(r), "%s acronym not in response" % k) else: self.assertTrue(d.name in unicontent(r), "%s not in response" % k) self.assertTrue(d.title in unicontent(r), "%s title not in response" % k)
def test_references(self): make_test_data() doc1 = Document.objects.get(name='draft-ietf-mars-test') doc2 = DocAlias.objects.get(name='draft-imaginary-independent-submission') RelatedDocument.objects.get_or_create(source=doc1,target=doc2,relationship=DocRelationshipName.objects.get(slug='refnorm')) url = urlreverse('doc_references', kwargs=dict(name=doc1.name)) r = self.client.get(url) self.assertEquals(r.status_code, 200) self.assertTrue(doc2.name in unicontent(r)) url = urlreverse('doc_referenced_by', kwargs=dict(name=doc2.name)) r = self.client.get(url) self.assertEquals(r.status_code, 200) self.assertTrue(doc1.name in unicontent(r))
def test_discrepancies(self): make_test_data() # draft approved but no RFC Editor state doc = Document.objects.create(name="draft-ietf-test1", type_id="draft") doc.set_state( State.objects.get(used=True, type="draft-iesg", slug="ann")) r = self.client.get(urlreverse("ietf.sync.views.discrepancies")) self.assertTrue(doc.name in unicontent(r)) # draft with IANA state "In Progress" but RFC Editor state not IANA doc = Document.objects.create(name="draft-ietf-test2", type_id="draft") doc.set_state( State.objects.get(used=True, type="draft-iesg", slug="rfcqueue")) doc.set_state( State.objects.get(used=True, type="draft-iana-action", slug="inprog")) doc.set_state( State.objects.get(used=True, type="draft-rfceditor", slug="auth")) r = self.client.get(urlreverse("ietf.sync.views.discrepancies")) self.assertTrue(doc.name in unicontent(r)) # draft with IANA state "Waiting on RFC Editor" or "RFC-Ed-Ack" # but RFC Editor state is IANA doc = Document.objects.create(name="draft-ietf-test3", type_id="draft") doc.set_state( State.objects.get(used=True, type="draft-iesg", slug="rfcqueue")) doc.set_state( State.objects.get(used=True, type="draft-iana-action", slug="waitrfc")) doc.set_state( State.objects.get(used=True, type="draft-rfceditor", slug="iana")) r = self.client.get(urlreverse("ietf.sync.views.discrepancies")) self.assertTrue(doc.name in unicontent(r)) # draft with state other than "RFC Ed Queue" or "RFC Published" # that are in RFC Editor or IANA queues doc = Document.objects.create(name="draft-ietf-test4", type_id="draft") doc.set_state( State.objects.get(used=True, type="draft-iesg", slug="ann")) doc.set_state( State.objects.get(used=True, type="draft-rfceditor", slug="auth")) r = self.client.get(urlreverse("ietf.sync.views.discrepancies")) self.assertTrue(doc.name in unicontent(r))
def register_and_verify(self, email): url = urlreverse(ietf.ietfauth.views.create_account) # register email empty_outbox() r = self.client.post(url, { 'email': email }) self.assertEqual(r.status_code, 200) self.assertIn("Account request received", unicontent(r)) self.assertEqual(len(outbox), 1) # go to confirm page confirm_url = self.extract_confirm_url(outbox[-1]) r = self.client.get(confirm_url) self.assertEqual(r.status_code, 200) # password mismatch r = self.client.post(confirm_url, { 'password': '******', 'password_confirmation': 'nosecret' }) self.assertEqual(r.status_code, 200) self.assertEqual(User.objects.filter(username=email).count(), 0) # confirm r = self.client.post(confirm_url, { 'name': 'User Name', 'ascii': 'User Name', 'password': '******', 'password_confirmation': 'secret' }) self.assertEqual(r.status_code, 200) self.assertEqual(User.objects.filter(username=email).count(), 1) self.assertEqual(Person.objects.filter(user__username=email).count(), 1) self.assertEqual(Email.objects.filter(person__user__username=email).count(), 1) self.assertTrue(self.username_in_htpasswd_file(email))
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.assertTrue(q('[type=submit]:contains("Save")')) self.assertTrue("IANA does not" in unicontent(r)) # 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_materials(self): meeting = make_meeting_test_data() session = Session.objects.filter(meeting=meeting, group__acronym="mars").first() self.write_materials_files(meeting, session) # session agenda r = self.client.get(urlreverse("ietf.meeting.views.session_agenda", kwargs=dict(num=meeting.number, session=session.group.acronym))) self.assertEqual(r.status_code, 200) self.assertTrue("1. WG status" in unicontent(r)) # early materials page r = self.client.get(urlreverse("ietf.meeting.views.current_materials")) self.assertEqual(r.status_code, 302) self.assertTrue(meeting.number in r["Location"]) r = self.client.get(urlreverse("ietf.meeting.views.materials", kwargs=dict(meeting_num=meeting.number))) self.assertEqual(r.status_code, 200) q = PyQuery(r.content) row = q('#content td div:contains("%s")' % str(session.group.acronym)).closest("tr") self.assertTrue(row.find('a:contains("Agenda")')) self.assertTrue(row.find('a:contains("Minutes")')) self.assertTrue(row.find('a:contains("Slideshow")')) self.assertFalse(row.find("a:contains(\"Bad Slideshow\")"))
def test_edit_agenda(self): meeting = make_meeting_test_data() self.client.login(username="******", password="******") r = self.client.get(urlreverse("ietf.meeting.views.edit_agenda", kwargs=dict(num=meeting.number))) self.assertEqual(r.status_code, 200) self.assertTrue("load_assignments" in unicontent(r))
def test_edit_timeslots(self): meeting = make_meeting_test_data() self.client.login(username="******", password="******") r = self.client.get(urlreverse("ietf.meeting.views.edit_timeslots", kwargs=dict(num=meeting.number))) self.assertEqual(r.status_code, 200) self.assertTrue(meeting.room_set.all().first().name in unicontent(r))
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_ipr_history(self): make_test_data() ipr = IprDisclosureBase.objects.get(title='Statement regarding rights') r = self.client.get( urlreverse("ietf.ipr.views.history", kwargs=dict(id=ipr.pk))) self.assertEqual(r.status_code, 200) self.assertTrue(ipr.title in unicontent(r))
def test_update(self): draft = make_test_data() original_ipr = IprDisclosureBase.objects.get( title='Statement regarding rights') url = urlreverse("ietf.ipr.views.new", kwargs={"type": "specific"}) # successful post empty_outbox() r = self.client.post( url, { "updates": str(original_ipr.pk), "holder_legal_name": "Test Legal", "holder_contact_name": "Test Holder", "holder_contact_email": "*****@*****.**", "holder_contact_info": "555-555-0100", "ietfer_name": "Test Participant", "ietfer_contact_info": "555-555-0101", "iprdocrel_set-TOTAL_FORMS": 2, "iprdocrel_set-INITIAL_FORMS": 0, "iprdocrel_set-0-document": "%s" % draft.docalias_set.first().pk, "iprdocrel_set-0-revisions": '00', "iprdocrel_set-1-document": DocAlias.objects.filter(name__startswith="rfc").first().pk, "patent_info": "none", "has_patent_pending": False, "licensing": "royalty-free", "submitter_name": "Test Holder", "submitter_email": "*****@*****.**", }) self.assertEqual(r.status_code, 200) self.assertTrue( "Your IPR disclosure has been submitted" in unicontent(r)) iprs = IprDisclosureBase.objects.filter(title__icontains=draft.name) self.assertEqual(len(iprs), 1) ipr = iprs[0] self.assertEqual(ipr.holder_legal_name, "Test Legal") self.assertEqual(ipr.state.slug, 'pending') self.assertTrue(ipr.relatedipr_source_set.filter(target=original_ipr)) self.assertEqual(len(outbox), 1) self.assertTrue('New IPR Submission' in outbox[0]['Subject']) self.assertTrue('ietf-ipr@' in outbox[0]['To'])
def test_agenda_by_type(self): meeting = make_meeting_test_data() url = urlreverse("ietf.meeting.views.agenda_by_type",kwargs=dict(num=meeting.number)) login_testing_unauthorized(self,"secretary",url) r = self.client.get(url) self.assertTrue(all([x in unicontent(r) for x in ['mars','IESG Breakfast','Test Room','Breakfast Room']])) url = urlreverse("ietf.meeting.views.agenda_by_type",kwargs=dict(num=meeting.number,type='session')) r = self.client.get(url) self.assertTrue(all([x in unicontent(r) for x in ['mars','Test Room']])) self.assertFalse(any([x in unicontent(r) for x in ['IESG Breakfast','Breakfast Room']])) url = urlreverse("ietf.meeting.views.agenda_by_type",kwargs=dict(num=meeting.number,type='lead')) r = self.client.get(url) self.assertFalse(any([x in unicontent(r) for x in ['mars','Test Room']])) self.assertTrue(all([x in unicontent(r) for x in ['IESG Breakfast','Breakfast Room']]))
def test_show_removed(self): make_test_data() ipr = IprDisclosureBase.objects.get(title='Statement regarding rights') ipr.set_state('removed') r = self.client.get( urlreverse("ietf.ipr.views.show", kwargs=dict(id=ipr.pk))) self.assertEqual(r.status_code, 200) self.assertTrue('This IPR disclosure was removed' in unicontent(r))
def test_stream_documents(self): draft = make_test_data() draft.stream_id = "iab" draft.save() r = self.client.get(urlreverse("ietf.group.views_stream.stream_documents", kwargs=dict(acronym="iab"))) self.assertEqual(r.status_code, 200) self.assertTrue(draft.name in unicontent(r))
def test_feed(self): draft = make_test_data() draft.set_state(State.objects.get(type="draft-iesg", slug="iesg-eva")) pos = BallotPositionDocEvent() pos.ballot = draft.latest_event(BallotDocEvent, type="created_ballot") pos.pos_id = "discuss" pos.type = "changed_ballot_position" pos.doc = draft pos.ad = pos.by = Person.objects.get(user__username="******") pos.save() r = self.client.get(urlreverse("ietf.iesg.views.discusses")) self.assertEqual(r.status_code, 200) self.assertTrue(draft.name in unicontent(r)) self.assertTrue(pos.ad.plain_name() in unicontent(r))
def test_milestone_sets(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) r = self.client.get(url) self.assertEqual(r.status_code, 200) self.assertTrue(m1.desc in unicontent(r)) self.assertTrue(m2.desc not in unicontent(r)) url = urlreverse('group_edit_charter_milestones', kwargs=dict(group_type=group.type_id, acronym=group.acronym)) r = self.client.get(url) self.assertEqual(r.status_code, 200) self.assertTrue(m1.desc not in unicontent(r)) self.assertTrue(m2.desc in unicontent(r))
def test_known_country_list(self): make_test_data() # check redirect url = urlreverse(ietf.stats.views.known_countries_list) r = self.client.get(url) self.assertEqual(r.status_code, 200) self.assertTrue("United States" in unicontent(r))
def test_feed(self): draft = make_test_data() draft.set_state(State.objects.get(type="draft-iesg", slug="iesg-eva")) pos = BallotPositionDocEvent() pos.ballot = draft.latest_event(BallotDocEvent, type="created_ballot") pos.pos_id = "discuss" pos.type = "changed_ballot_position" pos.doc = draft pos.rev = draft.rev pos.ad = pos.by = Person.objects.get(user__username="******") pos.save() r = self.client.get(urlreverse("ietf.iesg.views.discusses")) self.assertEqual(r.status_code, 200) self.assertTrue(draft.name in unicontent(r)) self.assertTrue(pos.ad.plain_name() in unicontent(r))
def test_reviewer_overview(self): doc = make_test_data() review_req1 = make_review_data(doc) review_req1.state = ReviewRequestStateName.objects.get(slug="completed") review_req1.save() reviewer = review_req1.reviewer.person ReviewRequest.objects.create( doc=review_req1.doc, team=review_req1.team, type_id="early", deadline=datetime.date.today() + datetime.timedelta(days=30), state_id="accepted", reviewer=review_req1.reviewer, requested_by=Person.objects.get(user__username="******"), ) UnavailablePeriod.objects.create( team=review_req1.team, person=reviewer, start_date=datetime.date.today() - datetime.timedelta(days=10), availability="unavailable", ) settings = ReviewerSettings.objects.get(person=reviewer,team=review_req1.team) settings.skip_next = 1 settings.save() group = review_req1.team # get for url in [urlreverse(ietf.group.views.reviewer_overview, kwargs={ 'acronym': group.acronym }), urlreverse(ietf.group.views.reviewer_overview, kwargs={ 'acronym': group.acronym, 'group_type': group.type_id })]: r = self.client.get(url) self.assertEqual(r.status_code, 200) self.assertTrue(unicode(reviewer) in unicontent(r)) self.assertTrue(review_req1.doc.name in unicontent(r)) self.client.login(username="******", password="******") r = self.client.get(url) self.assertEqual(r.status_code, 200)
def test_message_view(self): make_test_data() nomcom = Group.objects.create(name="nomcom%s" % datetime.date.today().year, type_id="nomcom") msg = Message.objects.create( by=Person.objects.get(name="(System)"), subject="This is a test", to="*****@*****.**", frm="*****@*****.**", body="Hello World!", content_type="", ) msg.related_groups.add(nomcom) r = self.client.get(urlreverse("ietf.message.views.message", kwargs=dict(message_id=msg.id))) self.assertEqual(r.status_code, 200) self.assertTrue(msg.subject in unicontent(r)) self.assertTrue(msg.to in unicontent(r)) self.assertTrue(msg.frm in unicontent(r)) self.assertTrue("Hello World!" in unicontent(r))
def test_group_without_mailarch(self): group = GroupFactory() group.list_archive = 'https://alienarchive.example.com' group.save() url = urlreverse("ietf.group.views.derived_archives", kwargs=dict(acronym=group.acronym)) r = self.client.get(url) self.assertEqual(r.status_code, 200) q = PyQuery(r.content) self.assertFalse(q('.nav-tabs .active')) self.assertTrue(group.list_archive in unicontent(r))
def test_new_thirdparty(self): """Add a new third-party disclosure. Note: submitter does not need to be logged in. """ draft = make_test_data() url = urlreverse("ietf.ipr.views.new", kwargs={"type": "third-party"}) # successful post empty_outbox() r = self.client.post( url, { "holder_legal_name": "Test Legal", "ietfer_name": "Test Participant", "ietfer_contact_email": "*****@*****.**", "ietfer_contact_info": "555-555-0101", "iprdocrel_set-TOTAL_FORMS": 2, "iprdocrel_set-INITIAL_FORMS": 0, "iprdocrel_set-0-document": "%s" % draft.docalias_set.first().pk, "iprdocrel_set-0-revisions": '00', "iprdocrel_set-1-document": DocAlias.objects.filter(name__startswith="rfc").first().pk, "patent_info": "none", "has_patent_pending": False, "licensing": "royalty-free", "submitter_name": "Test Holder", "submitter_email": "*****@*****.**", }) self.assertEqual(r.status_code, 200) self.assertTrue( "Your IPR disclosure has been submitted" in unicontent(r)) iprs = IprDisclosureBase.objects.filter( title__icontains="belonging to Test Legal") self.assertEqual(len(iprs), 1) ipr = iprs[0] self.assertEqual(ipr.holder_legal_name, "Test Legal") self.assertEqual(ipr.state.slug, "pending") self.assertTrue(isinstance(ipr.get_child(), ThirdPartyIprDisclosure)) self.assertEqual(len(outbox), 1) self.assertTrue('New IPR Submission' in outbox[0]['Subject']) self.assertTrue('ietf-ipr@' in outbox[0]['To'])
def test_milestones_needing_review(self): draft = make_test_data() m = GroupMilestone.objects.create(group=draft.group, state_id="review", desc="Test milestone", due=datetime.date.today()) url = urlreverse("ietf.iesg.views.milestones_needing_review") login_testing_unauthorized(self, "ad", url) r = self.client.get(url) self.assertEqual(r.status_code, 200) self.assertTrue(m.desc in unicontent(r))
def test_create_whitelisted_account(self): email = "*****@*****.**" # add whitelist entry r = self.client.post(urlreverse(ietf.ietfauth.views.login), {"username":"******", "password":"******"}) self.assertEqual(r.status_code, 302) self.assertEqual(urlsplit(r["Location"])[2], urlreverse(ietf.ietfauth.views.profile)) r = self.client.get(urlreverse(ietf.ietfauth.views.add_account_whitelist)) self.assertEqual(r.status_code, 200) self.assertIn("Add a whitelist entry", unicontent(r)) r = self.client.post(urlreverse(ietf.ietfauth.views.add_account_whitelist), {"email": email}) self.assertEqual(r.status_code, 200) self.assertIn("Whitelist entry creation successful", unicontent(r)) # log out r = self.client.get(urlreverse(django.contrib.auth.views.logout)) self.assertEqual(r.status_code, 200) # register and verify whitelisted email self.register_and_verify(email)
def test_review_requests(self): doc = make_test_data() review_req = make_review_data(doc) group = review_req.team for url in [urlreverse(ietf.group.views.review_requests, kwargs={ 'acronym': group.acronym }), urlreverse(ietf.group.views.review_requests, kwargs={ 'acronym': group.acronym , 'group_type': group.type_id})]: r = self.client.get(url) self.assertEqual(r.status_code, 200) self.assertTrue(review_req.doc.name in unicontent(r)) self.assertTrue(unicode(review_req.reviewer.person) in unicontent(r)) url = urlreverse(ietf.group.views.review_requests, kwargs={ 'acronym': group.acronym }) # close request, listed under closed review_req.state = ReviewRequestStateName.objects.get(slug="completed") review_req.result = ReviewResultName.objects.get(slug="ready") review_req.save() r = self.client.get(url) self.assertEqual(r.status_code, 200) self.assertTrue(review_req.doc.name in unicontent(r))
def test_review_decisions(self): draft = make_test_data() e = DocEvent(type="iesg_approved") e.doc = draft e.rev = draft.rev e.by = Person.objects.get(name="Areað Irector") e.save() url = urlreverse('ietf.iesg.views.review_decisions') r = self.client.get(url) self.assertEqual(r.status_code, 200) self.assertTrue(draft.name in unicontent(r))
def test_create_account_failure(self): make_test_data() url = urlreverse(ietf.ietfauth.views.create_account) # get r = self.client.get(url) self.assertEqual(r.status_code, 200) # register email and verify failure email = '*****@*****.**' empty_outbox() r = self.client.post(url, { 'email': email }) self.assertEqual(r.status_code, 200) self.assertIn("Account creation failed", unicontent(r))
def test_submit_request_invalid(self): make_test_data() group = Group.objects.get(acronym='mars') url = reverse('ietf.secr.sreq.views.new',kwargs={'acronym':group.acronym}) post_data = {'num_session':'2', 'length_session1':'3600', 'attendees':'10', 'conflict1':'', 'comments':'need projector'} self.client.login(username="******", password="******") r = self.client.post(url,post_data) self.assertEqual(r.status_code, 200) q = PyQuery(r.content) self.assertEqual(len(q('#session-request-form')),1) self.assertTrue('You must enter a length for all sessions' in unicontent(r))
def test_addcomment(self): make_test_data() ipr = IprDisclosureBase.objects.get(title='Statement regarding rights') url = urlreverse('ietf.ipr.views.add_comment', kwargs={"id": ipr.id}) self.client.login(username="******", password="******") r = self.client.get(url) self.assertEqual(r.status_code, 200) # public comment comment = 'Test comment' r = self.client.post(url, dict(comment=comment)) self.assertEqual(r.status_code, 302) qs = ipr.iprevent_set.filter(type='comment', desc=comment) self.assertTrue(qs.count(), 1) # private comment r = self.client.post(url, dict(comment='Private comment', private=True), follow=True) self.assertEqual(r.status_code, 200) self.assertTrue('Private comment' in unicontent(r)) self.client.logout() r = self.client.get(url) self.assertFalse('Private comment' in unicontent(r))