Beispiel #1
0
    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/"),
            ],
        )
Beispiel #2
0
    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/"),
            ],
        )
Beispiel #3
0
    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'
        )
Beispiel #4
0
    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",
        )
Beispiel #5
0
    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])
Beispiel #6
0
    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])
Beispiel #7
0
    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')
Beispiel #8
0
    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/'),
        ])
Beispiel #9
0
    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/'),
        ])
Beispiel #10
0
    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")
Beispiel #11
0
    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/"),
            ],
        )
Beispiel #12
0
    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/'),
        ])
Beispiel #13
0
    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')
Beispiel #14
0
def render_to_string(template, context):
    with hooks.register_temporarily('register_rich_text_features', register_link_handler):
       return loader.render_to_string(template, context)
Beispiel #15
0
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)