Beispiel #1
0
    def test_change_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()
        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",
        }

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

        # For GET
        response = self.client.get(change_url)
        self.assertRedirects(response, redirect_url)
Beispiel #2
0
    def test_menuitem_add_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()
        add_url = reverse(
            "admin:djangocms_navigation_menuitem_add", args=(menu_content.id,)
        )
        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(add_url, data)

        # Redirect happened, error message displayed and check modify used
        self.assertRedirectsToVersionList(response, menu_content)
        self.assertDjangoErrorMessage(
            "Go look at some cat pictures instead", mocked_messages
        )
        mocked_check.assert_called_once_with(self.get_superuser())
Beispiel #3
0
    def test_menuitem_add_view_redirects_on_save_add_another(self):
        """
        When a MenuIem object is created we check that the correct url is generated and redirected
        for the save and add another option and a message is shown to the user.
        """
        menu_content = factories.MenuContentWithVersionFactory()
        add_url = reverse(
            "admin:djangocms_navigation_menuitem_add", args=(menu_content.id,)
        )
        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",
            '_addanother': ['Save and add another'],
        }
        response = self.client.post(add_url, data, follow=True)
        new_child = MenuItem.objects.exclude(pk=menu_content.root.pk).get()
        msg = _('Menuitem %(menuitem)s was changed successfully.') % {'menuitem': new_child.id}

        self.assertContains(response, msg)

        response = self.client.post(add_url, data)
        self.assertEqual(
            response.url,
            reverse(
                "admin:djangocms_navigation_menuitem_add", args=(menu_content.id,)
            )
        )
Beispiel #4
0
    def test_menuitem_add_view_redirects_if_not_latest_version_post(
        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)
        add_url = reverse(
            "admin:djangocms_navigation_menuitem_add", args=(version.content.id,)
        )
        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": version.content.root.id,
            "numchild": 1,
            "link_target": "_blank",
            "_position": "first-child",
        }

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

        # Redirect happened and error message displayed
        self.assertRedirectsToVersionList(response, version.content)
        self.assertDjangoErrorMessage("Version is not a draft", mocked_messages)
        # Menu item object was not added
        self.assertEqual(MenuItem.objects.filter(title="My new Title").count(), 0)
Beispiel #5
0
    def test_menuitem_add_view(self):
        menu_content = factories.MenuContentWithVersionFactory()
        add_url = reverse(
            "admin:djangocms_navigation_menuitem_add", args=(menu_content.id,)
        )
        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(add_url, data)

        self.assertRedirects(
            response,
            reverse(
                "admin:djangocms_navigation_menuitem_list", args=(menu_content.id,)
            ),
        )
        # No menu or menu content 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)
        # A child menu item object was added
        new_child = MenuItem.objects.exclude(pk=menu_content.root.pk).get()
        self.assertEqual(new_child.title, "My new Title")
        self.assertEqual(new_child.content_type, content_type)
        self.assertEqual(new_child.object_id, page.pk)
        self.assertEqual(new_child.link_target, "_blank")
        self.assertTrue(new_child.is_child_of(menu_content.root))
Beispiel #6
0
    def test_menuitem_add_view_smoketest_for_versioning_disabled(self):
        menu_content = factories.MenuContentFactory()
        add_url = reverse(
            "admin:djangocms_navigation_menuitem_add", args=(menu_content.id,)
        )
        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(add_url, data)

        self.assertRedirects(
            response,
            reverse(
                "admin:djangocms_navigation_menuitem_list", args=(menu_content.id,)
            ),
        )
Beispiel #7
0
    def test_add_view_redirects_to_login_if_anonymous_user(self):
        menu_content = factories.MenuContentFactory()
        add_url = reverse(
            "admin:djangocms_navigation_menuitem_add", args=(menu_content.id,)
        )
        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",
        }

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

        # For GET
        response = self.client.get(add_url)
        self.assertRedirects(response, redirect_url)
    def test_navigation_menu_not_added_to_admin_menu_if_user_doesnt_have_permissions(
            self):
        user = factories.UserFactory()
        page_content = factories.PageContentFactory()
        toolbar = self._get_toolbar(page_content, preview_mode=True, user=user)
        toolbar.populate()
        toolbar.post_template_populate()
        cms_toolbar = toolbar.toolbar
        navigation_menu_item = self._find_menu_item("Navigation...",
                                                    cms_toolbar)

        self.assertIsNone(navigation_menu_item)
    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))
    def test_navigation_menu_added_to_admin_menu(self):
        user = factories.UserFactory()
        user.user_permissions.add(
            Permission.objects.get(
                content_type__app_label="djangocms_navigation",
                codename="change_menucontent",
            ))
        page_content = factories.PageContentFactory()
        toolbar = self._get_toolbar(page_content, preview_mode=True, user=user)
        toolbar.populate()
        toolbar.post_template_populate()
        cms_toolbar = toolbar.toolbar
        navigation_menu_item = self._find_menu_item("Navigation...",
                                                    cms_toolbar)
        url = reverse("admin:djangocms_navigation_menucontent_changelist")

        self.assertIsNotNone(navigation_menu_item)
        self.assertIsInstance(navigation_menu_item, SideframeItem)
        self.assertEqual(navigation_menu_item.url, url)
Beispiel #11
0
 def test_menuitem_changelist_should_have_get_url_column(self):
     menu = factories.MenuFactory()
     version = factories.MenuVersionFactory(content__menu=menu, state=PUBLISHED)
     mock_request = RequestFactory()
     ma = MenuItemAdmin(MenuItem, admin.AdminSite())
     add_url = reverse(
         "admin:djangocms_navigation_menuitem_add", args=(version.content.id,)
     )
     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": version.content.root.id,
         "numchild": 1,
         "link_target": "_blank",
         "_position": "first-child",
     }
     self.client.post(add_url, data)
     self.assertEqual(len(ma.get_list_display(mock_request)), 4)
     self.assertIn("get_object_url", ma.get_list_display(mock_request))
 def setUp(self):
     self.menu_root = factories.RootMenuItemFactory()
     self.page_content = factories.PageContentFactory()
     self.page_ct = ContentType.objects.get_for_model(Page)