Projet

Général

Profil

0002-page-form-to-add-a-child-37200.patch

Lauréline Guérin, 28 octobre 2019 08:59

Télécharger (4,6 ko)

Voir les différences:

Subject: [PATCH 2/2] page: form to add a child (#37200)

 combo/manager/templates/combo/page_view.html |  1 +
 combo/manager/urls.py                        |  1 +
 combo/manager/views.py                       | 23 +++++++++++++++++++-
 tests/test_manager.py                        | 18 +++++++++++++++
 4 files changed, 42 insertions(+), 1 deletion(-)
combo/manager/templates/combo/page_view.html
11 11
<ul class="extra-actions-menu">
12 12
  <li><a href="{% url 'combo-manager-page-history' pk=object.id %}">{% trans 'history' %}</a></li>
13 13
  <li><a download href="{% url 'combo-manager-page-export' pk=object.id %}">{% trans 'export' %}</a></li>
14
  <li><a rel="popup" href="{% url 'combo-manager-page-add-child' pk=object.id %}">{% trans 'add a child page' %}</a></li>
14 15
  <li><a rel="popup" href="{% url 'combo-manager-page-delete' pk=object.id %}">{% trans 'delete' %}</a></li>
15 16
</ul>
16 17
</span>
combo/manager/urls.py
53 53
            name='combo-manager-page-delete'),
54 54
        url(r'^pages/(?P<pk>\w+)/export$', views.page_export,
55 55
            name='combo-manager-page-export'),
56
        url(r'^pages/(?P<pk>\w+)/add/$', views.page_add_child, name='combo-manager-page-add-child'),
56 57
        url(r'^pages/(?P<pk>\w+)/history$', views.page_history,
57 58
            name='combo-manager-page-history'),
58 59
        url(r'^pages/(?P<page_pk>\w+)/history/(?P<pk>\w+)/$', views.snapshot_restore,
combo/manager/views.py
24 24
from django.core.urlresolvers import reverse, reverse_lazy
25 25
from django.http import HttpResponse, HttpResponseRedirect, Http404
26 26
from django.shortcuts import redirect
27
from django.shortcuts import get_object_or_404
27 28
from django.utils.translation import ugettext_lazy as _
28 29
from django.utils.encoding import force_text, force_bytes
29 30
from django.utils.formats import date_format
......
97 98

  
98 99
    def get_initial(self):
99 100
        initial = super(PageAddView, self).get_initial()
100
        if Page.objects.count() == 0: # first page
101
        if not Page.objects.exists(): # first page
101 102
            initial['title'] = _('Home')
102 103
        return initial
103 104

  
......
117 118
page_add = PageAddView.as_view()
118 119

  
119 120

  
121
class PageAddChildView(PageAddView):
122
    def get_initial(self):
123
        # it can not be the first page, so don't try to initial the title
124
        return super(CreateView, self).get_initial()
125

  
126
    def dispatch(self, request, *args, **kwargs):
127
        print(request.POST)
128
        self.parent = get_object_or_404(Page, pk=kwargs['pk'])
129
        return super(PageAddChildView, self).dispatch(request, *args, **kwargs)
130

  
131
    def form_valid(self, form):
132
        response = super(PageAddChildView, self).form_valid(form)
133
        self.object.parent = self.parent
134
        self.object.save()
135
        return response
136

  
137

  
138
page_add_child = PageAddChildView.as_view()
139

  
140

  
120 141
class PageEditView(UpdateView):
121 142
    model = Page
122 143
    template_name = 'combo/page_add.html'
tests/test_manager.py
73 73
    resp = resp.forms[0].submit()
74 74
    assert Page.objects.get(slug='foobar').title == 'Foobar'
75 75

  
76

  
77
def test_add_child_page(app, admin_user):
78
    page = Page(title='One', slug='one')
79
    page.save()
80
    app = login(app)
81
    resp = app.get('/manage/pages/%s/' % page.pk, status=200)
82
    resp = resp.click(href='.*/add/')
83
    resp.forms[0]['title'].value = 'Two'
84
    resp = resp.forms[0].submit()
85
    child = Page.objects.latest('pk')
86
    assert resp.location.endswith('/manage/pages/%s/' % child.pk)
87
    assert child.title == 'Two'
88
    assert child.parent == page
89

  
90
    app.get('/manage/pages/%s/add/' % child.pk, status=200)
91
    app.get('/manage/pages/42/add/', status=404)
92

  
93

  
76 94
def test_edit_page(app, admin_user):
77 95
    Page.objects.all().delete()
78 96
    app = login(app)
79
-