diff --git a/ietf/doc/factories.py b/ietf/doc/factories.py index c435bfc41..c62fbce82 100644 --- a/ietf/doc/factories.py +++ b/ietf/doc/factories.py @@ -1,7 +1,15 @@ import factory -from ietf.doc.models import Document, DocEvent, NewRevisionDocEvent -from ietf.person.factories import PersonFactory +from ietf.doc.models import Document, DocEvent, NewRevisionDocEvent, DocAlias, State + +def draft_name_generator(type_id,group,n): + return '%s-%s-%s-%s%d'%( + type_id, + 'bogusperson', + group.acronym if group else 'netherwhere', + 'musings', + n, + ) class DocumentFactory(factory.DjangoModelFactory): class Meta: @@ -10,26 +18,47 @@ class DocumentFactory(factory.DjangoModelFactory): type_id = 'draft' title = factory.Faker('sentence',nb_words=6) rev = '00' - group = None + group = factory.SubFactory('ietf.group.factories.GroupFactory',type_id='individ') + std_level_id = None + intended_std_level_id = None @factory.lazy_attribute_sequence def name(self, n): - return '%s-%s-%s-%s%d'%( - self.type_id, - 'bogusperson', - self.group.acronym if self.group else 'netherwhere', - 'musings', - n, - ) + return draft_name_generator(self.type_id,self.group,n) newrevisiondocevent = factory.RelatedFactory('ietf.doc.factories.NewRevisionDocEventFactory','doc') + alias = factory.RelatedFactory('ietf.doc.factories.DocAliasFactory','document') + + @factory.post_generation + def other_aliases(self, create, extracted, **kwargs): + if create and extracted: + for alias in extracted: + self.docalias_set.create(name=alias) + + @factory.post_generation + def states(self, create, extracted, **kwargs): + if create and extracted: + for (state_type_id,state_slug) in extracted: + self.set_state(State.objects.get(type_id=state_type_id,slug=state_slug)) + +class DocAliasFactory(factory.DjangoModelFactory): + class Meta: + model = DocAlias + + document = factory.SubFactory('ietf.doc.factories.DocumentFactory') + + @factory.lazy_attribute + def name(self): + return self.document.name + + class DocEventFactory(factory.DjangoModelFactory): class Meta: model = DocEvent type = 'added_comment' - by = factory.SubFactory(PersonFactory) + by = factory.SubFactory('ietf.person.factories.PersonFactory') doc = factory.SubFactory(DocumentFactory) desc = factory.Faker('sentence',nb_words=6) diff --git a/ietf/doc/tests_ballot.py b/ietf/doc/tests_ballot.py index ced6e54f0..330f8f27a 100644 --- a/ietf/doc/tests_ballot.py +++ b/ietf/doc/tests_ballot.py @@ -9,7 +9,6 @@ from django.core.urlresolvers import reverse as urlreverse from ietf.doc.models import ( Document, State, DocEvent, BallotDocEvent, BallotPositionDocEvent, LastCallDocEvent, WriteupDocEvent, TelechatDocEvent ) from ietf.doc.factories import DocumentFactory -from ietf.group.factories import GroupFactory from ietf.group.models import Group, Role from ietf.name.models import BallotPositionName from ietf.iesg.models import TelechatDate @@ -719,13 +718,11 @@ class DeferUndeferTestCase(TestCase): class RegenerateLastCallTestCase(TestCase): def test_regenerate_last_call(self): - group = GroupFactory(type_id='individ') - draft = DocumentFactory.create(stream_id='ietf',group=group) - draft.docalias_set.create(name=draft.name) # factory should do this - draft.set_state(State.objects.get(type='draft',slug='active')) - draft.set_state(State.objects.get(type='draft-iesg',slug='pub-req')) - draft.intended_std_level_id='ps' - draft.save() + draft = DocumentFactory.create( + stream_id='ietf', + states=[('draft','active'),('draft-iesg','pub-req')], + intended_std_level_id='ps', + ) url = urlreverse('doc_ballot_lastcall', kwargs=dict(name=draft.name)) login_testing_unauthorized(self, "secretary", url) @@ -739,15 +736,14 @@ class RegenerateLastCallTestCase(TestCase): self.assertTrue("Subject: Last Call" in lc_text) self.assertFalse("contains normative down" in lc_text) - rfc = DocumentFactory.create(stream_id='ise') - rfc.docalias_set.create(name=rfc.name) - rfc_alias = rfc.docalias_set.create(name='rfc6666') - rfc.set_state(State.objects.get(type='draft',slug='rfc')) - rfc.set_state(State.objects.get(type='draft-iesg',slug='pub')) - rfc.std_level_id='inf' - rfc.save() + rfc = DocumentFactory.create( + stream_id='ise', + other_aliases=['rfc6666',], + states=[('draft','rfc'),('draft-iesg','pub')], + std_level_id='inf', + ) - draft.relateddocument_set.create(target=rfc_alias,relationship_id='refnorm') + draft.relateddocument_set.create(target=rfc.docalias_set.get(name='rfc6666'),relationship_id='refnorm') r = self.client.post(url, dict(regenerate_last_call_text="1")) self.assertEqual(r.status_code, 200)