예제 #1
0
    def setUp(self):
        self.root_page = Page.objects.get(id=2)

        self.hello_page = SimplePage(
            title="Hello world!",
            slug="hello-world",
            content="hello",
            live=False,
        )
        self.root_page.add_child(instance=self.hello_page)

        self.about_page = SimplePage(title="About", slug="about", content="hello")
        self.root_page.add_child(instance=self.about_page)

        self.administrator = self.create_superuser(
            username="******",
            email="*****@*****.**",
            password="******",
        )
        self.editor = self.create_user(
            username="******", email="*****@*****.**", password="******"
        )
        sub_editors = Group.objects.create(name="Sub editors")
        sub_editors.permissions.add(
            Permission.objects.get(
                content_type__app_label="wagtailadmin", codename="access_admin"
            )
        )
        self.editor.groups.add(sub_editors)

        for permission_type in ["add", "edit", "publish"]:
            GroupPagePermission.objects.create(
                group=sub_editors, page=self.hello_page, permission_type=permission_type
            )
예제 #2
0
    def setUp(self):
        self.login()

        # Create some pages
        self.homepage = Page.objects.get(id=2)

        self.public_page = self.homepage.add_child(
            instance=SimplePage(
                title="Public page",
                content="hello",
                live=True,
            )
        )

        self.private_page = self.homepage.add_child(
            instance=SimplePage(
                title="Private page",
                content="hello",
                live=True,
            )
        )
        PageViewRestriction.objects.create(
            page=self.private_page, restriction_type="password", password="******"
        )

        self.private_child_page = self.private_page.add_child(
            instance=SimplePage(
                title="Private child page",
                content="hello",
                live=True,
            )
        )
예제 #3
0
    def setUp(self):
        # Find root page
        self.root_page = Page.objects.get(id=2)

        # Add child page
        self.child_page = SimplePage(
            title="Hello world!",
            slug="hello-world",
            content="hello",
        )
        self.root_page.add_child(instance=self.child_page)

        # more child pages to test ordering
        self.old_page = StandardIndex(
            title="Old page",
            slug="old-page",
            latest_revision_created_at=local_datetime(2010, 1, 1),
        )
        self.root_page.add_child(instance=self.old_page)

        self.new_page = SimplePage(
            title="New page",
            slug="new-page",
            content="hello",
            latest_revision_created_at=local_datetime(2016, 1, 1),
        )
        self.root_page.add_child(instance=self.new_page)

        # Login
        self.user = self.login()
예제 #4
0
    def setUp(self):
        # Find root page
        self.root_page = Page.objects.get(id=2)

        # root
        # |- simple_index (SimplePage)
        # |  |- simple_child_1 (SimplePage)
        # |  |- simple_child_2 (SimplePage)
        # |  |- simple_child_3 (SimplePage)

        self.index_page = SimplePage(title="Simple",
                                     slug="simple",
                                     content="hello")
        self.root_page.add_child(instance=self.index_page)

        self.child_1 = SimplePage(title="Child 1 of SimplePage",
                                  slug="child-1",
                                  content="hello")
        self.index_page.add_child(instance=self.child_1)
        self.child_2 = SimplePage(title="Child 2 of SimplePage",
                                  slug="child-2",
                                  content="hello")
        self.index_page.add_child(instance=self.child_2)
        self.child_3 = SimplePage(title="Child 3 of SimplePage",
                                  slug="child-3",
                                  content="hello")
        self.index_page.add_child(instance=self.child_3)

        # Login
        self.user = self.login()
예제 #5
0
    def setUp(self):
        self.user = self.login()
        # Find root page
        self.root_page = Page.objects.get(id=2)

        # Create a page to unpublish
        self.test_page = self.root_page.add_child(instance=SimplePage(
            title="Hello world!",
            slug="hello-world",
            content="hello",
            live=True,
            has_unpublished_changes=False,
        ))

        # Create a couple of child pages
        self.test_child_page = self.test_page.add_child(instance=SimplePage(
            title="Child page",
            slug="child-page",
            content="hello",
            live=True,
            has_unpublished_changes=True,
        ))

        self.test_another_child_page = self.test_page.add_child(
            instance=SimplePage(
                title="Another Child page",
                slug="another-child-page",
                content="hello",
                live=True,
                has_unpublished_changes=True,
            ))
