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()