コード例 #1
0
    def test_move_node_view_redirects_to_login_if_non_staff_user(self):
        user = factories.UserFactory(is_superuser=False, is_staff=False)
        self.client.force_login(user)

        menu_content = factories.MenuContentFactory()
        child = factories.ChildMenuItemFactory(parent=menu_content.root)
        child_of_child = factories.ChildMenuItemFactory(parent=child)
        move_url = reverse(
            "admin:djangocms_navigation_menuitem_move_node", args=(menu_content.id,)
        )
        data = {
            "node_id": child_of_child.pk,
            "sibling_id": menu_content.root.pk,
            "as_child": 1,
        }

        # For POST
        response = self.client.post(move_url, data=data)
        redirect_url = reverse("admin:login") + "?next=" + move_url
        self.assertRedirects(response, redirect_url)

        # For GET
        response = self.client.get(move_url)
        self.assertRedirects(response, redirect_url)
コード例 #2
0
    def test_menuitem_move_node_cant_move_outside_of_root(self, mocked_messages):
        menu_content = factories.MenuContentWithVersionFactory(version__created_by=self.user)
        child = factories.ChildMenuItemFactory(parent=menu_content.root)
        move_url = reverse(
            "admin:djangocms_navigation_menuitem_move_node", args=(menu_content.id,)
        )
        data = {"node_id": child.pk, "parent_id": 0}

        response = self.client.post(move_url, data=data)

        self.assertEqual(response.status_code, 400)
        self.assertEqual(mocked_messages.call_count, 1)
        self.assertEqual(
            mocked_messages.call_args[0][1],
            "Cannot move a node outside of the root menu node",
        )
コード例 #3
0
    def test_valid_if_adding_left_sibling_of_existing_child_node(self):
        item = factories.ChildMenuItemFactory(parent=self.menu_root)
        data = {
            "title": "My new Title",
            "content_type": self.page_ct.pk,
            "object_id": self.page_content.page.pk,
            "_ref_node_id": item.id,
            "numchild": 1,
            "link_target": "_self",
            "_position": "left",
        }
        form = MenuItemForm(menu_root=self.menu_root, data=data)

        is_valid = form.is_valid()

        self.assertTrue(is_valid)
コード例 #4
0
    def test_menuitem_change_view(self):
        menu_content = factories.MenuContentWithVersionFactory(
            version__state=DRAFT)
        item = factories.ChildMenuItemFactory(parent=menu_content.root)
        change_url = reverse(
            "admin:djangocms_navigation_menuitem_change",
            kwargs={
                "menu_content_id": menu_content.pk,
                "object_id": item.pk
            },
        )
        content_type = ContentType.objects.get(app_label="cms", model="page")
        page = factories.PageContentFactory().page
        data = {
            "title": "My new Title",
            "content_type": content_type.pk,
            "object_id": page.pk,
            "_ref_node_id": menu_content.root.id,
            "numchild": 1,
            "link_target": "_blank",
            "_position": "first-child",
        }

        response = self.client.post(change_url, data)

        # Redirect happened
        redirect_url = reverse("admin:djangocms_navigation_menuitem_list",
                               args=(menu_content.pk, ))
        self.assertRedirects(response, redirect_url)
        # No menu, menu content or menu item objects were added
        self.assertEqual(
            Menu.objects.exclude(pk=menu_content.menu.pk).count(), 0)
        self.assertEqual(
            MenuContent.objects.exclude(pk=menu_content.pk).count(), 0)
        self.assertEqual(
            MenuItem.objects.exclude(
                pk__in=[menu_content.root.pk, item.pk]).count(), 0)
        # Menu object didn't change
        menu = Menu.objects.get()
        self.assertEqual(menu.identifier, menu_content.menu.identifier)
        # Root menu item was changed as per POST data
        item.refresh_from_db()
        self.assertEqual(item.title, "My new Title")
        self.assertEqual(item.content_type, content_type)
        self.assertEqual(item.object_id, page.pk)
        self.assertEqual(item.link_target, "_blank")
        self.assertTrue(item.is_child_of(menu_content.root))
コード例 #5
0
    def test_menuitem_change_view_redirects_if_not_latest_version_get(
        self, mocked_messages
    ):
        menu = factories.MenuFactory()
        version = factories.MenuVersionFactory(content__menu=menu, state=UNPUBLISHED)
        factories.MenuVersionFactory(content__menu=menu, state=PUBLISHED)
        factories.MenuVersionFactory(content__menu=menu, state=DRAFT)
        item = factories.ChildMenuItemFactory(parent=version.content.root)
        change_url = reverse(
            "admin:djangocms_navigation_menuitem_change",
            kwargs={"menu_content_id": version.content.pk, "object_id": item.pk},
        )

        response = self.client.get(change_url)

        # Redirect happened and error message displayed
        self.assertRedirectsToVersionList(response, version.content)
        self.assertDjangoErrorMessage("Version is not a draft", mocked_messages)
コード例 #6
0
    def test_invalid_object_id(self):
        item = factories.ChildMenuItemFactory(parent=self.menu_root)
        data = {
            "title": "My new Title",
            "content_type": self.page_ct.pk,
            "_ref_node_id": item.id,
            "object_id": 99,
            "numchild": 1,
            "link_target": "_self",
            "_position": "first-child",
        }
        form = MenuItemForm(menu_root=self.menu_root, data=data)

        is_valid = form.is_valid()

        self.assertFalse(is_valid)
        self.assertIn("object_id", form.errors)
        self.assertListEqual(form.errors["object_id"], ["Invalid object"])
コード例 #7
0
    def test_menuitem_change_view_does_modify_check_on_version(
            self, mocked_check, mocked_messages):
        mocked_check.side_effect = ConditionFailed(
            "Go look at some cat pictures instead")
        menu_content = factories.MenuContentWithVersionFactory()
        item = factories.ChildMenuItemFactory(parent=menu_content.root)
        change_url = reverse(
            "admin:djangocms_navigation_menuitem_change",
            kwargs={
                "menu_content_id": menu_content.pk,
                "object_id": item.pk
            },
        )

        response = self.client.get(change_url)

        # Redirect happened, error message displayed and check modify used
        self.assertRedirectsToVersionList(response, menu_content.menu)
        self.assertDjangoErrorMessage("Go look at some cat pictures instead",
                                      mocked_messages)
        mocked_check.assert_called_once_with(self.get_superuser())
コード例 #8
0
    def test_child_menu_items_are_copied(self):
        """The implementation of versioning for MenuContent correctly
        copies child MenuItem objects
        """
        original_root = factories.RootMenuItemFactory()
        original_version = factories.MenuVersionFactory(
            content__root=original_root)
        original_child = factories.ChildMenuItemFactory(parent=original_root)

        new_version = original_version.copy(self.user)

        new_root = new_version.content.root
        # If this throws DoesNotExist then the child clearly wasn't duplicated
        new_child = MenuItem.objects.exclude(
            pk__in=[original_root.pk, original_child.pk, new_root.pk]).get()
        # The fields in the child have been copied over correctly
        self.assertEqual(new_child.title, original_child.title)
        self.assertEqual(new_child.content, original_child.content)
        self.assertEqual(new_child.link_target, original_child.link_target)
        # The new child is indeed a child node of the new root
        self.assertTrue(new_child.is_child_of(new_root))