예제 #6
0
    def test_get_workflow_from_closest_ancestor(self):
        # test that using Page.get_workflow() tries to get the workflow from itself, then the closest ancestor, and does
        # not get Workflows from further up the page tree first
        workflow_1 = Workflow.objects.create(name="test_workflow_1")
        workflow_2 = Workflow.objects.create(name="test_workflow_2")
        homepage = Page.objects.get(url_path="/home/")
        WorkflowPage.objects.create(page=homepage, workflow=workflow_1)
        hello_page = SimplePage(title="Hello world",
                                slug="hello-world",
                                content="hello")
        homepage.add_child(instance=hello_page)
        WorkflowPage.objects.create(page=hello_page, workflow=workflow_2)
        goodbye_page = SimplePage(title="Goodbye world",
                                  slug="goodbye-world",
                                  content="goodbye")
        hello_page.add_child(instance=goodbye_page)
        self.assertEqual(hello_page.get_workflow(), workflow_2)
        self.assertEqual(goodbye_page.get_workflow(), workflow_2)

        # Check the .all_pages() method
        self.assertFalse(
            workflow_1.all_pages().filter(id=hello_page.id).exists())
        self.assertFalse(
            workflow_1.all_pages().filter(id=goodbye_page.id).exists())
        self.assertTrue(
            workflow_2.all_pages().filter(id=hello_page.id).exists())
        self.assertTrue(
            workflow_2.all_pages().filter(id=goodbye_page.id).exists())
예제 #7
0
    def setUp(self):
        self.root_page = Page.objects.get(id=2)

        # Add child pages which will have already been published before we
        # bulk publish them.
        self.child_pages = [
            SimplePage(
                title=f"Hello world!-{i}",
                slug=f"hello-world-{i}",
                content=f"Hello world {i}!",
                live=False,
            )
            for i in range(1, 5)
        ]

        self.pages_to_be_published = self.child_pages[:3]
        self.pages_not_to_be_published = self.child_pages[3:]

        for child_page in self.child_pages:
            self.root_page.add_child(instance=child_page)

        for i, child_page in enumerate(self.child_pages):
            child_page.content = f"Hello published world {i}!"
            child_page.save_revision()

        # Add an additional child page which will be bulk published from a
        # draft-only state.
        draft_page = SimplePage(
            title="Hello world!-5",
            slug="hello-world-5",
            content="Hello published world 5!",
            live=False,
        )

        self.root_page.add_child(instance=draft_page)
        self.child_pages.append(draft_page)
        self.pages_to_be_published.append(draft_page)

        self.url = (
            reverse(
                "wagtail_bulk_action",
                args=(
                    "wagtailcore",
                    "page",
                    "publish",
                ),
            )
            + "?"
        )
        for child_page in self.pages_to_be_published:
            self.url += f"id={child_page.id}&"
        self.redirect_url = reverse("wagtailadmin_explore", args=(self.root_page.id,))

        self.user = self.login()
