Projet

Général

Profil

0001-manager-add-link-to-export-page-snapshot-62023.patch

Corentin Séchet, 06 mai 2022 12:10

Télécharger (4,42 ko)

Voir les différences:

Subject: [PATCH] manager: add link to export page snapshot (#62023)

 .../manager/templates/combo/page_history.html |  1 +
 combo/manager/urls.py                         |  5 +++
 combo/manager/views.py                        | 11 +++++++
 tests/test_manager.py                         | 32 +++++++++++++++++++
 4 files changed, 49 insertions(+)
combo/manager/templates/combo/page_history.html
21 21
<li>{{ snapshot.timestamp }}, {{ snapshot.comment }}
22 22
    {% if snapshot.user %} ({{ snapshot.user.get_full_name }}){% endif %}
23 23
    — <a href="{% url 'combo-snapshot-view' pk=snapshot.id %}">{% trans "view" %}</a>
24
    — <a href="{% url 'combo-manager-snapshot-export' page_pk=view.page.id pk=snapshot.id %}">{% trans "export" %}</a>
24 25
    — <a href="{% url 'combo-manager-snapshot-restore' page_pk=view.page.id pk=snapshot.id %}" rel="popup">{% trans "restore" %}</a>
25 26
</li>
26 27
{% endfor %}
combo/manager/urls.py
96 96
        pages_admin_required(views.snapshot_restore),
97 97
        name='combo-manager-snapshot-restore',
98 98
    ),
99
    url(
100
        r'^pages/(?P<page_pk>\d+)/history/(?P<pk>\d+)/export$',
101
        pages_admin_required(views.snapshot_export),
102
        name='combo-manager-snapshot-export',
103
    ),
99 104
    url(
100 105
        r'^pages/(?P<page_pk>\d+)/add-cell-to-(?P<ph_key>[\w_-]+)/(?P<cell_type>\w+)/(?P<variant>[\w-]+)/$',
101 106
        views.page_add_cell,
combo/manager/views.py
625 625
snapshot_restore = SnapshotRestoreView.as_view()
626 626

  
627 627

  
628
def snapshot_export(request, *args, **kwargs):
629
    snapshot = PageSnapshot.objects.get(id=kwargs['pk'])
630
    page = snapshot.get_page()
631
    response = HttpResponse(content_type='application/json')
632
    response['Content-Disposition'] = 'attachment; filename="export_page_{}_{}.json"'.format(
633
        snapshot.get_page().slug, snapshot.timestamp.strftime('%Y%m%d')
634
    )
635
    json.dump(page.get_serialized_page(), response, indent=2)
636
    return response
637

  
638

  
628 639
class PageRedirectToEditView(RedirectView):
629 640
    permanent = False
630 641

  
tests/test_manager.py
901 901
    assert resp.json['pages'][0].get('fields').get('slug') == 'one'
902 902

  
903 903

  
904
def test_export_page_snapshot(freezer, app, admin_user):
905
    Page.objects.all().delete()
906
    page = Page(title='One', slug='one', template_name='standard')
907
    page.save()
908
    app = login(app)
909

  
910
    freezer.move_to('2020-07-16')
911
    resp = app.get('/manage/pages/%s/' % page.id, status=200)
912
    resp = resp.click(href='.*/title')
913
    resp.form['title'].value = 'Initial Title'
914
    resp = resp.form.submit()
915
    resp = resp.follow()
916

  
917
    freezer.move_to('2020-07-17')
918
    resp = resp.click(href='.*/title')
919
    resp.form['title'].value = 'Updated Title'
920
    resp = resp.form.submit()
921

  
922
    history = app.get('/manage/pages/%s/history' % page.id, status=200)
923
    resp = history.click('export', index=0, verbose=True)
924

  
925
    assert resp.headers['content-type'] == 'application/json'
926
    assert resp.headers['content-disposition'] == 'attachment; filename="export_page_one_20200717.json"'
927
    assert resp.json['fields']['title'] == 'Updated Title'
928

  
929
    resp = history.click('export', index=1, verbose=True)
930

  
931
    assert resp.headers['content-type'] == 'application/json'
932
    assert resp.headers['content-disposition'] == 'attachment; filename="export_page_one_20200716.json"'
933
    assert resp.json['fields']['title'] == 'Initial Title'
934

  
935

  
904 936
def test_export_page_without_child(freezer, app, admin_user):
905 937
    page = Page.objects.create(title='One', slug='one', template_name='standard')
906 938
    Page.objects.create(title='Two', slug='two', parent=page, template_name='standard')
907
-