예제 #1
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)
예제 #2
0
    def test_menuitem_move_node_permission_denied_if_not_latest_version(
        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)
        child = factories.ChildMenuItemFactory(parent=version.content.root)
        child_of_child = factories.ChildMenuItemFactory(parent=child)
        move_url = reverse(
            "admin:djangocms_navigation_menuitem_move_node", args=(version.content.id,)
        )
        data = {
            "node_id": child_of_child.pk,
            "sibling_id": version.content.root.pk,
            "as_child": 1,
        }

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

        # 400 error with error msg and node has not been moved
        self.assertEqual(response.status_code, 400)
        self.assertEqual(b"Version is not a draft", response.content)
        child.refresh_from_db()
        child_of_child.refresh_from_db()
        self.assertFalse(child_of_child.is_sibling_of(child))
예제 #3
0
    def test_list_display_without_version_locking(self):
        request = self.get_request("/")
        request.user = self.get_superuser()
        nav_admin.using_version_lock = False
        site_2 = Site.objects.create(domain="site_2.com", name="site_2")
        menu_1 = factories.MenuFactory(site=site_2)
        site_2_menu_version = factories.MenuVersionFactory(content__menu=menu_1, state=PUBLISHED)

        menu_content_admin = nav_admin.MenuContentAdmin(MenuContent, admin.AdminSite())
        func = menu_content_admin._list_actions(request)
        list_display_icons = func(site_2_menu_version.content)
        list_display = menu_content_admin.get_list_display(request)
        list_display[-1] = list_display_icons

        self.assertEqual(len(list_display), 5)
        self.assertEqual(
            list_display[0:4],
            ["title", "get_author", "get_modified_date", "get_versioning_state"]
        )
        self.assertIn("cms-versioning-action-btn", list_display[-1])
        # The preview button is present
        self.assertIn("cms-versioning-action-preview", list_display[-1])
        # The edit button is present
        self.assertIn("cms-versioning-action-edit", list_display[-1])
        self.assertIn("cms-form-get-method", list_display[-1])
        self.assertIn("js-versioning-action", list_display[-1])
        self.assertIn("js-versioning-admin-keep-sideframe", list_display[-1])