예제 #8
0
    def setUp(self):
        # Find root page
        self.root_page = Page.objects.get(id=2)

        # Add child pages
        self.child_pages = [
            SimplePage(title=f"Hello world!-{i}",
                       slug=f"hello-world-{i}",
                       content=f"hello-{i}") for i in range(1, 5)
        ]
        # first three child pages will be deleted
        self.pages_to_be_deleted = self.child_pages[:3]
        self.pages_not_to_be_deleted = self.child_pages[3:]
        for child_page in self.child_pages:
            self.root_page.add_child(instance=child_page)

        # map of the form { page: [child_pages] } to be added
        self.grandchildren_pages = {
            self.pages_to_be_deleted[0]: [
                SimplePage(title="Hello world!-a",
                           slug="hello-world-a",
                           content="hello-a")
            ],
            self.pages_to_be_deleted[1]: [
                SimplePage(title="Hello world!-b",
                           slug="hello-world-b",
                           content="hello-b"),
                SimplePage(title="Hello world!-c",
                           slug="hello-world-c",
                           content="hello-c"),
            ],
        }

        for child_page, grandchild_pages in self.grandchildren_pages.items():
            for grandchild_page in grandchild_pages:
                child_page.add_child(instance=grandchild_page)

        self.url = (reverse(
            "wagtail_bulk_action",
            args=(
                "wagtailcore",
                "page",
                "delete",
            ),
        ) + "?")
        for child_page in self.pages_to_be_deleted:
            self.url += f"&id={child_page.id}"

        # Login
        self.user = self.login()
예제 #9
0
    def setUp(self):
        self.tree_root = Page.objects.get(id=1)
        self.home_page = Page.objects.get(id=2)

        self.about_page = self.home_page.add_child(
            instance=SimplePage(title="About", content="About Foo"))
        self.contact_page = self.about_page.add_child(
            instance=SimplePage(title="Contact", content="Content Foo"))
        self.people_page = self.about_page.add_child(
            instance=SimplePage(title="People", content="The people of Foo"))

        self.event_index = self.make_event_section("Events")

        self.login()
예제 #10
0
    def test_construct_queryset_hook(self):
        page = SimplePage(title="Test shown", content="hello")
        self.root_page.add_child(instance=page)

        page_not_shown = SimplePage(title="Test not shown", content="hello")
        self.root_page.add_child(instance=page_not_shown)

        def filter_pages(pages, request):
            return pages.filter(id=page.id)

        with self.register_hook("construct_page_chooser_queryset",
                                filter_pages):
            response = self.get({"q": "Test"})
        self.assertEqual(len(response.context["pages"]), 1)
        self.assertEqual(response.context["pages"][0].specific, page)
예제 #11
0
    def test_admin_display_title_breadcrumb(self):
        # Add another child under child_page so we get breadcrumbs
        leaf_page = SimplePage(title="quux", content="goodbye")
        self.child_page.add_child(instance=leaf_page)

        # Use the leaf page as the chooser parent, so child is in the breadcrumbs
        response = self.client.get(
            reverse("wagtailadmin_choose_page_child", args=(leaf_page.id, )))
        self.assertEqual(response.status_code, 200)
        self.assertTemplateUsed(response, "wagtailadmin/chooser/browse.html")

        # Look for a link element in the breadcrumbs with the admin title
        expected = """
            <li class="breadcrumb-item">
                <a href="/admin/choose-page/{page_id}/?" class="breadcrumb-link navigate-pages">{page_title}
                    <svg class="icon icon-arrow-right arrow_right_icon" aria-hidden="true">
                        <use href="#icon-arrow-right"></use>
                    </svg>
                </a>
            </li>
        """.format(
            page_id=self.child_page.id,
            page_title="foobarbaz (simple page)",
        )
        self.assertTagInHTML(expected, response.json().get("html"))
예제 #12
0
    def test_page_copy_alias_post_without_source_publish_permission(self):
        # Check for issue #7293 - If the user has permission to publish at a destination, but not the source.
        # Wagtail would crash on attempt to copy

        # Create a new section
        self.destination_page = self.root_page.add_child(instance=SimplePage(
            title="Destination page",
            slug="destination-page",
            content="hello",
            live=True,
            has_unpublished_changes=False,
        ))

        # Make user a moderator and make it so they can only publish at the destination page
        self.user.is_superuser = False
        self.user.groups.add(Group.objects.get(name="Moderators"))
        self.user.save()
        GroupPagePermission.objects.filter(permission_type="publish").update(
            page=self.destination_page)

        post_data = {
            "new_title": self.test_child_page.title,
            "new_slug": self.test_child_page.slug,
            "new_parent_page": str(self.destination_page.id),
            "copy_subpages": False,
            "publish_copies": False,
            "alias": False,
        }
        response = self.client.post(
            reverse("wagtailadmin_pages:copy", args=[self.test_child_page.id]),
            post_data,
        )

        # We only need to check that it didn't crash
        self.assertEqual(response.status_code, 302)
