data: store a new uuid on page loading with snapshot (#67710)

This commit is contained in:
Lauréline Guérin 2023-01-06 14:53:20 +01:00
parent 50fe99e351
commit 8f21087df8
No known key found for this signature in database
GPG Key ID: 1FAB9B9B4F93D473
3 changed files with 12 additions and 5 deletions

View File

@ -586,7 +586,7 @@ class Page(models.Model):
if page is None:
qs_kwargs = {}
if snapshot:
qs_kwargs = {'snapshot': snapshot}
qs_kwargs = {'snapshot': snapshot} # don't take uuid from snapshot: it has to be unique !
elif json_page['fields'].get('parent'):
qs_kwargs = {'parent__slug': json_page['fields']['parent'][0].split('/')[-1] or 'index'}
page, created = Page.objects.get_or_create(slug=json_page['fields']['slug'], **qs_kwargs)
@ -604,8 +604,12 @@ class Page(models.Model):
)
% json_page['fields']['title'],
)
page_uuid = page.uuid
page = next(serializers.deserialize('json', json.dumps([json_page]), ignorenonexistent=True))
page.object.snapshot = snapshot
if snapshot:
# keep the generated uuid
page.object.uuid = page_uuid
page.save()
for cell in json_page.get('cells'):
cell['fields']['groups'] = [[x] for x in cell['fields']['groups'] if isinstance(x, str)]

View File

@ -659,7 +659,7 @@ def snapshot_export(request, *args, **kwargs):
page = snapshot.get_page()
response = HttpResponse(content_type='application/json')
response['Content-Disposition'] = 'attachment; filename="export_page_{}_{}.json"'.format(
snapshot.get_page().slug, snapshot.timestamp.strftime('%Y%m%d')
page.slug, snapshot.timestamp.strftime('%Y%m%d')
)
json.dump(page.get_serialized_page(), response, indent=2)
return response

View File

@ -925,12 +925,16 @@ def test_export_page_snapshot(freezer, app, admin_user):
history = app.get('/manage/pages/%s/history' % page.id, status=200)
resp = history.click('export', index=0, verbose=True)
snapshot_page = Page.snapshots.latest('pk')
assert snapshot_page.uuid != page.uuid
assert resp.headers['content-type'] == 'application/json'
assert resp.headers['content-disposition'] == 'attachment; filename="export_page_one_20200717.json"'
assert resp.json['fields']['title'] == 'Updated Title'
resp = history.click('export', index=1, verbose=True)
snapshot_page = Page.snapshots.latest('pk')
assert snapshot_page.uuid != page.uuid
assert resp.headers['content-type'] == 'application/json'
assert resp.headers['content-disposition'] == 'attachment; filename="export_page_one_20200716.json"'
@ -2471,9 +2475,6 @@ def test_page_discover_placeholder_with_error_cells(app, admin_user):
def test_page_versionning(app, admin_user):
Page.objects.all().delete()
PageSnapshot.objects.all()
page = Page(title='One', slug='one')
page.save()
@ -2520,6 +2521,8 @@ def test_page_versionning(app, admin_user):
resp2 = resp.click('view', index=1)
assert len(ctx.captured_queries) == 70
assert Page.snapshots.latest('pk').related_cells == {'cell_types': ['data_textcell']}
snapshot_page = Page.snapshots.latest('pk')
assert snapshot_page.uuid != page.uuid
assert resp2.text.index('Hello world') < resp2.text.index('Foobar3')
resp2 = resp.click('view', index=0)