From 0b9bb1d9ad9b7fd4cc29b0a57eb62c0b887c4171 Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Wed, 14 Sep 2016 13:42:54 +0100 Subject: [PATCH] Added tests for editor workflow customisation hooks --- wagtail/tests/utils.py | 10 ++ .../wagtailadmin/tests/test_pages_views.py | 154 ++++++++++++++++++ 2 files changed, 164 insertions(+) diff --git a/wagtail/tests/utils.py b/wagtail/tests/utils.py index 3ccd5965e..3e2d4bb61 100644 --- a/wagtail/tests/utils.py +++ b/wagtail/tests/utils.py @@ -103,6 +103,16 @@ class WagtailTestUtils(object): """ return _AssertLogsContext(self, logger, level) + @contextmanager + def register_hook(self, hook_name, fn): + from wagtail.wagtailcore import hooks + + hooks.register(hook_name, fn) + try: + yield + finally: + hooks.get_hooks(hook_name).remove(fn) + class WagtailPageTests(WagtailTestUtils, TestCase): """ diff --git a/wagtail/wagtailadmin/tests/test_pages_views.py b/wagtail/wagtailadmin/tests/test_pages_views.py index 95848d605..3fa1814e6 100644 --- a/wagtail/wagtailadmin/tests/test_pages_views.py +++ b/wagtail/wagtailadmin/tests/test_pages_views.py @@ -14,6 +14,7 @@ from django.core import mail, paginator from django.core.files.base import ContentFile from django.core.urlresolvers import reverse from django.db.models.signals import post_delete, pre_delete +from django.http import HttpRequest, HttpResponse from django.test import TestCase from django.utils import formats, timezone from django.utils.dateparse import parse_date @@ -848,6 +849,65 @@ class TestPageCreation(TestCase, WagtailTestUtils): self.assertEqual(response.status_code, 200) self.assertFormError(response, 'form', 'slug', "Ensure this value has at most 255 characters (it has 287).") + def test_before_create_page_hook(self): + def hook_func(request, parent_page, page_class): + self.assertIsInstance(request, HttpRequest) + self.assertEqual(parent_page.id, self.root_page.id) + self.assertEqual(page_class, SimplePage) + + return HttpResponse("Overridden!") + + with self.register_hook('before_create_page', hook_func): + response = self.client.get( + reverse('wagtailadmin_pages:add', args=('tests', 'simplepage', self.root_page.id)) + ) + + self.assertEqual(response.status_code, 200) + self.assertEqual(response.content, b"Overridden!") + + def test_before_create_page_hook_post(self): + def hook_func(request, parent_page, page_class): + self.assertIsInstance(request, HttpRequest) + self.assertEqual(parent_page.id, self.root_page.id) + self.assertEqual(page_class, SimplePage) + + return HttpResponse("Overridden!") + + with self.register_hook('before_create_page', hook_func): + post_data = { + 'title': "New page!", + 'content': "Some content", + 'slug': 'hello-world', + } + response = self.client.post( + reverse('wagtailadmin_pages:add', args=('tests', 'simplepage', self.root_page.id)), + post_data + ) + + self.assertEqual(response.status_code, 200) + self.assertEqual(response.content, b"Overridden!") + + def test_after_create_page_hook(self): + def hook_func(request, page): + self.assertIsInstance(request, HttpRequest) + self.assertIsInstance(page, SimplePage) + + return HttpResponse("Overridden!") + + with self.register_hook('after_create_page', hook_func): + post_data = { + 'title': "New page!", + 'content': "Some content", + 'slug': 'hello-world', + } + response = self.client.post( + reverse('wagtailadmin_pages:add', args=('tests', 'simplepage', self.root_page.id)), + post_data + ) + + self.assertEqual(response.status_code, 200) + self.assertEqual(response.content, b"Overridden!") + class TestPageEdit(TestCase, WagtailTestUtils): def setUp(self): @@ -1343,6 +1403,61 @@ class TestPageEdit(TestCase, WagtailTestUtils): self.assertNotContains(response, "This title only exists on the live database record") self.assertContains(response, "Some content with a draft edit") + def test_before_edit_page_hook(self): + def hook_func(request, page): + self.assertIsInstance(request, HttpRequest) + self.assertEqual(page.id, self.child_page.id) + + return HttpResponse("Overridden!") + + with self.register_hook('before_edit_page', hook_func): + response = self.client.get(reverse('wagtailadmin_pages:edit', args=(self.child_page.id, ))) + + self.assertEqual(response.status_code, 200) + self.assertEqual(response.content, b"Overridden!") + + def test_before_edit_page_hook_post(self): + def hook_func(request, page): + self.assertIsInstance(request, HttpRequest) + self.assertEqual(page.id, self.child_page.id) + + return HttpResponse("Overridden!") + + with self.register_hook('before_edit_page', hook_func): + post_data = { + 'title': "I've been edited!", + 'content': "Some content", + 'slug': 'hello-world-new', + 'action-publish': "Publish", + } + response = self.client.post( + reverse('wagtailadmin_pages:edit', args=(self.child_page.id, )), post_data + ) + + self.assertEqual(response.status_code, 200) + self.assertEqual(response.content, b"Overridden!") + + def test_after_edit_page_hook(self): + def hook_func(request, page): + self.assertIsInstance(request, HttpRequest) + self.assertEqual(page.id, self.child_page.id) + + return HttpResponse("Overridden!") + + with self.register_hook('after_edit_page', hook_func): + post_data = { + 'title': "I've been edited!", + 'content': "Some content", + 'slug': 'hello-world-new', + 'action-publish': "Publish", + } + response = self.client.post( + reverse('wagtailadmin_pages:edit', args=(self.child_page.id, )), post_data + ) + + self.assertEqual(response.status_code, 200) + self.assertEqual(response.content, b"Overridden!") + class TestPageEditReordering(TestCase, WagtailTestUtils): def setUp(self): @@ -1594,6 +1709,45 @@ class TestPageDelete(TestCase, WagtailTestUtils): self.assertIn((StandardIndex, self.child_index.id), post_delete_signals_received) self.assertIn((StandardChild, self.grandchild_page.id), post_delete_signals_received) + def test_before_delete_page_hook(self): + def hook_func(request, page): + self.assertIsInstance(request, HttpRequest) + self.assertEqual(page.id, self.child_page.id) + + return HttpResponse("Overridden!") + + with self.register_hook('before_delete_page', hook_func): + response = self.client.get(reverse('wagtailadmin_pages:delete', args=(self.child_page.id, ))) + + self.assertEqual(response.status_code, 200) + self.assertEqual(response.content, b"Overridden!") + + def test_before_delete_page_hook_post(self): + def hook_func(request, page): + self.assertIsInstance(request, HttpRequest) + self.assertEqual(page.id, self.child_page.id) + + return HttpResponse("Overridden!") + + with self.register_hook('before_delete_page', hook_func): + response = self.client.post(reverse('wagtailadmin_pages:delete', args=(self.child_page.id, ))) + + self.assertEqual(response.status_code, 200) + self.assertEqual(response.content, b"Overridden!") + + def test_after_delete_page_hook(self): + def hook_func(request, page): + self.assertIsInstance(request, HttpRequest) + self.assertEqual(page.id, self.child_page.id) + + return HttpResponse("Overridden!") + + with self.register_hook('after_delete_page', hook_func): + response = self.client.post(reverse('wagtailadmin_pages:delete', args=(self.child_page.id, ))) + + self.assertEqual(response.status_code, 200) + self.assertEqual(response.content, b"Overridden!") + class TestPageSearch(TestCase, WagtailTestUtils): def setUp(self):