예제 #13
0
    def test_disable_preview_on_edit(self):
        simple_page = SimplePage(title="simple page", content="hello")
        self.root_page.add_child(instance=simple_page)

        # preview button is available by default
        response = self.client.get(
            reverse("wagtailadmin_pages:edit", args=(simple_page.id,))
        )
        self.assertEqual(response.status_code, 200)

        preview_url = reverse(
            "wagtailadmin_pages:preview_on_edit", args=(simple_page.id,)
        )
        self.assertContains(response, '<li class="preview">')
        self.assertContains(response, 'data-action="%s"' % preview_url)

        stream_page = StreamPage(title="stream page", body=[("text", "hello")])
        self.root_page.add_child(instance=stream_page)

        # StreamPage has preview_modes = []
        response = self.client.get(
            reverse("wagtailadmin_pages:edit", args=(stream_page.id,))
        )
        self.assertEqual(response.status_code, 200)

        preview_url = reverse(
            "wagtailadmin_pages:preview_on_edit", args=(stream_page.id,)
        )
        self.assertNotContains(response, '<li class="preview">')
        self.assertNotContains(response, 'data-action="%s"' % preview_url)
예제 #14
0
    def test_future_go_live_page_will_not_be_published(self):
        page = SimplePage(
            title="Hello world!",
            slug="hello-world",
            content="hello",
            live=False,
            go_live_at=timezone.now() + timedelta(days=1),
        )
        self.root_page.add_child(instance=page)

        page.save_revision(approved_go_live_at=timezone.now() -
                           timedelta(days=1))

        p = Page.objects.get(slug="hello-world")
        self.assertFalse(p.live)
        self.assertTrue(
            PageRevision.objects.filter(page=p).exclude(
                approved_go_live_at__isnull=True).exists())

        management.call_command("publish_scheduled_pages")

        p = Page.objects.get(slug="hello-world")
        self.assertFalse(p.live)
        self.assertTrue(
            PageRevision.objects.filter(page=p).exclude(
                approved_go_live_at__isnull=True).exists())
예제 #15
0
    def setUp(self):
        self.root_page = Page.objects.get(id=1)

        self.home_page = self.root_page.add_child(instance=SimplePage(
            title="Homepage", slug="home2", content="hello"))

        PageLogEntry.objects.all().delete()  # clean up the log entries here.
예제 #16
0
 def make_pages(self):
     for i in range(150):
         self.root_page.add_child(instance=SimplePage(
             title="Page " + str(i),
             slug="page-" + str(i),
             content="hello",
         ))
예제 #17
0
    def setUp(self):
        # Create pages to unpublish
        self.root_page = Page.objects.get(id=2)
        self.child_pages = [
            SimplePage(title=f"Hello world!-{i}",
                       slug=f"hello-world-{i}",
                       content=f"hello-{i}") for i in range(1, 5)
        ]
        # first three child pages will be unpublished
        self.pages_to_be_unpublished = self.child_pages[:3]
        self.pages_not_to_be_unpublished = self.child_pages[3:]
        for child_page in self.child_pages:
            self.root_page.add_child(instance=child_page)

        self.url = (reverse(
            "wagtail_bulk_action",
            args=(
                "wagtailcore",
                "page",
                "unpublish",
            ),
        ) + "?")
        for child_page in self.pages_to_be_unpublished:
            self.url += f"&id={child_page.id}"
        self.redirect_url = reverse("wagtailadmin_explore",
                                    args=(self.root_page.id, ))

        # Login
        self.user = self.login()
