From dcf9e6b40f65f1ca93cea6a5e252e9327cc4f7dc Mon Sep 17 00:00:00 2001 From: Robert Sparks <rjsparks@nostrum.com> Date: Wed, 6 Jun 2018 17:59:40 +0000 Subject: [PATCH] Use factories for ietf.doc.tests_ballots. Fixed a long-hidden bug in test_edit_verify_permissions where non-existing usernames were used and passed the tests accidently. Added list_email to the GroupFactory. Commit ready for merge. - Legacy-Id: 15219 --- ietf/doc/tests.py | 1 - ietf/doc/tests_ballot.py | 69 ++++++++++++++++++++++++---------------- ietf/group/factories.py | 1 + 3 files changed, 42 insertions(+), 29 deletions(-) diff --git a/ietf/doc/tests.py b/ietf/doc/tests.py index a16f0fe9d..93998c2bb 100644 --- a/ietf/doc/tests.py +++ b/ietf/doc/tests.py @@ -32,7 +32,6 @@ from ietf.name.models import SessionStatusName from ietf.person.models import Person from ietf.person.factories import PersonFactory from ietf.utils.mail import outbox -#from ietf.utils.test_data import make_test_data from ietf.utils.test_utils import login_testing_unauthorized, unicontent from ietf.utils.test_utils import TestCase diff --git a/ietf/doc/tests_ballot.py b/ietf/doc/tests_ballot.py index 5894f52f9..b25f73772 100644 --- a/ietf/doc/tests_ballot.py +++ b/ietf/doc/tests_ballot.py @@ -8,22 +8,23 @@ from django.urls import reverse as urlreverse from ietf.doc.models import ( Document, State, DocEvent, BallotPositionDocEvent, LastCallDocEvent, WriteupDocEvent, TelechatDocEvent ) -from ietf.doc.factories import DocumentFactory +from ietf.doc.factories import DocumentFactory, IndividualDraftFactory, IndividualRfcFactory, WgDraftFactory from ietf.doc.utils import create_ballot_if_not_open from ietf.group.models import Group, Role +from ietf.group.factories import GroupFactory, RoleFactory from ietf.name.models import BallotPositionName from ietf.iesg.models import TelechatDate from ietf.person.models import Person, PersonalApiKey +from ietf.person.factories import PersonFactory from ietf.utils.test_utils import TestCase, unicontent from ietf.utils.mail import outbox, empty_outbox -from ietf.utils.test_data import make_test_data from ietf.utils.test_utils import login_testing_unauthorized class EditPositionTests(TestCase): def test_edit_position(self): - draft = make_test_data() ad = Person.objects.get(user__username="ad") + draft = IndividualDraftFactory(ad=ad) ballot = create_ballot_if_not_open(None, draft, ad, 'approve') url = urlreverse('ietf.doc.views_ballot.edit_position', kwargs=dict(name=draft.name, ballot_id=ballot.pk)) @@ -89,9 +90,9 @@ class EditPositionTests(TestCase): self.assertTrue("Ballot comment text updated" in pos.desc) def test_api_set_position(self): - draft = make_test_data() - url = urlreverse('ietf.doc.views_ballot.api_set_position') ad = Person.objects.get(name="Areaư Irector") + draft = WgDraftFactory(ad=ad) + url = urlreverse('ietf.doc.views_ballot.api_set_position') create_ballot_if_not_open(None, draft, ad, 'approve') ad.user.last_login = datetime.datetime.now() ad.user.save() @@ -172,7 +173,7 @@ class EditPositionTests(TestCase): def test_edit_position_as_secretary(self): - draft = make_test_data() + draft = IndividualDraftFactory() ad = Person.objects.get(user__username="ad") ballot = create_ballot_if_not_open(None, draft, ad, 'approve') url = urlreverse('ietf.doc.views_ballot.edit_position', kwargs=dict(name=draft.name, ballot_id=ballot.pk)) @@ -198,7 +199,7 @@ class EditPositionTests(TestCase): self.assertTrue("by Sec" in pos.desc) def test_cannot_edit_position_as_pre_ad(self): - draft = make_test_data() + draft = IndividualDraftFactory() ad = Person.objects.get(user__username="ad") ballot = create_ballot_if_not_open(None, draft, ad, 'approve') url = urlreverse('ietf.doc.views_ballot.edit_position', kwargs=dict(name=draft.name, ballot_id=ballot.pk)) @@ -216,11 +217,11 @@ class EditPositionTests(TestCase): self.assertEqual(r.status_code, 403) def test_send_ballot_comment(self): - draft = make_test_data() + ad = Person.objects.get(user__username="ad") + draft = WgDraftFactory(ad=ad,group__acronym='mars') draft.notify = "somebody@example.com" draft.save_with_history([DocEvent.objects.create(doc=draft, rev=draft.rev, type="changed_document", by=Person.objects.get(user__username="secretary"), desc="Test")]) - ad = Person.objects.get(user__username="ad") ballot = create_ballot_if_not_open(None, draft, ad, 'approve') BallotPositionDocEvent.objects.create( @@ -274,7 +275,7 @@ class EditPositionTests(TestCase): class BallotWriteupsTests(TestCase): def test_edit_last_call_text(self): - draft = make_test_data() + draft = IndividualDraftFactory(ad=Person.objects.get(user__username='ad'),states=[('draft','active'),('draft-iesg','ad-eval')]) url = urlreverse('ietf.doc.views_ballot.lastcalltext', kwargs=dict(name=draft.name)) login_testing_unauthorized(self, "secretary", url) @@ -314,7 +315,8 @@ class BallotWriteupsTests(TestCase): def test_request_last_call(self): - draft = make_test_data() + ad = Person.objects.get(user__username="ad") + draft = IndividualDraftFactory(ad=ad,states=[('draft-iesg','iesg-eva')]) url = urlreverse('ietf.doc.views_ballot.lastcalltext', kwargs=dict(name=draft.name)) login_testing_unauthorized(self, "secretary", url) @@ -339,7 +341,7 @@ class BallotWriteupsTests(TestCase): self.assertTrue('aread@' in outbox[-1]['Cc']) def test_edit_ballot_writeup(self): - draft = make_test_data() + draft = IndividualDraftFactory() url = urlreverse('ietf.doc.views_ballot.ballot_writeupnotes', kwargs=dict(name=draft.name)) login_testing_unauthorized(self, "secretary", url) @@ -369,7 +371,7 @@ class BallotWriteupsTests(TestCase): self.assertTrue("This is a simple test" in draft.latest_event(WriteupDocEvent, type="changed_ballot_writeup_text").text) def test_edit_ballot_rfceditornote(self): - draft = make_test_data() + draft = IndividualDraftFactory() url = urlreverse('ietf.doc.views_ballot.ballot_rfceditornote', kwargs=dict(name=draft.name)) login_testing_unauthorized(self, "secretary", url) @@ -409,7 +411,8 @@ class BallotWriteupsTests(TestCase): self.assertFalse(draft.has_rfc_editor_note()) def test_issue_ballot(self): - draft = make_test_data() + ad = Person.objects.get(user__username="ad") + draft = IndividualDraftFactory(ad=ad) url = urlreverse('ietf.doc.views_ballot.ballot_writeupnotes', kwargs=dict(name=draft.name)) login_testing_unauthorized(self, "ad", url) @@ -431,7 +434,8 @@ class BallotWriteupsTests(TestCase): self.assertTrue('X-IETF-Draft-string' in outbox[-1]) def test_edit_approval_text(self): - draft = make_test_data() + ad = Person.objects.get(user__username="ad") + draft = WgDraftFactory(ad=ad,states=[('draft','active'),('draft-iesg','iesg-eva')],intended_std_level_id='ps') url = urlreverse('ietf.doc.views_ballot.ballot_approvaltext', kwargs=dict(name=draft.name)) login_testing_unauthorized(self, "secretary", url) @@ -489,7 +493,12 @@ class BallotWriteupsTests(TestCase): q = PyQuery(r.content) self.assertEqual(len(q("<textarea class=\"form-control\"")),1) - draft = make_test_data() + for username in ['plain','marschairman']: + PersonFactory(user__username=username) + mars = GroupFactory(acronym='mars',type_id='wg') + RoleFactory(group=mars,person=Person.objects.get(user__username='marschairman'),name_id='chair') + ad = Person.objects.get(user__username="ad") + draft = WgDraftFactory(group=mars,ad=ad,states=[('draft','active'),('draft-iesg','ad-eval')]) events = [] @@ -527,7 +536,7 @@ class BallotWriteupsTests(TestCase): for p in ['ietf.doc.views_ballot.ballot_approvaltext','ietf.doc.views_ballot.ballot_writeupnotes','ietf.doc.views_ballot.ballot_rfceditornote']: url = urlreverse(p, kwargs=dict(name=draft.name)) - for username in ['plain','marschairman','iab chair','irtf chair','ise','iana']: + for username in ['plain','marschairman','iab-chair','irtf-chair','ise','iana']: verify_fail(username, url) for username in ['secretary','ad']: @@ -538,10 +547,10 @@ class BallotWriteupsTests(TestCase): draft.save_with_history(events) url = urlreverse('ietf.doc.views_ballot.ballot_rfceditornote', kwargs=dict(name=draft.name)) - for username in ['plain','marschairman','ad','irtf chair','ise','iana']: + for username in ['plain','marschairman','ad','irtf-chair','ise','iana']: verify_fail(username, url) - for username in ['secretary','iab chair']: + for username in ['secretary','iab-chair']: verify_can_see(username, url) # RFC Editor Notes for documents in the IRTF Stream @@ -553,7 +562,7 @@ class BallotWriteupsTests(TestCase): draft.save_with_history([e]) url = urlreverse('ietf.doc.views_ballot.ballot_rfceditornote', kwargs=dict(name=draft.name)) - for username in ['plain','marschairman','ad','iab chair','ise','iana']: + for username in ['plain','marschairman','ad','iab-chair','ise','iana']: verify_fail(username, url) for username in ['secretary','irtf chair']: @@ -568,7 +577,7 @@ class BallotWriteupsTests(TestCase): draft.save_with_history([e]) url = urlreverse('ietf.doc.views_ballot.ballot_rfceditornote', kwargs=dict(name=draft.name)) - for username in ['plain','marschairman','ad','iab chair','irtf chair','iana']: + for username in ['plain','marschairman','ad','iab-chair','irtf-chair','iana']: verify_fail(username, url) for username in ['secretary','ise']: @@ -576,7 +585,8 @@ class BallotWriteupsTests(TestCase): class ApproveBallotTests(TestCase): def test_approve_ballot(self): - draft = make_test_data() + ad = Person.objects.get(name="Areaư Irector") + draft = IndividualDraftFactory(ad=ad, intended_std_level_id='ps') 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)) @@ -627,7 +637,7 @@ class ApproveBallotTests(TestCase): # This tests a codepath that is not used in production # and that has already had some drift from usefulness (it results in a # older-style conflict review response). - draft = make_test_data() + draft = IndividualDraftFactory() draft.set_state(State.objects.get(used=True, type="draft-iesg", slug="nopubadw")) url = urlreverse('ietf.doc.views_ballot.approve_ballot', kwargs=dict(name=draft.name)) @@ -645,7 +655,7 @@ class ApproveBallotTests(TestCase): self.assertTrue("NOT be published" in str(outbox[-1])) def test_clear_ballot(self): - draft = make_test_data() + draft = IndividualDraftFactory() ad = Person.objects.get(user__username="ad") ballot = create_ballot_if_not_open(None, draft, ad, 'approve') old_ballot_id = ballot.id @@ -663,7 +673,8 @@ class ApproveBallotTests(TestCase): class MakeLastCallTests(TestCase): def test_make_last_call(self): - draft = make_test_data() + ad = Person.objects.get(user__username="ad") + draft = WgDraftFactory(name='draft-ietf-mars-test',group__acronym='mars',ad=ad) draft.set_state(State.objects.get(used=True, type="draft-iesg", slug="lc-req")) url = urlreverse('ietf.doc.views_ballot.make_last_call', kwargs=dict(name=draft.name)) @@ -841,12 +852,14 @@ class DeferUndeferTestCase(TestCase): # when charters support being deferred, be sure to test them here def setUp(self): - make_test_data() + IndividualDraftFactory(name='draft-ietf-mars-test',states=[('draft','active'),('draft-iesg','iesg-eva')]) + DocumentFactory(type_id='statchg',name='status-change-imaginary-mid-review',states=[('statchg','iesgeval')]) + DocumentFactory(type_id='conflrev',name='conflict-review-imaginary-irtf-submission',states=[('conflrev','iesgeval')]) class RegenerateLastCallTestCase(TestCase): def test_regenerate_last_call(self): - draft = DocumentFactory.create( + draft = WgDraftFactory.create( stream_id='ietf', states=[('draft','active'),('draft-iesg','pub-req')], intended_std_level_id='ps', @@ -864,7 +877,7 @@ class RegenerateLastCallTestCase(TestCase): self.assertTrue("Subject: Last Call" in lc_text) self.assertFalse("contains these normative down" in lc_text) - rfc = DocumentFactory.create( + rfc = IndividualRfcFactory.create( stream_id='ise', other_aliases=['rfc6666',], states=[('draft','rfc'),('draft-iesg','pub')], diff --git a/ietf/group/factories.py b/ietf/group/factories.py index 27338e50d..df7f752c4 100644 --- a/ietf/group/factories.py +++ b/ietf/group/factories.py @@ -13,6 +13,7 @@ class GroupFactory(factory.DjangoModelFactory): acronym = factory.Sequence(lambda n: 'acronym%d' %n) state_id = 'active' type_id = 'wg' + list_email = factory.LazyAttribute(lambda a: '%s@ietf.org'% a.acronym) class ReviewTeamFactory(factory.DjangoModelFactory): class Meta: