Skip to content

Commit b2ebad1

Browse files
committed
fix: repaired rfcdiff api endpoint
1 parent a1d776c commit b2ebad1

2 files changed

Lines changed: 25 additions & 14 deletions

File tree

ietf/api/tests.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -964,19 +964,19 @@ def test_draft_with_broken_history(self):
964964

965965
def do_rfc_test(self, draft_name):
966966
draft = WgDraftFactory(name=draft_name, create_revisions=range(0,2))
967-
draft.docalias.create(name=f'rfc{self.next_rfc_number():04}')
967+
rfc = WgRfcFactory(group=draft.group, rfc_number=self.next_rfc_number())
968+
draft.relateddocument_set.create(relationship_id="became_rfc", target=rfc.docalias.first())
968969
draft.set_state(State.objects.get(type_id='draft',slug='rfc'))
969970
draft.set_state(State.objects.get(type_id='draft-iesg', slug='pub'))
970-
draft = reload_db_objects(draft)
971-
rfc = WgRfcFactory(group=draft.group) # todo link this with its pre-publication draft
971+
draft, rfc = reload_db_objects(draft, rfc)
972972

973973
number = rfc.rfc_number
974974
received = self.getJson(dict(name=number))
975975
self.assertEqual(
976976
received,
977977
dict(
978978
content_url=rfc.get_href(),
979-
name=rfc.canonical_name(),
979+
name=rfc.name,
980980
previous=f'{draft.name}-{draft.rev}',
981981
previous_url= draft.history_set.get(rev=draft.rev).get_href(),
982982
),
@@ -1016,23 +1016,23 @@ def test_rfc(self):
10161016

10171017
def test_rfc_with_tombstone(self):
10181018
draft = WgDraftFactory(create_revisions=range(0,2))
1019-
draft.docalias.create(name='rfc3261') # See views_doc.HAS_TOMBSTONE
1019+
rfc = WgRfcFactory(rfc_number=3261,group=draft.group)# See views_doc.HAS_TOMBSTONE
1020+
draft.relateddocument_set.create(relationship_id="became_rfc", target=rfc.docalias.first())
10201021
draft.set_state(State.objects.get(type_id='draft',slug='rfc'))
10211022
draft.set_state(State.objects.get(type_id='draft-iesg', slug='pub'))
10221023
draft = reload_db_objects(draft)
1023-
rfc = draft
10241024

10251025
# Some old rfcs had tombstones that shouldn't be used for comparisons
10261026
received = self.getJson(dict(name=rfc.canonical_name()))
10271027
self.assertTrue(received['previous'].endswith('00'))
10281028

10291029
def do_rfc_with_broken_history_test(self, draft_name):
10301030
draft = WgDraftFactory(rev='10', name=draft_name)
1031-
draft.docalias.create(name=f'rfc{self.next_rfc_number():04}')
1031+
rfc = WgRfcFactory(group=draft.group, rfc_number=self.next_rfc_number())
1032+
draft.relateddocument_set.create(relationship_id="became_rfc", target=rfc.docalias.first())
10321033
draft.set_state(State.objects.get(type_id='draft',slug='rfc'))
10331034
draft.set_state(State.objects.get(type_id='draft-iesg', slug='pub'))
10341035
draft = reload_db_objects(draft)
1035-
rfc = draft
10361036

10371037
received = self.getJson(dict(name=draft.name))
10381038
self.assertEqual(

ietf/api/views.py

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -327,17 +327,28 @@ def get_previous_url(name, rev=None):
327327
def rfcdiff_latest_json(request, name, rev=None):
328328
response = dict()
329329
condition, document, history, found_rev = find_doc_for_rfcdiff(name, rev)
330-
330+
if document.type_id == "rfc":
331+
draft_alias = next(iter(document.related_that('became_rfc')), None)
331332
if condition == 'no such document':
332333
raise Http404
333334
elif condition in ('historic version', 'current version'):
334335
doc = history if history else document
335-
if not found_rev and doc.type_id == "rfc":
336-
response['content_url'] = doc.get_href()
337-
response['name']=doc.canonical_name()
338-
if doc.name != doc.canonical_name():
336+
if doc.type_id == "rfc":
337+
response['content_url'] = doc.get_href()
338+
response['name']=doc.name
339+
if draft_alias:
340+
draft = draft_alias.document
341+
prev_rev = draft.rev
342+
if doc.rfc_number in HAS_TOMBSTONE and prev_rev != '00':
343+
prev_rev = f'{(int(draft.rev)-1):02d}'
344+
response['previous'] = f'{draft.name}-{prev_rev}'
345+
response['previous_url'] = get_previous_url(draft.name, prev_rev)
346+
elif doc.type_id == "draft" and not found_rev and doc.relateddocument_set.filter(relationship_id="became_rfc").exists():
347+
rfc = doc.related_that_doc("became_rfc")[0].document
348+
response['content_url'] = rfc.get_href()
349+
response['name']=rfc.name
339350
prev_rev = doc.rev
340-
if doc.rfc_number in HAS_TOMBSTONE and prev_rev != '00':
351+
if rfc.rfc_number in HAS_TOMBSTONE and prev_rev != '00':
341352
prev_rev = f'{(int(doc.rev)-1):02d}'
342353
response['previous'] = f'{doc.name}-{prev_rev}'
343354
response['previous_url'] = get_previous_url(doc.name, prev_rev)

0 commit comments

Comments
 (0)