def test_submenu(self): menu = Menu(register_hook_name="register_menu_item") submenu = Menu(register_hook_name="register_submenu_item") with hooks.register_temporarily([ ( "register_menu_item", menu_item_hook("My lovely submenu", submenu, cls=SubmenuMenuItem), ), ("register_submenu_item", menu_item_hook("Pages", "/pages/")), ]): rendered = menu.render_component(self.request) self.assertIsInstance(rendered, list) self.assertEqual(len(rendered), 1) self.assertIsInstance(rendered[0], sidebar.SubMenuItem) self.assertEqual(rendered[0].name, "my-lovely-submenu") self.assertEqual(rendered[0].label, "My lovely submenu") self.assertListEqual( rendered[0].menu_items, [ sidebar.LinkMenuItem("pages", "Pages", "/pages/"), ], )
def test_admin_only_menuitem(self): menu = Menu(register_hook_name="register_menu_item") with hooks.register_temporarily([ ("register_menu_item", menu_item_hook("Pages", "/pages/")), ( "register_menu_item", menu_item_hook("Secret pages", "/pages/secret/", cls=AdminOnlyMenuItem), ), ]): rendered = menu.render_component(self.request) self.request.user = self.create_user(username="******") rendered_non_admin = menu.render_component(self.request) self.assertListEqual( rendered, [ sidebar.LinkMenuItem("pages", "Pages", "/pages/"), sidebar.LinkMenuItem("secret-pages", "Secret pages", "/pages/secret/"), ], ) self.assertListEqual( rendered_non_admin, [ sidebar.LinkMenuItem("pages", "Pages", "/pages/"), ], )
def test_custom_button_with_dropdown(self): def page_custom_listing_buttons(page, page_perms, is_parent=False, next_url=None): yield wagtailadmin_widgets.ButtonWithDropdownFromHook( 'One more more button', hook_name='register_page_listing_one_more_more_buttons', page=page, page_perms=page_perms, is_parent=is_parent, next_url=next_url, attrs={ 'target': '_blank', 'rel': 'noopener noreferrer' }, priority=50) def page_custom_listing_more_buttons(page, page_perms, is_parent=False, next_url=None): yield wagtailadmin_widgets.Button( 'Another useless dropdown button in "One more more button" dropdown', '/custom-url', priority=10) with hooks.register_temporarily( 'register_page_listing_buttons', page_custom_listing_buttons), hooks.register_temporarily( 'register_page_listing_one_more_more_buttons', page_custom_listing_more_buttons): response = self.client.get( reverse('wagtailadmin_explore', args=(self.root_page.id, ))) self.assertEqual(response.status_code, 200) self.assertTemplateUsed( response, 'wagtailadmin/pages/listing/_button_with_dropdown.html') self.assertTemplateUsed(response, 'wagtailadmin/pages/listing/_buttons.html') self.assertContains(response, 'One more more button') self.assertContains( response, 'Another useless dropdown button in "One more more button" dropdown' )
def test_custom_button_with_dropdown(self): def page_custom_listing_buttons( page, page_perms, is_parent=False, next_url=None ): yield wagtailadmin_widgets.ButtonWithDropdownFromHook( "One more more button", hook_name="register_page_listing_one_more_more_buttons", page=page, page_perms=page_perms, is_parent=is_parent, next_url=next_url, attrs={"target": "_blank", "rel": "noreferrer"}, priority=50, ) def page_custom_listing_more_buttons( page, page_perms, is_parent=False, next_url=None ): yield wagtailadmin_widgets.Button( 'Another useless dropdown button in "One more more button" dropdown', "/custom-url", priority=10, ) with hooks.register_temporarily( "register_page_listing_buttons", page_custom_listing_buttons ), hooks.register_temporarily( "register_page_listing_one_more_more_buttons", page_custom_listing_more_buttons, ): response = self.client.get( reverse("wagtailadmin_explore", args=(self.root_page.id,)) ) self.assertEqual(response.status_code, 200) self.assertTemplateUsed( response, "wagtailadmin/pages/listing/_button_with_dropdown.html" ) self.assertTemplateUsed(response, "wagtailadmin/pages/listing/_buttons.html") self.assertContains(response, "One more more button") self.assertContains( response, "Another useless dropdown button in "One more more button" dropdown", )
def test_for_explorer_construct_explorer_page_queryset_ordering(self): def set_custom_ordering(parent_page, pages, request): return pages.order_by('-title') with hooks.register_temporarily('construct_explorer_page_queryset', set_custom_ordering): response = self.get_response(for_explorer=True, child_of=2) content = json.loads(response.content.decode('UTF-8')) page_id_list = self.get_page_id_list(content) self.assertEqual(page_id_list, [6, 20, 4, 12, 5])
def test_construct_explorer_page_queryset_hook_with_ordering(self): def set_custom_ordering(parent_page, pages, request): return pages.order_by('-title') with hooks.register_temporarily('construct_explorer_page_queryset', set_custom_ordering): response = self.client.get( reverse('wagtailadmin_explore', args=(self.root_page.id, ))) # child pages should be ordered by according to the hook preference page_ids = [page.id for page in response.context['pages']] self.assertEqual( page_ids, [self.old_page.id, self.new_page.id, self.child_page.id])
def test_register_page_header_buttons(self): def page_header_buttons(page, page_perms, next_url=None): yield wagtailadmin_widgets.Button('Another useless header button', '/custom-url', priority=10) with hooks.register_temporarily('register_page_header_buttons', page_header_buttons): response = self.client.get( reverse('wagtailadmin_pages:edit', args=(self.root_page.id, ))) self.assertEqual(response.status_code, 200) self.assertTemplateUsed( response, 'wagtailadmin/pages/listing/_button_with_dropdown.html') self.assertContains(response, 'Another useless header button')
def test_simple_menu(self): # Note: initialise the menu before registering hooks as this is what happens in reality. # (the real menus are initialised at the module level in admin/menu.py) menu = Menu(register_hook_name='register_menu_item') with hooks.register_temporarily([ ('register_menu_item', menu_item_hook("Pages", '/pages/')), ('register_menu_item', menu_item_hook("Images", '/images/')), ]): rendered = menu.render_component(self.request) self.assertIsInstance(rendered, list) self.assertListEqual(rendered, [ sidebar.LinkMenuItem('pages', "Pages", '/pages/'), sidebar.LinkMenuItem('images', "Images", '/images/'), ])
def test_menu_with_construct_hook(self): menu = Menu(register_hook_name='register_menu_item', construct_hook_name='construct_menu') def remove_images(request, items): items[:] = [item for item in items if not item.name == 'images'] with hooks.register_temporarily([ ('register_menu_item', menu_item_hook("Pages", '/pages/')), ('register_menu_item', menu_item_hook("Images", '/images/')), ('construct_menu', remove_images), ]): rendered = menu.render_component(self.request) self.assertEqual(rendered, [ sidebar.LinkMenuItem('pages', "Pages", '/pages/'), ])
def test_register_page_listing_buttons(self): def page_listing_buttons(page, page_perms, is_parent=False, next_url=None): yield wagtailadmin_widgets.PageListingButton( "Another useless page listing button", "/custom-url", priority=10 ) with hooks.register_temporarily( "register_page_listing_buttons", page_listing_buttons ): response = self.client.get( reverse("wagtailadmin_explore", args=(self.root_page.id,)) ) self.assertEqual(response.status_code, 200) self.assertTemplateUsed( response, "wagtailadmin/pages/listing/_button_with_dropdown.html" ) self.assertTemplateUsed(response, "wagtailadmin/pages/listing/_buttons.html") self.assertContains(response, "Another useless page listing button")
def test_menu_with_construct_hook(self): menu = Menu( register_hook_name="register_menu_item", construct_hook_name="construct_menu", ) def remove_images(request, items): items[:] = [item for item in items if not item.name == "images"] with hooks.register_temporarily([ ("register_menu_item", menu_item_hook("Pages", "/pages/")), ("register_menu_item", menu_item_hook("Images", "/images/")), ("construct_menu", remove_images), ]): rendered = menu.render_component(self.request) self.assertEqual( rendered, [ sidebar.LinkMenuItem("pages", "Pages", "/pages/"), ], )
def test_admin_only_menuitem(self): menu = Menu(register_hook_name='register_menu_item') with hooks.register_temporarily([ ('register_menu_item', menu_item_hook("Pages", '/pages/')), ('register_menu_item', menu_item_hook("Secret pages", '/pages/secret/', cls=AdminOnlyMenuItem)), ]): rendered = menu.render_component(self.request) self.request.user = self.create_user(username='******') rendered_non_admin = menu.render_component(self.request) self.assertListEqual(rendered, [ sidebar.LinkMenuItem('pages', "Pages", '/pages/'), sidebar.LinkMenuItem('secret-pages', "Secret pages", '/pages/secret/'), ]) self.assertListEqual(rendered_non_admin, [ sidebar.LinkMenuItem('pages', "Pages", '/pages/'), ])
def test_register_page_listing_more_buttons(self): def page_listing_more_buttons(page, page_perms, is_parent=False, next_url=None): yield wagtailadmin_widgets.Button( 'Another useless button in default "More" dropdown', '/custom-url', priority=10) with hooks.register_temporarily('register_page_listing_more_buttons', page_listing_more_buttons): response = self.client.get( reverse('wagtailadmin_explore', args=(self.root_page.id, ))) self.assertEqual(response.status_code, 200) self.assertTemplateUsed( response, 'wagtailadmin/pages/listing/_button_with_dropdown.html') self.assertTemplateUsed(response, 'wagtailadmin/pages/listing/_buttons.html') self.assertContains( response, 'Another useless button in default "More" dropdown')
def render_to_string(template, context): with hooks.register_temporarily('register_rich_text_features', register_link_handler): return loader.render_to_string(template, context)
def render(request, template_name, context, content_type = None, status = None, using = None): with hooks.register_temporarily('register_rich_text_features', register_link_handler): return shortcuts.render(request, template_name, context, content_type = content_type, status = status, using = using)