diff --git a/wagtail/admin/tests/test_widgets.py b/wagtail/admin/tests/test_widgets.py
index 6b2d553ea7..2ac8c99e87 100644
--- a/wagtail/admin/tests/test_widgets.py
+++ b/wagtail/admin/tests/test_widgets.py
@@ -26,6 +26,31 @@ class TestAdminPageChooserWidget(TestCase):
widget = widgets.AdminPageChooser()
self.assertFalse(widget.is_hidden)
+ def test_adapt(self):
+ widget = widgets.AdminPageChooser()
+
+ js_args = widgets.PageChooserAdapter().js_args(widget)
+ self.assertInHTML("""""", js_args[0])
+ self.assertIn(">Choose a page<", js_args[0])
+ self.assertEqual(js_args[1], '__ID__')
+ self.assertEqual(js_args[2], {
+ 'can_choose_root': False,
+ 'model_names': ['wagtailcore.page'],
+ 'user_perms': None
+ })
+
+ def test_adapt_with_target_model(self):
+ widget = widgets.AdminPageChooser(target_models=[SimplePage, EventPage])
+
+ js_args = widgets.PageChooserAdapter().js_args(widget)
+ self.assertEqual(js_args[2]['model_names'], ['tests.simplepage', 'tests.eventpage'])
+
+ def test_adapt_with_can_choose_root(self):
+ widget = widgets.AdminPageChooser(can_choose_root=True)
+
+ js_args = widgets.PageChooserAdapter().js_args(widget)
+ self.assertTrue(js_args[2]['can_choose_root'])
+
def test_render_html(self):
# render_html is mostly an internal API, but we do want to support calling it with None as
# a value, to render a blank field without the JS initialiser (so that we can call that
diff --git a/wagtail/core/tests/test_blocks.py b/wagtail/core/tests/test_blocks.py
index b29aa7d3f7..6022bcda70 100644
--- a/wagtail/core/tests/test_blocks.py
+++ b/wagtail/core/tests/test_blocks.py
@@ -3593,55 +3593,65 @@ class TestPageChooserBlock(TestCase):
# None should deserialize to None
self.assertEqual(block.to_python(None), None)
- @unittest.expectedFailure # TODO(telepath)
- def test_form_render(self):
+ def test_adapt(self):
+ from wagtail.admin.widgets.chooser import AdminPageChooser
+
block = blocks.PageChooserBlock(help_text="pick a page, any page")
- empty_form_html = block.render_form(None, 'page')
- self.assertInHTML('', empty_form_html)
- self.assertIn('createPageChooser("page", null, {"model_names": ["wagtailcore.page"], "can_choose_root": false, "user_perms": null});', empty_form_html)
+ block.set_name('test_pagechooserblock')
+ js_args = FieldBlockAdapter().js_args(block)
- christmas_page = Page.objects.get(slug='christmas')
- christmas_form_html = block.render_form(christmas_page, 'page')
- expected_html = '' % christmas_page.id
- self.assertInHTML(expected_html, christmas_form_html)
- self.assertIn("pick a page, any page", christmas_form_html)
+ self.assertEqual(js_args[0], 'test_pagechooserblock')
+ self.assertIsInstance(js_args[1], AdminPageChooser)
+ self.assertEqual(js_args[1].target_models, [Page])
+ self.assertFalse(js_args[1].can_choose_root)
+ self.assertEqual(js_args[2], {
+ 'label': 'Test pagechooserblock',
+ 'required': True,
+ 'icon': 'redirect',
+ 'helpText': 'pick a page, any page',
+ 'classname': 'field model_choice_field widget-admin_page_chooser fieldname-test_pagechooserblock'
+ })
- @unittest.expectedFailure # TODO(telepath)
- def test_form_render_with_target_model_default(self):
- block = blocks.PageChooserBlock()
- empty_form_html = block.render_form(None, 'page')
- self.assertIn('createPageChooser("page", null, {"model_names": ["wagtailcore.page"], "can_choose_root": false, "user_perms": null});', empty_form_html)
-
- @unittest.expectedFailure # TODO(telepath)
- def test_form_render_with_target_model_string(self):
+ def test_adapt_with_target_model_string(self):
block = blocks.PageChooserBlock(help_text="pick a page, any page", page_type='tests.SimplePage')
- empty_form_html = block.render_form(None, 'page')
- self.assertIn('createPageChooser("page", null, {"model_names": ["tests.simplepage"], "can_choose_root": false, "user_perms": null});', empty_form_html)
- @unittest.expectedFailure # TODO(telepath)
- def test_form_render_with_target_model_literal(self):
+ block.set_name('test_pagechooserblock')
+ js_args = FieldBlockAdapter().js_args(block)
+
+ self.assertEqual(js_args[1].target_models, [SimplePage])
+
+ def test_adapt_with_target_model_literal(self):
block = blocks.PageChooserBlock(help_text="pick a page, any page", page_type=SimplePage)
- empty_form_html = block.render_form(None, 'page')
- self.assertIn('createPageChooser("page", null, {"model_names": ["tests.simplepage"], "can_choose_root": false, "user_perms": null});', empty_form_html)
- @unittest.expectedFailure # TODO(telepath)
- def test_form_render_with_target_model_multiple_strings(self):
+ block.set_name('test_pagechooserblock')
+ js_args = FieldBlockAdapter().js_args(block)
+
+ self.assertEqual(js_args[1].target_models, [SimplePage])
+
+ def test_adapt_with_target_model_multiple_strings(self):
block = blocks.PageChooserBlock(help_text="pick a page, any page", page_type=['tests.SimplePage', 'tests.EventPage'])
- empty_form_html = block.render_form(None, 'page')
- self.assertIn('createPageChooser("page", null, {"model_names": ["tests.simplepage", "tests.eventpage"], "can_choose_root": false, "user_perms": null});', empty_form_html)
- @unittest.expectedFailure # TODO(telepath)
- def test_form_render_with_target_model_multiple_literals(self):
+ block.set_name('test_pagechooserblock')
+ js_args = FieldBlockAdapter().js_args(block)
+
+ self.assertEqual(js_args[1].target_models, [SimplePage, EventPage])
+
+ def test_adapt_with_target_model_multiple_literals(self):
block = blocks.PageChooserBlock(help_text="pick a page, any page", page_type=[SimplePage, EventPage])
- empty_form_html = block.render_form(None, 'page')
- self.assertIn('createPageChooser("page", null, {"model_names": ["tests.simplepage", "tests.eventpage"], "can_choose_root": false, "user_perms": null});', empty_form_html)
- @unittest.expectedFailure # TODO(telepath)
- def test_form_render_with_can_choose_root(self):
+ block.set_name('test_pagechooserblock')
+ js_args = FieldBlockAdapter().js_args(block)
+
+ self.assertEqual(js_args[1].target_models, [SimplePage, EventPage])
+
+ def test_adapt_with_can_choose_root(self):
block = blocks.PageChooserBlock(help_text="pick a page, any page", can_choose_root=True)
- empty_form_html = block.render_form(None, 'page')
- self.assertIn('createPageChooser("page", null, {"model_names": ["wagtailcore.page"], "can_choose_root": true, "user_perms": null});', empty_form_html)
+
+ block.set_name('test_pagechooserblock')
+ js_args = FieldBlockAdapter().js_args(block)
+
+ self.assertTrue(js_args[1].can_choose_root)
def test_form_response(self):
block = blocks.PageChooserBlock()