diff --git a/wagtail/wagtailadmin/tests/test_page_chooser.py b/wagtail/wagtailadmin/tests/test_page_chooser.py index 1f4223f87..c7d150494 100644 --- a/wagtail/wagtailadmin/tests/test_page_chooser.py +++ b/wagtail/wagtailadmin/tests/test_page_chooser.py @@ -27,6 +27,22 @@ class TestChooserBrowse(TestCase, WagtailTestUtils): self.assertTemplateUsed(response, 'wagtailadmin/chooser/browse.html') +class TestCanChooseRootFlag(TestCase, WagtailTestUtils): + def setUp(self): + self.login() + + def get(self, params={}): + return self.client.get(reverse('wagtailadmin_choose_page'), params) + + def test_cannot_choose_root_by_default(self): + response = self.get() + self.assertNotContains(response, '/admin/pages/1/edit/') + + def test_can_choose_root(self): + response = self.get({'can_choose_root': 'true'}) + self.assertContains(response, '/admin/pages/1/edit/') + + class TestChooserBrowseChild(TestCase, WagtailTestUtils): def setUp(self): self.root_page = Page.objects.get(id=2) diff --git a/wagtail/wagtailadmin/views/chooser.py b/wagtail/wagtailadmin/views/chooser.py index 15ffa5bfd..e1bd3c07c 100644 --- a/wagtail/wagtailadmin/views/chooser.py +++ b/wagtail/wagtailadmin/views/chooser.py @@ -69,8 +69,10 @@ def browse(request, parent_page_id=None): else: desired_classes = (Page, ) + can_choose_root = request.GET.get('can_choose_root', False) + # Parent page can be chosen if it is a instance of desired_classes - parent_page.can_choose = issubclass(parent_page.specific_class or Page, desired_classes) + parent_page.can_choose = issubclass(parent_page.specific_class or Page, desired_classes) and (can_choose_root or not parent_page.is_root()) # Pagination # We apply pagination first so we don't need to walk the entire list