Skip to content

Commit 9c571e6

Browse files
committed
Undo actual state when doing an RFC Editor undo, this is only relevant
if the removed entry is the latest entry - Legacy-Id: 5116
1 parent 8eeef2d commit 9c571e6

2 files changed

Lines changed: 28 additions & 8 deletions

File tree

ietf/sync/tests.py

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -407,30 +407,40 @@ class RFCEditorUndoTestCase(django.test.TestCase):
407407
def test_rfceditor_undo(self):
408408
draft = make_test_data()
409409

410-
e = add_state_change_event(draft, Person.objects.get(name="(System)"), None,
410+
e1 = add_state_change_event(draft, Person.objects.get(name="(System)"), None,
411411
State.objects.get(type="draft-rfceditor", slug="auth"))
412-
e.desc = "Test"
413-
e.save()
412+
e1.desc = "First"
413+
e1.save()
414414

415+
e2 = add_state_change_event(draft, Person.objects.get(name="(System)"), None,
416+
State.objects.get(type="draft-rfceditor", slug="edit"))
417+
e2.desc = "Second"
418+
e2.save()
419+
415420
url = urlreverse('ietf.sync.views.rfceditor_undo')
416421
login_testing_unauthorized(self, "rfc", url)
417422

418423
# get
419424
r = self.client.get(url)
420425
self.assertEquals(r.status_code, 200)
421-
self.assertTrue(e.doc_id in r.content)
426+
self.assertTrue(e2.doc_id in r.content)
422427

423-
# delete
428+
# delete e2
424429
deleted_before = DeletedEvent.objects.count()
425430

426-
r = self.client.post(url, dict(event=e.id))
431+
r = self.client.post(url, dict(event=e2.id))
427432
self.assertEquals(r.status_code, 302)
428433

429-
self.assertEquals(StateDocEvent.objects.filter(id=e.id).count(), 0)
434+
self.assertEquals(StateDocEvent.objects.filter(id=e2.id).count(), 0)
435+
self.assertEquals(draft.get_state("draft-rfceditor").slug, "auth")
430436
self.assertEquals(DeletedEvent.objects.count(), deleted_before + 1)
431437

438+
# delete e1
439+
r = self.client.post(url, dict(event=e1.id))
440+
self.assertEquals(draft.get_state("draft-rfceditor"), None)
441+
432442
# let's just test we can recover
433443
e = DeletedEvent.objects.all().order_by("-time")[0]
434444

435445
e.content_type.model_class().objects.create(**json.loads(e.json))
436-
self.assertEquals(draft.latest_event(type="changed_state").desc, "Test")
446+
self.assertTrue(StateDocEvent.objects.filter(desc="First", doc=draft))

ietf/sync/views.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,16 @@ def rfceditor_undo(request):
120120
except StateDocEvent.DoesNotExist:
121121
return HttpResponse("Event does not exist")
122122

123+
doc = e.doc
124+
125+
# possibly reset the state of the document
126+
all_events = StateDocEvent.objects.filter(doc=doc, state_type="draft-rfceditor").order_by("-time", "-id")
127+
if all_events and all_events[0] == e:
128+
if len(all_events) > 1:
129+
doc.set_state(all_events[1].state)
130+
else:
131+
doc.unset_state("draft-rfceditor")
132+
123133
dump = DeletedEvent()
124134
dump.content_type = ContentType.objects.get_for_model(type(e))
125135
dump.json = json.dumps(object_as_shallow_dict(e), indent=2)

0 commit comments

Comments
 (0)