예제 #18
0
    def test_disable_preview_on_revisions_list(self):
        simple_page = SimplePage(title="simple page", content="hello")
        self.root_page.add_child(instance=simple_page)
        simple_page.save_revision(log_action=True)

        # check preview shows up by default
        response = self.client.get(
            reverse("wagtailadmin_pages:history", args=(simple_page.id,))
        )
        preview_url = reverse(
            "wagtailadmin_pages:revisions_view",
            args=(simple_page.id, simple_page.get_latest_revision().id),
        )
        self.assertContains(response, "Preview")
        self.assertContains(response, preview_url)

        stream_page = StreamPage(title="stream page", body=[("text", "hello")])
        self.root_page.add_child(instance=stream_page)
        latest_revision = stream_page.save_revision(log_action=True)

        # StreamPage has preview_modes = []
        response = self.client.get(
            reverse("wagtailadmin_pages:history", args=(stream_page.id,))
        )
        preview_url = reverse(
            "wagtailadmin_pages:revisions_view",
            args=(stream_page.id, latest_revision.id),
        )
        self.assertNotContains(response, "Preview")
        self.assertNotContains(response, preview_url)
예제 #19
0
 def create_page(cls):
     homepage = Page.objects.get(url_path="/home/")
     hello_page = SimplePage(title="Hello world",
                             slug="hello-world",
                             content="hello")
     homepage.add_child(instance=hello_page)
     return hello_page
예제 #20
0
    def setUp(self):
        # Create a submitter
        submitter = self.create_user(
            username="******",
            email="*****@*****.**",
            password="******",
        )

        # Find root page
        self.root_page = Page.objects.get(id=2)

        # Create a page
        self.page = SimplePage(
            title="Wagtail, the powerful CMS for modern websites",
            slug="wagtail",
            content="Fast, elegant, open source",
        )

        self.root_page.add_child(instance=self.page)

        # Submit it for moderation
        self.page.save_revision(user=submitter, submitted_for_moderation=True)

        # Create a revision
        self.revision = self.page.get_latest_revision()

        self.edit_page_url = reverse("wagtailadmin_pages:edit",
                                     args=(self.revision.page.id, ))
        self.preview_page_url = reverse(
            "wagtailadmin_pages:preview_for_moderation",
            args=(self.revision.id, ))
예제 #21
0
    def test_search_searchable_fields(self):
        # Find root page
        root_page = Page.objects.get(id=2)

        # Create a page
        root_page.add_child(instance=SimplePage(
            title="Hi there!",
            slug="hello-world",
            content="good morning",
            live=True,
            has_unpublished_changes=False,
        ))

        # Confirm the slug is not being searched
        response = self.get({"q": "hello"})
        self.assertNotContains(response, "There is one matching page")
        search_fields = Page.search_fields

        # Add slug to the search_fields
        Page.search_fields = Page.search_fields + [
            SearchField("slug", partial_match=True)
        ]

        # Confirm the slug is being searched
        response = self.get({"q": "hello"})
        self.assertContains(response, "There is one matching page")

        # Reset the search fields
        Page.search_fields = search_fields
예제 #22
0
    def test_expired_page_will_be_unpublished(self):
        # Connect a mock signal handler to page_unpublished signal
        signal_fired = [False]
        signal_page = [None]

        def page_unpublished_handler(sender, instance, **kwargs):
            signal_fired[0] = True
            signal_page[0] = instance

        page_unpublished.connect(page_unpublished_handler)

        page = SimplePage(
            title="Hello world!",
            slug="hello-world",
            content="hello",
            live=True,
            has_unpublished_changes=False,
            expire_at=timezone.now() - timedelta(days=1),
        )
        self.root_page.add_child(instance=page)

        p = Page.objects.get(slug="hello-world")
        self.assertTrue(p.live)

        management.call_command("publish_scheduled_pages")

        p = Page.objects.get(slug="hello-world")
        self.assertFalse(p.live)
        self.assertTrue(p.has_unpublished_changes)
        self.assertTrue(p.expired)

        # Check that the page_published signal was fired
        self.assertTrue(signal_fired[0])
        self.assertEqual(signal_page[0], page)
        self.assertEqual(signal_page[0], signal_page[0].specific)
