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)
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())
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,) ) )
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_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))
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,) ), )
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)
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)