Exemplo n.º 1
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",
        )
Exemplo n.º 2
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/"),
            ],
        )
Exemplo n.º 3
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/"),
            ],
        )
Exemplo n.º 4
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")
Exemplo n.º 5
0
 def test_page_tree_sync_off(self):
     with hooks.register_temporarily(
             "construct_translated_pages_to_cascade_actions",
             self.unpublish_hook):
         for fn in hooks.get_hooks(
                 "construct_translated_pages_to_cascade_actions"):
             response = fn([self.en_homepage], "unpublish")
             self.assertIsNone(response)
Exemplo n.º 6
0
 def test_missing_hook_action(self):
     with hooks.register_temporarily(
             "construct_translated_pages_to_cascade_actions",
             self.missing_hook_action):
         for fn in hooks.get_hooks(
                 "construct_translated_pages_to_cascade_actions"):
             response = fn([self.en_homepage], "")
             if response is not None:
                 self.assertIsInstance(response, dict)
Exemplo n.º 7
0
 def test_construct_translated_pages_to_cascade_actions_when_deleting(self):
     with hooks.register_temporarily(
             "construct_translated_pages_to_cascade_actions",
             self.delete_hook):
         for fn in hooks.get_hooks(
                 "construct_translated_pages_to_cascade_actions"):
             response = fn([self.en_homepage], "delete")
             if response is not None:
                 self.assertIsInstance(response, dict)
                 self.assertEqual(len(response.items()), 1)
Exemplo n.º 8
0
 def test_page_tree_sync_on(self):
     with hooks.register_temporarily(
             "construct_translated_pages_to_cascade_actions",
             self.unpublish_hook):
         for fn in hooks.get_hooks(
                 "construct_translated_pages_to_cascade_actions"):
             response = fn([self.en_homepage], "unpublish")
             if response:
                 self.assertIsInstance(response, dict)
                 self.assertEqual(len(response.items()), 1)
Exemplo n.º 9
0
 def test_double_registered_hook(self):
     # We should have two implementations of `construct_translated_pages_to_cascade_actions`
     # One in simple_translation.wagtail_hooks and the other will be
     # registered as a temporary hook.
     with hooks.register_temporarily(
             "construct_translated_pages_to_cascade_actions",
             self.unpublish_hook):
         defined_hooks = hooks.get_hooks(
             "construct_translated_pages_to_cascade_actions")
         self.assertEqual(len(defined_hooks), 2)
Exemplo n.º 10
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])
Exemplo n.º 11
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/_modern_dropdown.html")

        self.assertContains(response, "Another useless header button")
Exemplo n.º 12
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/"),
            ],
        )
Exemplo n.º 13
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/"),
            ],
        )