diff --git a/wagtail/tests/fixtures/test.json b/wagtail/tests/fixtures/test.json index 99296f7b2..571a9df3f 100644 --- a/wagtail/tests/fixtures/test.json +++ b/wagtail/tests/fixtures/test.json @@ -43,7 +43,7 @@ "show_in_menus": true, "live": true, "depth": 3, - "content_type": ["tests", "simplepage"], + "content_type": ["tests", "eventindex"], "path": "000100010001", "url_path": "/home/events/", "slug": "events" @@ -51,9 +51,9 @@ }, { "pk": 3, - "model": "tests.simplepage", + "model": "tests.eventindex", "fields": { - "content": "Look at our lovely events." + "intro": "Look at our lovely events." } }, diff --git a/wagtail/tests/models.py b/wagtail/tests/models.py index eb18e8656..9124cb253 100644 --- a/wagtail/tests/models.py +++ b/wagtail/tests/models.py @@ -180,3 +180,19 @@ EventPage.promote_panels = [ MultiFieldPanel(COMMON_PANELS, "Common page configuration"), ImageChooserPanel('feed_image'), ] + + +# Event index (has a separate AJAX template, and a custom template context) +class EventIndex(Page): + intro = RichTextField(blank=True) + ajax_template = 'tests/includes/event_listing.html' + + def get_context(self, request): + context = super(EventIndex, self).get_context(request) + context['events'] = EventPage.objects.filter(live=True) + return context + +EventIndex.content_panels = [ + FieldPanel('title', classname="full title"), + FieldPanel('intro', classname="full"), +] diff --git a/wagtail/tests/templates/tests/event_index.html b/wagtail/tests/templates/tests/event_index.html new file mode 100644 index 000000000..dc07020b2 --- /dev/null +++ b/wagtail/tests/templates/tests/event_index.html @@ -0,0 +1,10 @@ + + + + {{ self.title }} + + +

{{ self.title }}

+ {% include "tests/includes/event_listing.html" %} + + diff --git a/wagtail/tests/templates/tests/includes/event_listing.html b/wagtail/tests/templates/tests/includes/event_listing.html new file mode 100644 index 000000000..31c0b1b3b --- /dev/null +++ b/wagtail/tests/templates/tests/includes/event_listing.html @@ -0,0 +1,7 @@ +{% load pageurl %} + + diff --git a/wagtail/wagtailcore/tests.py b/wagtail/wagtailcore/tests.py index 58ff51ada..1e0c0f10c 100644 --- a/wagtail/wagtailcore/tests.py +++ b/wagtail/wagtailcore/tests.py @@ -99,6 +99,13 @@ class TestRouting(TestCase): class TestServeView(TestCase): fixtures = ['test.json'] + def setUp(self): + # Explicitly clear the cache of site root paths. Normally this would be kept + # in sync by the Site.save logic, but this is bypassed when the database is + # rolled back between tests using transactions. + from django.core.cache import cache + cache.delete('wagtail_site_root_paths') + def test_serve(self): response = self.client.get('/events/christmas/') @@ -136,6 +143,24 @@ class TestServeView(TestCase): response = c.get('/christmas/', HTTP_HOST='localhost') self.assertEqual(response.status_code, 404) + def test_serve_with_custom_context(self): + response = self.client.get('/events/') + self.assertEqual(response.status_code, 200) + + # should render the whole page + self.assertContains(response, '

Events

') + + # response should contain data from the custom 'events' context variable + self.assertContains(response, 'Christmas') + + def test_ajax_response(self): + response = self.client.get('/events/', HTTP_X_REQUESTED_WITH='XMLHttpRequest') + self.assertEqual(response.status_code, 200) + + # should only render the content of includes/event_listing.html, not the whole page + self.assertNotContains(response, '

Events

') + self.assertContains(response, 'Christmas') + class TestPagePermission(TestCase): fixtures = ['test.json']