manager: keep some page attributes when snapshot restoration (#45243)
This commit is contained in:
parent
04ad825760
commit
d62dc92037
|
@ -524,9 +524,17 @@ class PageSnapshot(models.Model):
|
|||
return page
|
||||
|
||||
def restore(self):
|
||||
json_page = self.serialization
|
||||
# keep current page order
|
||||
json_page['fields']['order'] = self.page.order
|
||||
# and current parent
|
||||
json_page['fields']['parent'] = [self.page.parent.slug] if self.page.parent else None
|
||||
# and current exclude_from_navigation value
|
||||
json_page['fields']['exclude_from_navigation'] = self.page.exclude_from_navigation
|
||||
# restore snapshot
|
||||
with transaction.atomic():
|
||||
page = Page.load_serialized_page(self.serialization)
|
||||
page.load_serialized_cells(self.serialization['cells'])
|
||||
page = Page.load_serialized_page(json_page)
|
||||
page.load_serialized_cells(json_page['cells'])
|
||||
return page
|
||||
|
||||
|
||||
|
|
|
@ -1732,6 +1732,56 @@ def test_page_versionning(app, admin_user):
|
|||
app.get('/manage/pages/0/history', status=404)
|
||||
|
||||
|
||||
def test_restore_page_attributes(app):
|
||||
page1 = Page.objects.create(title='One', slug='one')
|
||||
page2 = Page.objects.create(title='Two', slug='two', parent=page1, exclude_from_navigation=False)
|
||||
page3 = Page.objects.create(title='Three', slug='three')
|
||||
page4 = Page.objects.create(title='Four', slug='four')
|
||||
|
||||
assert page1.order == 1
|
||||
assert page2.order == 2
|
||||
assert page3.order == 3
|
||||
assert page4.order == 4
|
||||
|
||||
PageSnapshot.take(page2)
|
||||
snapshot = PageSnapshot.objects.latest('pk')
|
||||
|
||||
# move page2, remove page 1
|
||||
page2.parent = page4
|
||||
page2.order = 3
|
||||
page2.save()
|
||||
page1.delete()
|
||||
page3.order = 1
|
||||
page3.save()
|
||||
page4.order = 2
|
||||
page4.save()
|
||||
|
||||
assert page3.order == 1
|
||||
assert page4.order == 2
|
||||
assert page2.order == 3
|
||||
|
||||
# restore snapshot
|
||||
page2 = snapshot.restore()
|
||||
|
||||
# check some attributes
|
||||
assert page2.order == 3
|
||||
assert page2.parent == page4
|
||||
assert page2.exclude_from_navigation is False
|
||||
|
||||
PageSnapshot.take(page2)
|
||||
snapshot = PageSnapshot.objects.latest('pk')
|
||||
|
||||
# exclude page2 from navigation
|
||||
page2.exclude_from_navigation = True
|
||||
page2.save()
|
||||
|
||||
# restore snapshot
|
||||
page2 = snapshot.restore()
|
||||
|
||||
# check exclude_from_navigation param
|
||||
assert page2.exclude_from_navigation is True
|
||||
|
||||
|
||||
def test_view_old_snapshot(app, admin_user):
|
||||
page = Page.objects.create(title='One', slug='one')
|
||||
PageSnapshot.take(page)
|
||||
|
|
Loading…
Reference in New Issue