From 81734443a552a20dc77bd63bd800e3686b18232c Mon Sep 17 00:00:00 2001 From: Robert Sparks Date: Thu, 20 Jul 2023 09:25:14 -0500 Subject: [PATCH] fix: continued repair of code/tests re: RelatedDocument model change --- ietf/api/tests.py | 6 +-- ietf/api/views.py | 2 +- ietf/doc/forms.py | 3 +- .../commands/generate_draft_aliases.py | 5 +-- ietf/doc/tests.py | 22 +++++------ ietf/doc/tests_downref.py | 2 +- ietf/doc/tests_utils.py | 6 +-- ietf/doc/views_ballot.py | 4 +- ietf/submit/tests.py | 9 ++--- ietf/utils/test_data.py | 37 +++++++------------ 10 files changed, 42 insertions(+), 54 deletions(-) diff --git a/ietf/api/tests.py b/ietf/api/tests.py index 6f1b79532..afe47d8d8 100644 --- a/ietf/api/tests.py +++ b/ietf/api/tests.py @@ -965,7 +965,7 @@ class RfcdiffSupportTests(TestCase): def do_rfc_test(self, draft_name): draft = WgDraftFactory(name=draft_name, create_revisions=range(0,2)) rfc = WgRfcFactory(group=draft.group, rfc_number=self.next_rfc_number()) - draft.relateddocument_set.create(relationship_id="became_rfc", target=rfc.docalias.first()) + draft.relateddocument_set.create(relationship_id="became_rfc", target=rfc) draft.set_state(State.objects.get(type_id='draft',slug='rfc')) draft.set_state(State.objects.get(type_id='draft-iesg', slug='pub')) draft, rfc = reload_db_objects(draft, rfc) @@ -1017,7 +1017,7 @@ class RfcdiffSupportTests(TestCase): def test_rfc_with_tombstone(self): draft = WgDraftFactory(create_revisions=range(0,2)) rfc = WgRfcFactory(rfc_number=3261,group=draft.group)# See views_doc.HAS_TOMBSTONE - draft.relateddocument_set.create(relationship_id="became_rfc", target=rfc.docalias.first()) + draft.relateddocument_set.create(relationship_id="became_rfc", target=rfc) draft.set_state(State.objects.get(type_id='draft',slug='rfc')) draft.set_state(State.objects.get(type_id='draft-iesg', slug='pub')) draft = reload_db_objects(draft) @@ -1029,7 +1029,7 @@ class RfcdiffSupportTests(TestCase): def do_rfc_with_broken_history_test(self, draft_name): draft = WgDraftFactory(rev='10', name=draft_name) rfc = WgRfcFactory(group=draft.group, rfc_number=self.next_rfc_number()) - draft.relateddocument_set.create(relationship_id="became_rfc", target=rfc.docalias.first()) + draft.relateddocument_set.create(relationship_id="became_rfc", target=rfc) draft.set_state(State.objects.get(type_id='draft',slug='rfc')) draft.set_state(State.objects.get(type_id='draft-iesg', slug='pub')) draft = reload_db_objects(draft) diff --git a/ietf/api/views.py b/ietf/api/views.py index 1122ff9db..ee85141b4 100644 --- a/ietf/api/views.py +++ b/ietf/api/views.py @@ -344,7 +344,7 @@ def rfcdiff_latest_json(request, name, rev=None): response['previous'] = f'{draft.name}-{prev_rev}' response['previous_url'] = get_previous_url(draft.name, prev_rev) elif doc.type_id == "draft" and not found_rev and doc.relateddocument_set.filter(relationship_id="became_rfc").exists(): - rfc = doc.related_that_doc("became_rfc")[0].document + rfc = doc.related_that_doc("became_rfc")[0] response['content_url'] = rfc.get_href() response['name']=rfc.name prev_rev = doc.rev diff --git a/ietf/doc/forms.py b/ietf/doc/forms.py index b91e38531..daf02e8ac 100644 --- a/ietf/doc/forms.py +++ b/ietf/doc/forms.py @@ -148,7 +148,7 @@ class AddDownrefForm(forms.Form): raise forms.ValidationError("Please provide a referenced RFC and a referencing Internet-Draft") rfc = self.cleaned_data['rfc'] - if rfc.document.type_id != "rfc": + if rfc.type_id != "rfc": raise forms.ValidationError("Cannot find the RFC: " + rfc.name) return rfc @@ -190,7 +190,6 @@ class AddDownrefForm(forms.Form): v_err_refnorm = d.name if v_err_refnorm: v_err_refnorm_prefix = f"There does not seem to be a normative reference to RFC {rfc.rfc_number} by " - v_err_refnorm_prefix = f"There does not seem to be a normative reference to RFC {rfc.document.rfc_number} by " raise forms.ValidationError(v_err_refnorm_prefix + v_err_refnorm) diff --git a/ietf/doc/management/commands/generate_draft_aliases.py b/ietf/doc/management/commands/generate_draft_aliases.py index 9d62cf527..b377fdda1 100755 --- a/ietf/doc/management/commands/generate_draft_aliases.py +++ b/ietf/doc/management/commands/generate_draft_aliases.py @@ -130,9 +130,8 @@ class Command(BaseCommand): for draft in interesting_drafts.distinct().iterator(): # Omit drafts that became RFCs, unless they were published in the last DEFAULT_YEARS if draft.get_state_slug()=="rfc": - rfc_alias = next(iter(draft.related_that_doc("became_rfc")), None) - log.assertion("rfc_alias is not None") - rfc = rfc_alias.document + rfc = next(iter(draft.related_that_doc("became_rfc")), None) + log.assertion("rfc is not None") if rfc.latest_event(type='published_rfc').time < show_since: continue diff --git a/ietf/doc/tests.py b/ietf/doc/tests.py index 112803f76..4a88c6276 100644 --- a/ietf/doc/tests.py +++ b/ietf/doc/tests.py @@ -771,16 +771,16 @@ Man Expires September 22, 2015 [Page 3] rfc = WgRfcFactory(group=draft.group, name="rfc123456") rfc.save_with_history([DocEvent.objects.create(doc=rfc, rev=None, type="published_rfc", by=Person.objects.get(name="(System)"))]) - draft.relateddocument_set.create(relationship_id="became_rfc", target=rfc.docalias.first()) + draft.relateddocument_set.create(relationship_id="became_rfc", target=rfc) obsoleted = IndividualRfcFactory() - rfc.relateddocument_set.create(relationship_id='obs',target=obsoleted.docalias.first()) + rfc.relateddocument_set.create(relationship_id='obs',target=obsoleted) obsoleted_by = IndividualRfcFactory() - obsoleted_by.relateddocument_set.create(relationship_id='obs',target=rfc.docalias.first()) + obsoleted_by.relateddocument_set.create(relationship_id='obs',target=rfc) updated = IndividualRfcFactory() - rfc.relateddocument_set.create(relationship_id='updates',target=updated.docalias.first()) + rfc.relateddocument_set.create(relationship_id='updates',target=updated) updated_by = IndividualRfcFactory() - updated_by.relateddocument_set.create(relationship_id='updates',target=rfc.docalias.first()) + updated_by.relateddocument_set.create(relationship_id='updates',target=rfc) r = self.client.get(urlreverse("ietf.doc.views_doc.document_main", kwargs=dict(name=draft.name))) self.assertEqual(r.status_code, 302) @@ -1430,7 +1430,7 @@ Man Expires September 22, 2015 [Page 3] rfc = WgRfcFactory(group=group) draft = WgDraftFactory(group=group) - draft.relateddocument_set.create(relationship_id="became_rfc", target=rfc.docalias.first()) + draft.relateddocument_set.create(relationship_id="became_rfc", target=rfc) DocEventFactory.create(doc=rfc, type='published_rfc', time=event_datetime) r = self.client.get(urlreverse("ietf.doc.views_doc.document_main", kwargs=dict(name=rfc.name))) self.assertEqual(r.status_code, 200) @@ -1445,7 +1445,7 @@ Man Expires September 22, 2015 [Page 3] rfc = WgRfcFactory(group=group) draft = WgDraftFactory(name='draft-rfc-document-%s'% group_type_id, group=group) - draft.relateddocument_set.create(relationship_id="became_rfc", target=rfc.docalias.first()) + draft.relateddocument_set.create(relationship_id="became_rfc", target=rfc) DocEventFactory.create(doc=rfc, type='published_rfc', time=event_datetime) r = self.client.get(urlreverse("ietf.doc.views_doc.document_main", kwargs=dict(name=rfc.name))) self.assertEqual(r.status_code, 200) @@ -2111,7 +2111,7 @@ class GenerateDraftAliasesTests(TestCase): rfc3 = WgRfcFactory() DocEventFactory.create(doc=rfc3, type="published_rfc", time=a_month_ago) doc3.relateddocument_set.create( - relationship_id="became_rfc", target=rfc3.docalias.first() + relationship_id="became_rfc", target=rfc3 ) doc4 = WgDraftFactory.create( authors=[author4, author5], @@ -2127,7 +2127,7 @@ class GenerateDraftAliasesTests(TestCase): time=datetime.datetime(2010, 10, 10, tzinfo=RPC_TZINFO), ) doc4.relateddocument_set.create( - relationship_id="became_rfc", target=rfc4.docalias.first() + relationship_id="became_rfc", target=rfc4 ) doc5 = IndividualDraftFactory(authors=[author6]) @@ -2680,7 +2680,7 @@ class Idnits2SupportTests(TestCase): def test_idnits2_state(self): rfc = WgRfcFactory() draft = WgDraftFactory() - draft.relateddocument_set.create(relationship_id="became_rfc", target=rfc.docalias.first()) + draft.relateddocument_set.create(relationship_id="became_rfc", target=rfc) url = urlreverse('ietf.doc.views_doc.idnits2_state', kwargs=dict(name=rfc.canonical_name())) r = self.client.get(url) self.assertEqual(r.status_code, 200) @@ -2767,7 +2767,7 @@ class PdfizedTests(TestCase): def test_pdfized(self): rfc = WgRfcFactory() draft = WgDraftFactory(create_revisions=range(0,2)) - draft.relateddocument_set.create(relationship_id="became_rfc", target=rfc.docalias.first()) + draft.relateddocument_set.create(relationship_id="became_rfc", target=rfc) dir = settings.RFC_PATH with (Path(dir) / f'{rfc.name}.txt').open('w') as f: diff --git a/ietf/doc/tests_downref.py b/ietf/doc/tests_downref.py index 6c8fb685f..04bd908a9 100644 --- a/ietf/doc/tests_downref.py +++ b/ietf/doc/tests_downref.py @@ -100,7 +100,7 @@ class Downref(TestCase): def test_downref_last_call(self): draft = WgDraftFactory(name='draft-ietf-mars-ready-for-lc-document',intended_std_level_id='ps',states=[('draft-iesg','iesg-eva')]) WgDraftFactory(name='draft-ietf-mars-another-approved-document',states=[('draft-iesg','rfcqueue')]) - rfc9999 = WgRfcFactory(alias2__name='rfc9999', std_level_id=None) + rfc9999 = WgRfcFactory(rfc_number=9999, std_level_id=None) RelatedDocument.objects.create(source=draft, target=rfc9999, relationship_id='refnorm') url = urlreverse('ietf.doc.views_ballot.lastcalltext', kwargs=dict(name=draft.name)) login_testing_unauthorized(self, "secretary", url) diff --git a/ietf/doc/tests_utils.py b/ietf/doc/tests_utils.py index dde4a1841..9ae9b6736 100644 --- a/ietf/doc/tests_utils.py +++ b/ietf/doc/tests_utils.py @@ -253,7 +253,7 @@ class MiscTests(TestCase): def do_fuzzy_find_documents_rfc_test(self, name): draft = WgDraftFactory(name=name, create_revisions=(0, 1, 2)) rfc = WgRfcFactory() - draft.relateddocument_set.create(relationship_id="became_rfc", target=rfc.docalias.first()) + draft.relateddocument_set.create(relationship_id="became_rfc", target=rfc) draft, rfc = reload_db_objects(draft, rfc) # by canonical name @@ -380,7 +380,7 @@ class RebuildReferenceRelationsTests(TestCase): self.assertEqual( result, { - 'warnings': ['There were 1 references with no matching DocAlias'], + 'warnings': ['There were 1 references with no matching Document'], 'unfound': ['draft-not-found'], } ) @@ -443,7 +443,7 @@ class RebuildReferenceRelationsTests(TestCase): self.assertEqual( result, { - 'warnings': ['There were 1 references with no matching DocAlias'], + 'warnings': ['There were 1 references with no matching Document'], 'unfound': ['draft-not-found'], } ) diff --git a/ietf/doc/views_ballot.py b/ietf/doc/views_ballot.py index 564148932..c1afee515 100644 --- a/ietf/doc/views_ballot.py +++ b/ietf/doc/views_ballot.py @@ -974,12 +974,12 @@ def approve_downrefs(request, name): c = DocEvent(type="downref_approved", doc=rel.source, rev=rel.source.rev, by=login) c.desc = "Downref to RFC %s approved by Last Call for %s-%s" % ( - rel.target.document.rfc_number, rel.source, rel.source.rev) + rel.target.rfc_number, rel.source, rel.source.rev) c.save() c = DocEvent(type="downref_approved", doc=rel.target, rev=rel.target.rev, by=login) c.desc = "Downref to RFC %s approved by Last Call for %s-%s" % ( - rel.target.document.rfc_number, rel.source, rel.source.rev) + rel.target.rfc_number, rel.source, rel.source.rev) c.save() return HttpResponseRedirect(doc.get_absolute_url()) diff --git a/ietf/submit/tests.py b/ietf/submit/tests.py index 2478bbd99..20a372b85 100644 --- a/ietf/submit/tests.py +++ b/ietf/submit/tests.py @@ -369,7 +369,6 @@ class SubmitTests(BaseSubmitTestCase): # supply submitter info, then draft should be in and ready for approval mailbox_before = len(outbox) - replaced_alias = draft.docalias.first() r = self.supply_extra_metadata(name, status_url, author.ascii, author.email().address.lower(), replaces=[str(draft.pk), str(sug_replaced_draft.pk)]) @@ -1253,7 +1252,7 @@ class SubmitTests(BaseSubmitTestCase): status_url, "Submitter Name", "submitter@example.com", - replaces=[str(replaced_draft.docalias.first().pk)], + replaces=[str(replaced_draft.pk)], ) submission = Submission.objects.get(name=name, rev=rev) @@ -1403,7 +1402,7 @@ class SubmitTests(BaseSubmitTestCase): "edit-pages": "123", "submitter-name": "Some Random Test Person", "submitter-email": "random@example.com", - "replaces": [str(draft.docalias.first().pk)], + "replaces": [str(draft.pk)], "edit-note": "no comments", "authors-0-name": "Person 1", "authors-0-email": "person1@example.com", @@ -1422,7 +1421,7 @@ class SubmitTests(BaseSubmitTestCase): self.assertEqual(submission.pages, 123) self.assertEqual(submission.note, "no comments") self.assertEqual(submission.submitter, "Some Random Test Person ") - self.assertEqual(submission.replaces, draft.docalias.first().name) + self.assertEqual(submission.replaces, draft.name) self.assertEqual(submission.state_id, "manual") authors = submission.authors @@ -3091,7 +3090,7 @@ class SubmissionUploadFormTests(BaseSubmitTestCase): # can't replace RFC rfc = WgRfcFactory() draft = WgDraftFactory(states=[("draft", "rfc")]) - draft.relateddocument_set.create(relationship_id="became_rfc", target=rfc.docalias.first()) + draft.relateddocument_set.create(relationship_id="became_rfc", target=rfc) form = SubmissionAutoUploadForm( request_factory.get('/some/url'), data={'user': auth.user.username, 'replaces': draft.name}, diff --git a/ietf/utils/test_data.py b/ietf/utils/test_data.py index b8694a9e2..a22f17306 100644 --- a/ietf/utils/test_data.py +++ b/ietf/utils/test_data.py @@ -12,6 +12,7 @@ from django.utils.encoding import smart_str import debug # pyflakes:ignore from ietf.doc.models import Document, DocAlias, State, DocumentAuthor, DocEvent, RelatedDocument, NewRevisionDocEvent +from ietf.doc.factories import IndividualDraftFactory, ConflictReviewFactory, StatusChangeFactory, WgDraftFactory, WgRfcFactory from ietf.group.models import Group, GroupHistory, Role, RoleHistory from ietf.iesg.models import TelechatDate from ietf.ipr.models import HolderIprDisclosure, IprDocRel, IprDisclosureStateName, IprLicenseTypeName @@ -391,37 +392,27 @@ def make_test_data(): ) # an independent submission before review - doc = Document.objects.create(name='draft-imaginary-independent-submission',type_id='draft',rev='00', - title="Some Independent Notes on Imagination") - doc.set_state(State.objects.get(used=True, type="draft", slug="active")) - DocAlias.objects.create(name=doc.name).docs.add(doc) + IndividualDraftFactory(title="Some Independent Notes on Imagination") # an irtf submission mid review - doc = Document.objects.create(name='draft-imaginary-irtf-submission', type_id='draft',rev='00', - stream=StreamName.objects.get(slug='irtf'), title="The Importance of Research Imagination") - docalias = DocAlias.objects.create(name=doc.name) - docalias.docs.add(doc) - doc.set_state(State.objects.get(type="draft", slug="active")) - crdoc = Document.objects.create(name='conflict-review-imaginary-irtf-submission', type_id='conflrev', - rev='00', notify="fsm@ietf.org", title="Conflict Review of IRTF Imagination Document") - DocAlias.objects.create(name=crdoc.name).docs.add(crdoc) - crdoc.set_state(State.objects.get(name='Needs Shepherd', type__slug='conflrev')) - crdoc.relateddocument_set.create(target=docalias,relationship_id='conflrev') + doc = IndividualDraftFactory(name="draft-imaginary-irtf-submission", stream_id="irtf", title="The Importance of Research Imagination") + ConflictReviewFactory(name="conflict-review-imaginary-irtf-submission", review_of=doc, notify="fsm@ietf.org", title="Conflict Review of IRTF Imagination Document") # A status change mid review iesg = Group.objects.get(acronym='iesg') - doc = Document.objects.create(name='status-change-imaginary-mid-review',type_id='statchg', rev='00', - notify="fsm@ietf.org", group=iesg, title="Status Change Review without Imagination") - doc.set_state(State.objects.get(slug='needshep',type__slug='statchg')) - docalias = DocAlias.objects.create(name='status-change-imaginary-mid-review') - docalias.docs.add(doc) + doc = StatusChangeFactory( + name='status-change-imaginary-mid-review', + notify="fsm@ietf.org", + group=iesg, + title="Status Change Review without Imagination", + states= [State.objects.get(type_id="statchg",slug="needshep")] + ) # Some things for a status change to affect def rfc_for_status_change_test_factory(name,rfc_num,std_level_id): - target_rfc = Document.objects.create(name=name, type_id='draft', std_level_id=std_level_id, notify="%s@ietf.org"%name) - target_rfc.set_state(State.objects.get(slug='rfc',type__slug='draft')) - DocAlias.objects.create(name=name).docs.add(target_rfc) - DocAlias.objects.create(name='rfc%d'%rfc_num).docs.add(target_rfc) + target_rfc = WgRfcFactory(rfc_number=rfc_num, std_level_id=std_level_id) + source_draft = WgDraftFactory(name=name, states=[("draft","rfc")], notify=f"{name}@ietf.org") + source_draft.relateddocument_set.create(relationship_id="became_rfc", target=target_rfc) return target_rfc rfc_for_status_change_test_factory('draft-ietf-random-thing',9999,'ps') rfc_for_status_change_test_factory('draft-ietf-random-otherthing',9998,'inf')