예제 #4
0
    def test_menuitem_change_view_redirects_if_not_latest_version_post(
        self, mocked_messages
    ):
        menu = factories.MenuFactory()
        version = factories.MenuVersionFactory(content__menu=menu, content__language="en", state=UNPUBLISHED)
        factories.MenuVersionFactory(content__menu=menu, content__language="en", state=PUBLISHED)
        factories.MenuVersionFactory(content__menu=menu, content__language="en", 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},
        )
        content_type = ContentType.objects.get(app_label="cms", model="page")
        data = {
            "title": "My new Title",
            "content_type": content_type.pk,
            "object_id": item.content.pk,
            "_ref_node_id": version.content.root.id,
            "numchild": 1,
            "link_target": "_blank",
            "_position": "first-child",
        }

        response = self.client.post(change_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 changed
        item.refresh_from_db()
        self.assertNotEqual(item.title, "My new Title")
예제 #5
0
    def test_edit_link_not_shown(self):
        menu = factories.MenuFactory()
        version = factories.MenuVersionFactory(content__menu=menu, state=UNPUBLISHED)
        func = self.modeladmin._list_actions(self.get_request("/"))

        response = func(version.content)

        self.assertNotIn("cms-versioning-action-edit ", response)
예제 #6
0
    def test_menucontent_change_view_limited_to_site(self):
        """
        The admin change list is limited to show only the menus for the current site.
        No other menus should be shown that belong to other sites.
        """
        site_2 = Site.objects.create(domain="site_2.com", name="site_2")
        site_3 = Site.objects.create(domain="site_3.com", name="site_3")
        menu_1 = factories.MenuFactory(site=site_2)
        menu_2 = factories.MenuFactory(site=site_3)
        site_2_menu_version = factories.MenuVersionFactory(
            content__menu=menu_1, state=PUBLISHED)
        site_3_menu_version = factories.MenuVersionFactory(
            content__menu=menu_2, state=PUBLISHED)
        menu_content_admin = self.admin_site._registry[MenuContent]

        # Site 1 has no menus and should be empty
        with self.settings(SITE_ID=1):
            request = RequestFactory().get(
                "/admin/djangocms_navigation/menucontent/")
            site1_query_result = menu_content_admin.get_queryset(request)

            self.assertEqual(site1_query_result.count(), 0)

        # Site 2 has a menu and should it should only be the one created for that site
        with self.settings(SITE_ID=site_2.pk):
            request = RequestFactory().get(
                "/admin/djangocms_navigation/menucontent/")
            request.site = site_2
            site2_query_result = menu_content_admin.get_queryset(request)

            self.assertEqual(site2_query_result.count(), 1)
            self.assertEqual(site2_query_result.first(),
                             site_2_menu_version.content)

        # Site 3 has a menu and should it should only be the one created for that site
        with self.settings(SITE_ID=site_3.pk):
            request = RequestFactory().get(
                "/admin/djangocms_navigation/menucontent/")
            request.site = site_3
            site3_query_result = menu_content_admin.get_queryset(request)

            self.assertEqual(site3_query_result.count(), 1)
            self.assertEqual(site3_query_result.first(),
                             site_3_menu_version.content)
예제 #7
0
    def test_edit_link_inactive(self):
        menu = factories.MenuFactory()
        version = factories.MenuVersionFactory(content__menu=menu, state=DRAFT)
        request = self.get_request("/")

        func = self.modeladmin._list_actions(request)
        edit_endpoint = reverse("admin:djangocms_versioning_menucontentversion_edit_redirect", args=(version.pk,),)
        response = func(version.content)

        self.assertIn("inactive", response)
        self.assertIn('title="Edit"', response)
        self.assertNotIn(edit_endpoint, response)
예제 #8
0
    def test_preview_link(self):
        menu = factories.MenuFactory()
        version = factories.MenuVersionFactory(content__menu=menu, state=UNPUBLISHED)
        factories.MenuVersionFactory(content__menu=menu, state=PUBLISHED)
        menu_content = version.content

        preview_endpoint = reverse("admin:djangocms_navigation_menuitem_preview", args=(version.pk,),)
        func = self.modeladmin._list_actions(self.get_request("/admin"))
        response = func(menu_content)

        self.assertIn("cms-versioning-action-preview", response)
        self.assertIn('title="Preview"', response)
        self.assertIn(preview_endpoint, response)
예제 #9
0
    def test_menuitem_changelist_redirects_if_not_latest_version(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)
        list_url = reverse(
            "admin:djangocms_navigation_menuitem_list", args=(version.content.id,)
        )

        response = self.client.get(list_url)

        # Redirect happened and error message displayed
        self.assertRedirectsToVersionList(response, version.content)
        self.assertDjangoErrorMessage("Version is not a draft", mocked_messages)
예제 #10
0
    def test_edit_link(self):
        menu = factories.MenuFactory()
        request = self.get_request("/")
        request.user = self.get_superuser()
        version = factories.MenuVersionFactory(content__menu=menu, state=DRAFT, created_by=request.user)
        menu_content = version.content

        func = self.modeladmin._list_actions(request)
        edit_endpoint = reverse("admin:djangocms_versioning_menucontentversion_edit_redirect", args=(version.pk,),)
        response = func(menu_content)

        self.assertIn("cms-versioning-action-btn", response)
        self.assertIn('title="Edit"', response)
        self.assertIn(edit_endpoint, response)
예제 #11
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)
예제 #12
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))
예제 #13
0
 def test_str(self):
     menu = factories.MenuFactory(identifier='page-about-cats')
     self.assertEqual(str(menu), 'page-about-cats')