def create_fixtures(self): """ Tree from fixture: + P1 | + P2 | + P3 + P4 | + P5 + P6 + P7 (not in menu) + P8 """ defaults = { 'template': 'nav_playground.html', 'language': 'en', } with self.settings(CMS_PERMISSION=False): p1 = create_page('P1', published=True, in_navigation=True, **defaults) Page.set_homepage(p1) p4 = create_page('P4', published=True, in_navigation=True, **defaults) p6 = create_page('P6', published=True, in_navigation=True, **defaults) p2 = create_page('P2', published=True, in_navigation=True, parent=p1, **defaults) create_page('P3', published=True, in_navigation=True, parent=p2, **defaults) create_page('P5', published=True, in_navigation=True, parent=p4, **defaults) create_page('P7', published=True, in_navigation=False, parent=p6, **defaults) create_page('P8', published=True, in_navigation=True, parent=p6, **defaults)
def _setup_pages(self): """ Tree Structure |- Page_1 | |- Page_2 | |- Page_3 | |- Page_4 (false positive) | |- Page_5 | | |- Page_6 (group 6 page access) """ stdkwargs = { 'template': 'nav_playground.html', 'language': 'en', 'published': True, 'in_navigation': True, } homepage = create_page("page_1", **stdkwargs) Page.set_homepage(homepage) page_2 = create_page("page_2", parent=homepage, **stdkwargs) page_3 = create_page("page_3", parent=page_2, **stdkwargs) page_4 = create_page("page_4", parent=page_3, **stdkwargs) page_5 = create_page("page_5", parent=homepage, **stdkwargs) page_6 = create_page("page_6", parent=page_5, **stdkwargs) return [homepage, page_2, page_3, page_4, page_5, page_6, ]
def test_url_redirect(self): overrides = dict( USE_I18N=True, CMS_LANGUAGES={1: []}, LANGUAGES=[('en-us', 'English')], ) overrides['MIDDLEWARE' if getattr(settings, 'MIDDLEWARE', None) else 'MIDDLEWARE_CLASSES'] = [ 'django.contrib.sessions.middleware.SessionMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.middleware.locale.LocaleMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.cache.FetchFromCacheMiddleware', 'cms.middleware.user.CurrentUserMiddleware', 'cms.middleware.page.CurrentPageMiddleware', 'cms.middleware.toolbar.ToolbarMiddleware', ] with self.settings(**overrides): homepage = create_page( "home", template="col_two.html", language="en-us", published=True, redirect='/foobar/', ) Page.set_homepage(homepage) response = self.client.get('/', follow=False) self.assertTrue(response['Location'].endswith("/foobar/"))
def create_fixtures(self): """ top root aaa 111 ccc ddd 222 bbb 333 444 # all in nav, published and NOT softroot """ defaults = { 'template': 'nav_playground.html', 'language': 'en', 'in_navigation': True, 'published': True, } with self.settings(CMS_PERMISSION=False): top = create_page('top', **defaults) Page.set_homepage(top) root = create_page('root', parent=top, **defaults) aaa = create_page('aaa', parent=root, **defaults) _111 = create_page('111', parent=aaa, **defaults) ccc = create_page('ccc', parent=_111, **defaults) create_page('ddd', parent=ccc, **defaults) create_page('222', parent=aaa, **defaults) bbb = create_page('bbb', parent=root, **defaults) create_page('333', parent=bbb, **defaults) create_page('444', parent=bbb, **defaults)
def test_language_fallback(self): """ Test language fallbacks in details view """ from cms.views import details p1 = create_page("page", "nav_playground.html", "en", published=True) Page.set_homepage(p1) request = self.get_request('/de/', 'de') response = details(request, p1.get_path()) self.assertEqual(response.status_code, 302) self.assertEqual(response['Location'], '/en/') lang_settings = copy.deepcopy(get_cms_setting('LANGUAGES')) lang_settings[1][0]['fallbacks'] = [] lang_settings[1][1]['fallbacks'] = [] with self.settings(CMS_LANGUAGES=lang_settings): response = self.client.get("/de/") self.assertEqual(response.status_code, 404) lang_settings = copy.deepcopy(get_cms_setting('LANGUAGES')) lang_settings[1][0]['redirect_on_fallback'] = False lang_settings[1][1]['redirect_on_fallback'] = False with self.settings(CMS_LANGUAGES=lang_settings): response = self.client.get("/de/") self.assertEqual(response.status_code, 302)
def test_toolbar_switch_urls(self): user = self.get_superuser() user_settings = UserSettings(language="en", user=user) placeholder = Placeholder(slot="clipboard") placeholder.save() user_settings.clipboard = placeholder user_settings.save() page = create_page("page", "nav_playground.html", "en", published=True) create_title("fr", "french home", page) publish_page(page, user, "fr") Page.set_homepage(page) edit_on = get_cms_setting('CMS_TOOLBAR_URL__EDIT_ON') edit_off = get_cms_setting('CMS_TOOLBAR_URL__EDIT_OFF') with self.login_user_context(user): response = self.client.get("/fr/?{}".format(edit_on)) expected = """ <a href="?structure" class="cms-btn cms-btn-disabled" title="Toggle structure" data-cms-structure-btn='{ "url": "/fr/?structure", "name": "Structure" }' data-cms-content-btn='{ "url": "/fr/?edit", "name": "Content" }'> <span class="cms-icon cms-icon-plugins"></span></a> """ self.assertContains( response, expected, count=1, html=True, ) self.assertContains( response, '<a class="cms-btn cms-btn-switch-save" href="/fr/?preview&{}">' '<span>View published</span></a>'.format(edit_off), count=1, html=True, ) response = self.client.get("/fr/?preview&{}".format(edit_off)) self.assertContains( response, expected, count=1, html=True, ) self.assertContains( response, '<a class="cms-btn cms-btn-action cms-btn-switch-edit" href="/fr/?{}">Edit</a>'.format(edit_on), count=1, html=True, )
def test_frontend_lang(self): lang_settings = copy.deepcopy(get_cms_setting('LANGUAGES')) lang_settings[1][0]['public'] = False with self.settings(CMS_LANGUAGES=lang_settings, LANGUAGE_CODE="en"): page = create_page("page1", "nav_playground.html", "en") create_title("de", page.get_title(), page, slug=page.get_slug()) page2 = create_page("page2", "nav_playground.html", "en") create_title("de", page2.get_title(), page2, slug=page2.get_slug()) page3 = create_page("page2", "nav_playground.html", "en") create_title("de", page3.get_title(), page3, slug=page3.get_slug()) page4 = create_page("page4", "nav_playground.html", "de") page.publish('en') page.publish('de') page2.publish('en') page2.publish('de') page3.publish('de') page3.publish('en') page4.publish('de') Page.set_homepage(page) response = self.client.get("/en/") self.assertRedirects(response, "/de/") response = self.client.get("/en/page2/") self.assertEqual(response.status_code, 404) response = self.client.get("/de/") self.assertEqual(response.status_code, 200) response = self.client.get("/de/page2/") self.assertEqual(response.status_code, 200) # check if the admin can see non-public langs admin = self.get_superuser() if self.client.login( username=getattr(admin, get_user_model().USERNAME_FIELD), password=getattr(admin, get_user_model().USERNAME_FIELD)): response = self.client.get("/en/page2/") self.assertEqual(response.status_code, 200) response = self.client.get("/en/page4/") self.assertEqual(response.status_code, 302) self.client.logout() response = self.client.get("/en/page4/") self.assertEqual(response.status_code, 404)
def _setup_tree_pages(self): stdkwargs = { 'template': 'nav_playground.html', 'language': 'en', 'published': True, 'in_navigation': True, } homepage = create_page("page_a", **stdkwargs) Page.set_homepage(homepage) page_b = create_page("page_b", **stdkwargs) page_c = create_page("page_c", **stdkwargs) page_d = create_page("page_d", **stdkwargs) page_b_a = create_page("page_b_a", parent=page_b, **stdkwargs) page_b_b = create_page("page_b_b", parent=page_b, **stdkwargs) page_b_b_a = create_page("page_b_b_a", parent=page_b_b, **stdkwargs) page_b_b_b = create_page("page_b_b_b", parent=page_b_b, **stdkwargs) page_b_b_c = create_page("page_b_b_c", parent=page_b_b, **stdkwargs) page_b_b_a_a = create_page("page_b_b_a_a", parent=page_b_b_a, **stdkwargs) page_b_c = create_page("page_b_c", parent=page_b, **stdkwargs) page_b_d = create_page("page_b_d", parent=page_b, **stdkwargs) page_b_d_a = create_page("page_b_d_a", parent=page_b_d, **stdkwargs) page_b_d_b = create_page("page_b_d_b", parent=page_b_d, **stdkwargs) page_b_d_c = create_page("page_b_d_c", parent=page_b_d, **stdkwargs) page_c_a = create_page("page_c_a", parent=page_c, **stdkwargs) page_c_b = create_page("page_c_b", parent=page_c, **stdkwargs) page_d_a = create_page("page_d_a", parent=page_d, **stdkwargs) page_d_b = create_page("page_d_b", parent=page_d, **stdkwargs) page_d_c = create_page("page_d_c", parent=page_d, **stdkwargs) page_d_d = create_page("page_d_d", parent=page_d, **stdkwargs) pages = [ homepage, page_b, page_b_a, page_b_b, page_b_b_a, page_b_b_a_a, page_b_b_b, page_b_b_c, page_b_c, page_b_d, page_b_d_a, page_b_d_b, page_b_d_c, page_c, page_c_a, page_c_b, page_d, page_d_a, page_d_b, page_d_c, page_d_d, ] new_pages = [] for page in pages: new_pages.append(page.reload()) return new_pages
def create_homepage(self, *args, **kwargs): homepage = create_page(*args, **kwargs) Page.set_homepage(homepage) return homepage.reload()
def save(self, **kwargs): from cms.api import create_page, add_plugin # Check to see if this user has permissions to make this page. We've # already checked this when producing a list of wizard entries, but this # is to prevent people from possible form-hacking. if 'sub_page' in self.cleaned_data: sub_page = self.cleaned_data['sub_page'] else: sub_page = False if self.page and sub_page: # User is adding a page which will be a direct # child of the current page. position = 'last-child' parent = self.page has_perm = user_can_add_subpage(self.user, target=parent) elif self.page and self.page.parent_id: # User is adding a page which will be a right # sibling to the current page. position = 'last-child' parent = self.page.parent has_perm = user_can_add_subpage(self.user, target=parent) else: parent = None position = 'last-child' has_perm = user_can_add_page(self.user) if not has_perm: raise NoPermissionsException( _(u"User does not have permission to add page.")) page = create_page( title=self.cleaned_data['title'], slug=self.cleaned_data['slug'], template=get_cms_setting('PAGE_WIZARD_DEFAULT_TEMPLATE'), language=self.language_code, created_by=smart_text(self.user), parent=parent, position=position, in_navigation=True, published=False ) page_type = self.cleaned_data.get("page_type") if page_type: copy_target = Page.objects.filter(pk=page_type).first() else: copy_target = None if copy_target: # If the user selected a page type, copy that. if not copy_target.has_view_permission(self.user): raise PermissionDenied() # Copy page attributes copy_target._copy_attributes(page, clean=True) page.save() # Copy contents (for each language) for lang in copy_target.get_languages(): copy_target._copy_contents(page, lang) # Copy extensions from cms.extensions import extension_pool extension_pool.copy_extensions(copy_target, page) else: # If the user provided content, then use that instead. content = self.cleaned_data.get('content') plugin_type = get_cms_setting('PAGE_WIZARD_CONTENT_PLUGIN') plugin_body = get_cms_setting('PAGE_WIZARD_CONTENT_PLUGIN_BODY') slot = get_cms_setting('PAGE_WIZARD_CONTENT_PLACEHOLDER') if plugin_type in plugin_pool.plugins and plugin_body: if content and permissions.has_plugin_permission( self.user, plugin_type, "add"): placeholder = self.get_placeholder(page, slot=slot) if placeholder: opts = { 'placeholder': placeholder, 'plugin_type': plugin_type, 'language': self.language_code, plugin_body: content, } add_plugin(**opts) # is it the first page? publish it right away if not self.page and Page.objects.filter(site_id=page.site_id).count() == 1: page.publish(self.language_code) Page.set_homepage(page, user=self.user) return page