mirror of
https://github.com/Hopiu/wagtail.git
synced 2026-05-24 06:43:46 +00:00
Merge pull request #425 from kaedroho/issue/222
Fixes and Tests for #339
This commit is contained in:
commit
e344b8a367
4 changed files with 127 additions and 2 deletions
|
|
@ -1,4 +1,5 @@
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
|
from django.utils import six
|
||||||
|
|
||||||
# We need to make sure that we're using the same unittest library that Django uses internally
|
# We need to make sure that we're using the same unittest library that Django uses internally
|
||||||
# Otherwise, we get issues with the "SkipTest" and "ExpectedFailure" exceptions being recognised as errors
|
# Otherwise, we get issues with the "SkipTest" and "ExpectedFailure" exceptions being recognised as errors
|
||||||
|
|
@ -21,3 +22,6 @@ class WagtailTestUtils(object):
|
||||||
self.client.login(username='test', password='password')
|
self.client.login(username='test', password='password')
|
||||||
|
|
||||||
return user
|
return user
|
||||||
|
|
||||||
|
def assertRegex(self, *args, **kwargs):
|
||||||
|
six.assertRegex(self, *args, **kwargs)
|
||||||
|
|
|
||||||
|
|
@ -575,6 +575,11 @@ class BaseInlinePanel(EditHandler):
|
||||||
child_edit_handler_class(instance=subform.instance, form=subform)
|
child_edit_handler_class(instance=subform.instance, form=subform)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# if this formset is valid, it may have been re-ordered; respect that
|
||||||
|
# in case the parent form errored and we need to re-render
|
||||||
|
if self.formset.can_order and self.formset.is_valid():
|
||||||
|
self.children = sorted(self.children, key=lambda x: x.form.cleaned_data['ORDER'])
|
||||||
|
|
||||||
empty_form = self.formset.empty_form
|
empty_form = self.formset.empty_form
|
||||||
empty_form.fields['DELETE'].widget = forms.HiddenInput()
|
empty_form.fields['DELETE'].widget = forms.HiddenInput()
|
||||||
if self.formset.can_order:
|
if self.formset.can_order:
|
||||||
|
|
|
||||||
|
|
@ -312,6 +312,10 @@ class TestInlinePanel(TestCase):
|
||||||
'ORDER': MagicMock()}
|
'ORDER': MagicMock()}
|
||||||
instance = FakeInstance()
|
instance = FakeInstance()
|
||||||
|
|
||||||
|
cleaned_data = {
|
||||||
|
'ORDER': 0,
|
||||||
|
}
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return 'fake form'
|
return 'fake form'
|
||||||
|
|
||||||
|
|
@ -319,6 +323,9 @@ class TestInlinePanel(TestCase):
|
||||||
empty_form = FakeForm()
|
empty_form = FakeForm()
|
||||||
can_order = True
|
can_order = True
|
||||||
|
|
||||||
|
def is_valid(self):
|
||||||
|
return True
|
||||||
|
|
||||||
label = 'label'
|
label = 'label'
|
||||||
help_text = 'help text'
|
help_text = 'help text'
|
||||||
errors = ['errors']
|
errors = ['errors']
|
||||||
|
|
|
||||||
|
|
@ -7,8 +7,8 @@ from django.core import mail
|
||||||
from django.core.paginator import Paginator
|
from django.core.paginator import Paginator
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
|
|
||||||
from wagtail.tests.models import SimplePage, EventPage, StandardIndex, BusinessIndex, BusinessChild, BusinessSubIndex
|
from wagtail.tests.models import SimplePage, EventPage, EventPageCarouselItem, StandardIndex, BusinessIndex, BusinessChild, BusinessSubIndex
|
||||||
from wagtail.tests.utils import WagtailTestUtils
|
from wagtail.tests.utils import unittest, WagtailTestUtils
|
||||||
from wagtail.wagtailcore.models import Page, PageRevision
|
from wagtail.wagtailcore.models import Page, PageRevision
|
||||||
from wagtail.wagtailcore.signals import page_published
|
from wagtail.wagtailcore.signals import page_published
|
||||||
from wagtail.wagtailusers.models import UserProfile
|
from wagtail.wagtailusers.models import UserProfile
|
||||||
|
|
@ -654,6 +654,115 @@ class TestPageEdit(TestCase, WagtailTestUtils):
|
||||||
self.assertContains(response, "I've been edited!")
|
self.assertContains(response, "I've been edited!")
|
||||||
|
|
||||||
|
|
||||||
|
class TestPageEditReordering(TestCase, WagtailTestUtils):
|
||||||
|
def setUp(self):
|
||||||
|
# Find root page
|
||||||
|
self.root_page = Page.objects.get(id=2)
|
||||||
|
|
||||||
|
# Add event page
|
||||||
|
self.event_page = EventPage()
|
||||||
|
self.event_page.title = "Event page"
|
||||||
|
self.event_page.slug = "event-page"
|
||||||
|
self.event_page.carousel_items = [
|
||||||
|
EventPageCarouselItem(caption='1234567', sort_order=1),
|
||||||
|
EventPageCarouselItem(caption='7654321', sort_order=2),
|
||||||
|
EventPageCarouselItem(caption='abcdefg', sort_order=3),
|
||||||
|
]
|
||||||
|
self.root_page.add_child(instance=self.event_page)
|
||||||
|
|
||||||
|
# Login
|
||||||
|
self.user = self.login()
|
||||||
|
|
||||||
|
def check_order(self, response, expected_order):
|
||||||
|
inline_panel = response.context['edit_handler'].children[0].children[9]
|
||||||
|
order = [child.form.instance.caption for child in inline_panel.children]
|
||||||
|
self.assertEqual(order, expected_order)
|
||||||
|
|
||||||
|
def test_order(self):
|
||||||
|
response = self.client.get(reverse('wagtailadmin_pages_edit', args=(self.event_page.id, )))
|
||||||
|
|
||||||
|
self.assertEqual(response.status_code, 200)
|
||||||
|
self.check_order(response, ['1234567', '7654321', 'abcdefg'])
|
||||||
|
|
||||||
|
def test_reorder(self):
|
||||||
|
post_data = {
|
||||||
|
'title': "Event page",
|
||||||
|
'slug': 'event-page',
|
||||||
|
|
||||||
|
'date_from': '01/01/2014',
|
||||||
|
'cost': '$10',
|
||||||
|
'audience': 'public',
|
||||||
|
'location': 'somewhere',
|
||||||
|
|
||||||
|
'related_links-INITIAL_FORMS': 0,
|
||||||
|
'related_links-MAX_NUM_FORMS': 1000,
|
||||||
|
'related_links-TOTAL_FORMS': 0,
|
||||||
|
|
||||||
|
'speakers-INITIAL_FORMS': 0,
|
||||||
|
'speakers-MAX_NUM_FORMS': 1000,
|
||||||
|
'speakers-TOTAL_FORMS': 0,
|
||||||
|
|
||||||
|
'carousel_items-INITIAL_FORMS': 3,
|
||||||
|
'carousel_items-MAX_NUM_FORMS': 1000,
|
||||||
|
'carousel_items-TOTAL_FORMS': 3,
|
||||||
|
'carousel_items-0-id': self.event_page.carousel_items.all()[0].id,
|
||||||
|
'carousel_items-0-caption': self.event_page.carousel_items.all()[0].caption,
|
||||||
|
'carousel_items-0-ORDER': 2,
|
||||||
|
'carousel_items-1-id': self.event_page.carousel_items.all()[1].id,
|
||||||
|
'carousel_items-1-caption': self.event_page.carousel_items.all()[1].caption,
|
||||||
|
'carousel_items-1-ORDER': 3,
|
||||||
|
'carousel_items-2-id': self.event_page.carousel_items.all()[2].id,
|
||||||
|
'carousel_items-2-caption': self.event_page.carousel_items.all()[2].caption,
|
||||||
|
'carousel_items-2-ORDER': 1,
|
||||||
|
}
|
||||||
|
response = self.client.post(reverse('wagtailadmin_pages_edit', args=(self.event_page.id, )), post_data)
|
||||||
|
|
||||||
|
# Should be redirected to explorer page
|
||||||
|
self.assertRedirects(response, reverse('wagtailadmin_explore', args=(self.root_page.id, )))
|
||||||
|
|
||||||
|
# Check order
|
||||||
|
response = self.client.get(reverse('wagtailadmin_pages_edit', args=(self.event_page.id, )))
|
||||||
|
|
||||||
|
self.assertEqual(response.status_code, 200)
|
||||||
|
self.check_order(response, ['abcdefg', '1234567', '7654321'])
|
||||||
|
|
||||||
|
def test_reorder_with_validation_error(self):
|
||||||
|
post_data = {
|
||||||
|
'title': "", # Validation error
|
||||||
|
'slug': 'event-page',
|
||||||
|
|
||||||
|
'date_from': '01/01/2014',
|
||||||
|
'cost': '$10',
|
||||||
|
'audience': 'public',
|
||||||
|
'location': 'somewhere',
|
||||||
|
|
||||||
|
'related_links-INITIAL_FORMS': 0,
|
||||||
|
'related_links-MAX_NUM_FORMS': 1000,
|
||||||
|
'related_links-TOTAL_FORMS': 0,
|
||||||
|
|
||||||
|
'speakers-INITIAL_FORMS': 0,
|
||||||
|
'speakers-MAX_NUM_FORMS': 1000,
|
||||||
|
'speakers-TOTAL_FORMS': 0,
|
||||||
|
|
||||||
|
'carousel_items-INITIAL_FORMS': 3,
|
||||||
|
'carousel_items-MAX_NUM_FORMS': 1000,
|
||||||
|
'carousel_items-TOTAL_FORMS': 3,
|
||||||
|
'carousel_items-0-id': self.event_page.carousel_items.all()[0].id,
|
||||||
|
'carousel_items-0-caption': self.event_page.carousel_items.all()[0].caption,
|
||||||
|
'carousel_items-0-ORDER': 2,
|
||||||
|
'carousel_items-1-id': self.event_page.carousel_items.all()[1].id,
|
||||||
|
'carousel_items-1-caption': self.event_page.carousel_items.all()[1].caption,
|
||||||
|
'carousel_items-1-ORDER': 3,
|
||||||
|
'carousel_items-2-id': self.event_page.carousel_items.all()[2].id,
|
||||||
|
'carousel_items-2-caption': self.event_page.carousel_items.all()[2].caption,
|
||||||
|
'carousel_items-2-ORDER': 1,
|
||||||
|
}
|
||||||
|
response = self.client.post(reverse('wagtailadmin_pages_edit', args=(self.event_page.id, )), post_data)
|
||||||
|
|
||||||
|
self.assertEqual(response.status_code, 200)
|
||||||
|
self.check_order(response, ['abcdefg', '1234567', '7654321'])
|
||||||
|
|
||||||
|
|
||||||
class TestPageDelete(TestCase, WagtailTestUtils):
|
class TestPageDelete(TestCase, WagtailTestUtils):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
# Find root page
|
# Find root page
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue