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)
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))
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])
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")
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)
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)
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)
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)
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)
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)
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)
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 test_str(self): menu = factories.MenuFactory(identifier='page-about-cats') self.assertEqual(str(menu), 'page-about-cats')