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']