From c70814d62b01c26cee0fb955d66d9928d2cf53be Mon Sep 17 00:00:00 2001 From: Stefan Hammer Date: Thu, 6 Oct 2022 10:05:34 +0200 Subject: [PATCH] Add test case for preview requests on sites with a per-site cache This contains the extracted test case from the PR #7581, which solved a caching issue. That issue has been fixed later by #8709. --- wagtail/contrib/routable_page/tests.py | 41 ++++++++++++++++++++++++-- wagtail/test/routablepage/models.py | 2 +- 2 files changed, 40 insertions(+), 3 deletions(-) diff --git a/wagtail/contrib/routable_page/tests.py b/wagtail/contrib/routable_page/tests.py index 390206a893..35af197564 100644 --- a/wagtail/contrib/routable_page/tests.py +++ b/wagtail/contrib/routable_page/tests.py @@ -3,7 +3,7 @@ from unittest import mock from django.core import checks from django.test import RequestFactory, TestCase from django.test.utils import override_settings -from django.urls import path +from django.urls import path, reverse from django.urls.exceptions import NoReverseMatch from wagtail.contrib.routable_page.templatetags.wagtailroutablepage_tags import ( @@ -14,9 +14,10 @@ from wagtail.test.routablepage.models import ( RoutablePageTest, RoutablePageWithOverriddenIndexRouteTest, ) +from wagtail.tests.utils import WagtailTestUtils -class TestRoutablePage(TestCase): +class TestRoutablePage(TestCase, WagtailTestUtils): model = RoutablePageTest def setUp(self): @@ -239,6 +240,42 @@ class TestRoutablePage(TestCase): ): self.assertEqual(RoutablePageTest.check(), [warning]) + def test_preview_with_site_cache(self): + self.user = self.login() + page = self.home_page.add_child( + instance=RoutablePageWithOverriddenIndexRouteTest(title="title", live=True) + ) + preview_url = reverse("wagtailadmin_pages:preview_on_edit", args=(page.id,)) + + with self.modify_settings( + MIDDLEWARE={ + "append": "django.middleware.cache.FetchFromCacheMiddleware", + "prepend": "django.middleware.cache.UpdateCacheMiddleware", + } + ): + post_data = { + "title": "test title 1", + "slug": "routable-page-test-title", + } + response = self.client.post(preview_url, post_data) + self.assertEqual(response.status_code, 200) + self.assertJSONEqual( + response.content.decode(), {"is_valid": True, "is_available": True} + ) + + response = self.client.get(preview_url) + self.assertContains(response, "title=test title 1") + + post_data["title"] = "test title 2" + response = self.client.post(preview_url, post_data) + self.assertEqual(response.status_code, 200) + self.assertJSONEqual( + response.content.decode(), {"is_valid": True, "is_available": True} + ) + + response = self.client.get(preview_url) + self.assertContains(response, "title=test title 2") + class TestRoutablePageTemplateTag(TestCase): def setUp(self): diff --git a/wagtail/test/routablepage/models.py b/wagtail/test/routablepage/models.py index 2acd6dfff2..4d860a51bb 100644 --- a/wagtail/test/routablepage/models.py +++ b/wagtail/test/routablepage/models.py @@ -63,4 +63,4 @@ class RoutablePageTest(RoutablePage): class RoutablePageWithOverriddenIndexRouteTest(RoutablePage): @route(r"^$") def main(self, request): - return HttpResponse("OVERRIDDEN INDEX ROUTE") + return HttpResponse("OVERRIDDEN INDEX ROUTE title=" + self.title)