예제 #23
0
 def test_confirm_delete_scenario_2(self):
     # If the number of pages to be deleted are greater than or equal to
     # WAGTAILADMIN_UNSAFE_PAGE_DELETION_LIMIT then show input box
     # to input wagtail_site_name.
     child_1 = SimplePage(title="child 1", slug="child-1", content="hello")
     self.child_page.add_child(instance=child_1)
     child_2 = SimplePage(title="child 2", slug="child-2", content="hello")
     self.child_page.add_child(instance=child_2)
     response = self.client.get(
         reverse("wagtailadmin_pages:delete", args=(self.child_page.id,))
     )
     self.assertEqual(response.status_code, 200)
     self.assertContains(response, "This action will delete total <b>3</b> pages.")
     self.assertContains(response, "Please type <b>mysite</b> to confirm.")
     self.assertContains(response, '<input type="text" name="confirm_site_name"')
     # deletion should not actually happen on GET
     self.assertTrue(SimplePage.objects.filter(id=self.child_page.id).exists())
예제 #24
0
    def setUp(self):
        self.root_page = Page.objects.get(id=2)

        # Add child page
        self.child_page = SimplePage(title="foobarbaz", content="hello")
        self.root_page.add_child(instance=self.child_page)

        self.login()
예제 #25
0
    def test_page_reorder(self):
        section_1 = self.root_page.add_child(instance=SimplePage(
            title="Child 1", slug="child-1", content="hello"))
        self.root_page.add_child(instance=SimplePage(
            title="Child 2", slug="child-2", content="hello"))

        user = get_user_model().objects.first()

        # Reorder section 1 to be the last page under root_page.
        # This should log as `wagtail.reorder` because the page was moved under the same parent page
        section_1.move(self.root_page, user=user, pos="last-child")

        self.assertEqual(
            PageLogEntry.objects.filter(action="wagtail.reorder",
                                        user=user).count(), 1)
        self.assertEqual(
            PageLogEntry.objects.filter(action="wagtail.move",
                                        user=user).count(), 0)
예제 #26
0
    def setUp(self):
        self.login()

        self.root_page = Page.objects.get(id=2)
        self.child_page = self.root_page.add_child(instance=SimplePage(
            title="Public page",
            content="hello",
            live=True,
        ))
예제 #27
0
 def setup_pagination_test_data(self):
     # Create lots of pages
     for i in range(100):
         new_page = SimplePage(
             title="foobarbaz",
             slug="foobarbaz-%d" % i,
             content="hello",
         )
         self.root_page.add_child(instance=new_page)
예제 #28
0
 def test_assert_can_create_subpage_rules(self):
     simple_page = SimplePage(title="Simple Page",
                              slug="simple",
                              content="hello")
     self.root.add_child(instance=simple_page)
     # This should raise an error, as a BusinessChild can not be created under a SimplePage
     with self.assertRaisesRegex(
             AssertionError,
             r"Can not create a tests.businesschild under a tests.simplepage",
     ):
         self.assertCanCreate(simple_page, BusinessChild, {})
예제 #29
0
    def setUpClass(cls):
        super().setUpClass()

        cls.test_page = SimplePage(title="test", slug="test", content="test")
        cls.wagtail_root = Page.get_first_root_node()
        cls.wagtail_root.add_child(instance=cls.test_page)

        cls.test_page_group = Group.objects.create(name="Test page")
        GroupPagePermission.objects.create(
            group=cls.test_page_group, page=cls.test_page, permission_type="edit"
        )
예제 #30
0
    def setUp(self):
        self.root_page = Page.objects.get(id=2)
        self.user = self.login()

        # SimplePage only has one preview mode
        self.single = SimplePage(title="Single preview mode", content="foo")
        # MultiPreviewModesPage has two preview modes
        self.multiple = MultiPreviewModesPage(title="Multiple preview modes")

        self.root_page.add_child(instance=self.single)
        self.root_page.add_child(instance=self.multiple)