def test_04_redirect(self): redirect_one = 'https://www.django-cms.org/' redirect_two = '/' redirect_three = '/en/' # test external redirect one = create_page("one", "nav_playground.html", "en", published=True, redirect=redirect_one) url = one.get_absolute_url() request = self.get_request(url) response = details(request, url.strip('/')) self.assertEqual(response.status_code, 302) self.assertEqual(response['Location'], redirect_one) # test internal language neutral redirect two = create_page("two", "nav_playground.html", "en", parent=one, published=True, redirect=redirect_two) url = two.get_absolute_url() request = self.get_request(url) response = details(request, url.strip('/')) self.assertEqual(response.status_code, 302) self.assertEqual(response['Location'], '/en/') # test internal forced language redirect three = create_page("three", "nav_playground.html", "en", parent=one, published=True, redirect=redirect_three) url = three.get_absolute_url() request = self.get_request(url) response = details(request, url.strip('/')) self.assertEqual(response.status_code, 302) self.assertEqual(response['Location'], redirect_three)
def test_login_required(self): create_page("page", "nav_playground.html", "en", published=True, login_required=True) request = self.get_request("/") response = details(request, "") self.assertEqual(response.status_code, 302) self.assertEqual(response["Location"], "%s?next=/en/" % settings.LOGIN_URL) with SettingsOverride(i18n_installed=False): request = self.get_request("/") response = details(request, "") self.assertEqual(response.status_code, 302) self.assertEqual(response["Location"], "%s?next=/" % settings.LOGIN_URL)
def test_login_required(self): create_page("page", "nav_playground.html", "en", published=True, login_required=True) request = self.get_request('/en/') response = details(request, '') self.assertEqual(response.status_code, 302) self.assertEqual(response['Location'], '%s?next=/en/' % settings.LOGIN_URL) with SettingsOverride(USE_I18N=False): request = self.get_request('/') response = details(request, '') self.assertEqual(response.status_code, 302) self.assertEqual(response['Location'], '%s?next=/' % settings.LOGIN_URL)
def test_05_login_required(self): self.create_page( published=True, language='en', login_required=True, ) request = self.get_request('/') response = details(request, '') self.assertEqual(response.status_code, 302) self.assertEqual(response['Location'], '%s?next=/en/' % settings.LOGIN_URL) with SettingsOverride(i18n_installed=False): request = self.get_request('/') response = details(request, '') self.assertEqual(response.status_code, 302) self.assertEqual(response['Location'], '%s?next=/' % settings.LOGIN_URL)
def test_add_plugin(self): from cms.api import add_plugin page_1, page_2 = self.get_pages() data = { 'filename': 'test.py', 'body': self.example_text, 'theme': 'dark' } placeholder = page_1.placeholders.get(slot='content') add_plugin(placeholder, 'HighlightPlugin', 'en', **data) page_1.publish('en') # Get published page public = page_1.get_public_object() # plugin is the plugin instance we're going to render plugin = public.placeholders.get(slot='content').get_plugins_list()[0] request = self.get_page_request(public, AnonymousUser()) response = details(request, '') self.assertContains(response, '<link rel="stylesheet" href="/static/djangocms_highlightjs/themes/dark.css">') self.assertContains(response, """<pre id="highlight-%s" class="highlight-js">\n\t<strong>test.py</strong>\n\t<code> def print_hello(): print("hello world!") </code> </pre>""" % plugin.pk) self.assertContains(response, '<script src="/static/djangocms_highlightjs/js/highlight.pack.js"></script>')
def test_detail_view_fallback_language(self): ''' Ask for a page in elvish (doesn't exist), and assert that it fallsback to English ''' page = create_page("page1", "nav_playground.html", "en") with SettingsOverride(TEMPLATE_CONTEXT_PROCESSORS=[], CMS_LANGUAGES={ 1:[ {'code':'x-klingon', 'name':'Klingon', 'public':True, 'fallbacks':[]}, {'code':'x-elvish', 'name':'Elvish', 'public':True, 'fallbacks':['x-klingon', 'en', ]}, ]}, ): create_title("x-klingon", "futla ak", page, slug=page.get_slug()) page.publish() from cms.views import details request = AttributeObject( REQUEST={'language': 'x-elvish'}, GET=[], session={}, path='/', current_page=None, method='GET', COOKIES={}, META={}, user=User(), ) response = details(request, '') self.assertTrue(isinstance(response, HttpResponseRedirect))
def test_11_detail_view_fallsback_language(self): ''' Ask for a page in elvish (doesn't exist), and assert that it fallsback to English ''' with SettingsOverride(TEMPLATE_CONTEXT_PROCESSORS=[], CMS_LANGUAGE_FALLBACK=True, CMS_DBGETTEXT=False, CMS_LANGUAGE_CONF={ 'elvish': ['klingon', 'en',] }, CMS_LANGUAGES=[( 'klingon', 'Klingon' ), ( 'elvish', 'Elvish' ) ]): from cms.views import details class Mock: pass request = Mock() setattr(request, 'REQUEST',{'language':'elvish'}) setattr(request, 'GET',[]) setattr(request, 'session',{}) setattr(request, 'path','/') setattr(request, 'user',self.user) setattr(request, 'current_page',None) response = details(request, slug=self.test_page.get_slug()) self.assertTrue(isinstance(response,HttpResponseRedirect))
def dispatch(self, request, *args, **kwargs): """ In some Shop configurations, it is common to render the the catalog's list view right on the main landing page. Therefore we have a combination of the ``ProductListView`` and the ``ProductRetrieveView`` interfering with the CMS's root page, which means that we have overlapping namespaces. For example, the URL ``/awesome-toy`` must be served by the ``ProductRetrieveView``, but ``/cart`` is served by **django-CMS**. In such a situation, the CMS is not able to intercept all requests intended for itself. Instead this ``ProductRetrieveView`` would not find a product if we query for, say ``/cart``, and hence would raise a Not Found exception. However, since we have overlapping namespaces, this method first attempts to resolve by product, and if that fails, it forwards the request to django-CMS. """ try: return super(ProductRetrieveView, self).dispatch(request, *args, **kwargs) except Http404: if LooseVersion(CMS_VERSION) < LooseVersion('3.5'): is_root = request.current_page.is_root() else: is_root = request.current_page.node.is_root() if is_root: return details(request, kwargs.get('slug')) raise except: raise
def test_redirect_to_self(self): one = create_page("one", "nav_playground.html", "en", published=True, redirect='/') url = one.get_absolute_url() request = self.get_request(url) response = details(request, one.get_path()) self.assertEqual(response.status_code, 200)
def test_login_required(self): create_page("page", "nav_playground.html", "en", published=True, login_required=True) plain_url = '/accounts/' login_rx = re.compile("%s\?(signin=|next=/en/)&" % plain_url) with SettingsOverride(LOGIN_URL=plain_url + '?signin'): request = self.get_request('/en/') response = details(request, '') self.assertEqual(response.status_code, 302) self.assertTrue(login_rx.search(response['Location'])) login_rx = re.compile("%s\?(signin=|next=/)&" % plain_url) with SettingsOverride(USE_I18N=False, LOGIN_URL=plain_url + '?signin'): request = self.get_request('/') response = details(request, '') self.assertEqual(response.status_code, 302) self.assertTrue(login_rx.search(response['Location']))
def test_redirect_to_self_with_host(self): one = create_page("one", "nav_playground.html", "en", published=True, redirect='http://testserver/') url = one.get_absolute_url() request = self.get_request(url) response = details(request, url.strip('/')) self.assertEqual(response.status_code, HttpResponse.status_code)
def test_edit_page(self): language = "en" user = self.get_superuser() page = create_page('Test', 'col_two.html', language, published=True) title = page.get_title_obj(language) title.menu_title = 'Menu Test' title.page_title = 'Page Test' title.title = 'Main Test' title.save() page.publish('en') page.reload() request = self.get_page_request(page, user, edit=True) response = details(request, '') self.assertContains( response, '<div class="cms_plugin cms_plugin-cms-page-get_page_title-%s cms_render_model">%s</div>' % ( page.pk, page.get_page_title(language))) self.assertContains( response, '<div class="cms_plugin cms_plugin-cms-page-get_menu_title-%s cms_render_model">%s</div>' % ( page.pk, page.get_menu_title(language))) self.assertContains( response, '<div class="cms_plugin cms_plugin-cms-page-get_title-%s cms_render_model">%s</div>' % ( page.pk, page.get_title(language))) self.assertContains( response, '<div class="cms_plugin cms_plugin-cms-page-changelist-%s cms_render_model cms_render_model_block"><h3>Menu</h3></div>' % page.pk)
def test_detail_view_fallback_language(self): ''' Ask for a page in elvish (doesn't exist), and assert that it fallsback to English ''' with SettingsOverride(TEMPLATE_CONTEXT_PROCESSORS=[], CMS_LANGUAGE_CONF={ 'x-elvish': ['x-klingon', 'en',] }, CMS_LANGUAGES=[ ('x-klingon', 'Klingon'), ('x-elvish', 'Elvish'), ]): from cms.views import details request = AttributeObject( REQUEST={'language': 'x-elvish'}, GET=[], session={}, path='/', user=self.test_user, current_page=None, method='GET', ) response = details(request, '') self.assertTrue(isinstance(response,HttpResponseRedirect))
def test_details_view(self): """ Tests that the `detail` view is working. """ response = details(self.get_request(self.test_page), "") response.render() r = self.strip_rendered(response.content.decode("utf8")) self.assertEqual(r, u"|" + self.test_data["text_main"] + u"|" + self.test_data["text_sub"] + u"|")
def test_details_view(self): """ Tests that the `detail` view is working. """ response = details(self.get_request(page=self.test_page), '') response.render() r = self.strip_rendered(response.content.decode('utf8')) self.assertEqual(r, u'|' + self.test_data['text_main'] + u'|' + self.test_data['text_sub'] + u'|')
def test_00_details_view(self): """ Tests that the `detail` view is working. """ self.init_render_settings() from cms.views import details response = details(self.get_request(), page_id=self.test_page.pk) r = self.strip_rendered(response.content) self.assertEqual(r, u'|'+self.test_data['text_main']+u'|'+self.test_data['text_sub']+u'|')
def test_external_redirect(self): # test external redirect redirect_one = "https://www.django-cms.org/" one = create_page("one", "nav_playground.html", "en", published=True, redirect=redirect_one) url = one.get_absolute_url() request = self.get_request(url) response = details(request, url.strip("/")) self.assertEqual(response.status_code, 302) self.assertEqual(response["Location"], redirect_one)
def test_details_view(self): """ Tests that the `detail` view is working. """ with SettingsOverride(CMS_TEMPLATES=[(TEMPLATE_NAME, '')]): from cms.views import details response = details(self.get_request(self.test_page), '') r = self.strip_rendered(response.content) self.assertEqual(r, u'|'+self.test_data['text_main']+u'|'+self.test_data['text_sub']+u'|')
def test_00_details_view(self): """ Tests that the `detail` view is working. """ with SettingsOverride(**self.render_settings()): from cms.views import details response = details(self.get_request(), slug=self.test_page.get_slug()) r = self.strip_rendered(response.content) self.assertEqual(r, u'|'+self.test_data['text_main']+u'|'+self.test_data['text_sub']+u'|')
def landing(request): """ Shim to redirect users to the login page if they try to reach this unauthenticated. :param request: :return: """ if not request.user.is_anonymous(): return details(request, '') return redirect('/en/admin/login/?next=/en/')
def test_internal_forced_redirect(self): # test internal forced language redirect redirect_one = "https://www.django-cms.org/" redirect_three = "/en/" one = create_page("one", "nav_playground.html", "en", published=True, redirect=redirect_one) three = create_page("three", "nav_playground.html", "en", parent=one, published=True, redirect=redirect_three) url = three.get_absolute_url() request = self.get_request(url) response = details(request, url.strip("/")) self.assertEqual(response.status_code, 302) self.assertEqual(response["Location"], redirect_three)
def test_language_fallback(self): """ Test language fallbacks in details view """ create_page("page", "nav_playground.html", "en", published=True) request = self.get_request('/', 'de') response = details(request, '') self.assertEqual(response.status_code, 302) self.assertEqual(response['Location'], '/en/') with SettingsOverride(CMS_LANGUAGE_FALLBACK=False): self.assertRaises(Http404, details, request, '')
def get_page_from_request(request): """ tries to get a page from a request if the page hasn't been handled by the cms urls.py """ if hasattr(request, '_current_page_cache'): return request._current_page_cache else: path = request.path from cms.views import details resp = details(request, path.split("/")[0], no404=True, only_context=True) return resp['current_page']
def test_04_redirect(self): redirect_one = 'https://www.django-cms.org/' redirect_two = '/' redirect_three = '/en/' # test external redirect one = self.create_page( published=True, language='en', title_extra={'redirect': redirect_one} ) url = one.get_absolute_url() request = self.get_request(url) response = details(request, url.strip('/')) self.assertEqual(response.status_code, 302) self.assertEqual(response['Location'], redirect_one) # test internal language neutral redirect two = self.create_page( parent_page=one, published=True, language='en', title_extra={'redirect': redirect_two} ) url = two.get_absolute_url() request = self.get_request(url) response = details(request, url.strip('/')) self.assertEqual(response.status_code, 302) self.assertEqual(response['Location'], '/en/') # test internal forced language redirect three = self.create_page( parent_page=one, published=True, language='en', title_extra={'redirect': redirect_three} ) url = three.get_absolute_url() request = self.get_request(url) response = details(request, url.strip('/')) self.assertEqual(response.status_code, 302) self.assertEqual(response['Location'], redirect_three)
def test_internal_neutral_redirect(self): # test internal language neutral redirect redirect_one = 'https://www.django-cms.org/' redirect_two = '/' one = create_page("one", "nav_playground.html", "en", published=True, redirect=redirect_one) two = create_page("two", "nav_playground.html", "en", parent=one, published=True, redirect=redirect_two) url = two.get_absolute_url() request = self.get_request(url) response = details(request, two.get_path()) self.assertEqual(response.status_code, 302) self.assertEqual(response['Location'], '/en/')
def get_placeholders(request, template_name): """ Return a list of PlaceholderNode found in the given template """ try: temp = loader.get_template(template_name) except TemplateDoesNotExist: return [] context = details(request, no404=True, only_context=True) temp.render(RequestContext(request, context)) list = [] placeholders_recursif(temp.nodelist, list) return list
def test_details_view(self): """ Tests that the `detail` view is working. """ with SettingsOverride(CMS_TEMPLATES=[(TEMPLATE_NAME, '')]): from cms.views import details response = details(self.get_request(self.test_page), '') response.render() r = self.strip_rendered(response.content.decode('utf8')) self.assertEqual( r, u'|' + self.test_data['text_main'] + u'|' + self.test_data['text_sub'] + u'|')
def test_internal_forced_redirect(self): # test internal forced language redirect redirect_one = 'https://www.django-cms.org/' redirect_three = '/en/' one = create_page("one", "nav_playground.html", "en", published=True, redirect=redirect_one) three = create_page("three", "nav_playground.html", "en", parent=one, published=True, redirect=redirect_three) url = three.get_absolute_url() request = self.get_request(url) response = details(request, url.strip('/')) self.assertEqual(response.status_code, 302) self.assertEqual(response['Location'], redirect_three)
def test_10_detail_view_404_when_no_language_is_found(self): with SettingsOverride(TEMPLATE_CONTEXT_PROCESSORS=[], CMS_LANGUAGE_FALLBACK=True, CMS_DBGETTEXT=False, CMS_LANGUAGES=[( 'klingon', 'Klingon' ), ( 'elvish', 'Elvish' )]): from cms.views import details class Mock: pass request = Mock() setattr(request, 'REQUEST',{'language':'elvish'}) setattr(request, 'GET',[]) setattr(request, 'session',{}) setattr(request, 'path','') setattr(request, 'user',self.user) setattr(request, 'current_page',None) raised = False try: details(request, slug=self.test_page.get_slug()) except Http404: raised = True self.assertTrue(raised)
def test_external_redirect(self): # test external redirect redirect_one = 'https://www.django-cms.org/' one = create_page("one", "nav_playground.html", "en", published=True, redirect=redirect_one) url = one.get_absolute_url() request = self.get_request(url) response = details(request, one.get_path("en")) self.assertEqual(response.status_code, 302) self.assertEqual(response['Location'], redirect_one)
def test_10_detail_view_404_when_no_language_is_found(self): with SettingsOverride(TEMPLATE_CONTEXT_PROCESSORS=[], CMS_LANGUAGE_FALLBACK=True, CMS_DBGETTEXT=False, CMS_LANGUAGES=[('klingon', 'Klingon'), ('elvish', 'Elvish')]): from cms.views import details class Mock: pass request = Mock() setattr(request, 'REQUEST', {'language': 'elvish'}) setattr(request, 'GET', []) setattr(request, 'session', {}) setattr(request, 'path', '') setattr(request, 'user', self.user) setattr(request, 'current_page', None) raised = False try: details(request, slug=self.test_page.get_slug()) except Http404: raised = True self.assertTrue(raised)
def test_page_tags(self): """ Test page-level templatetags """ page1, page2 = self.get_pages() page_ext = PageTags.objects.create(extended_object=page1) page_ext.tags.add("pagetag.1", "pagetag.2") page1.publish() tags = Tag.objects.filter(name__in=("pagetag.1", "pagetag.2")) request = self.get_page_request(page1.get_public_object(), AnonymousUser()) response = details(request, '') self.assertContains(response, '<ul><li>pagetag.1</li><li>pagetag.2</li></ul>') self.assertEqual(set(response.context_data['ptags_list']), set(tags)) self.assertEqual(set(response.context_data['ttags_list']), set())
def test_13_detail_view_fallsback_language_no_redirect(self): """ Ask for a page in a language that doesn't exist, and assert that it fallsback. But does no redirect and displays the content directly. """ test_settings = dict(CMS_TEMPLATES=((TEMPLATE_NAME, ""),), CMS_LANGUAGE_FALLBACK="no_redirect") with SettingsOverride(**test_settings): from cms.views import details request = self.get_request(language=settings.LANGUAGES[1][0]) response = details(request, slug=self.test_page.get_slug()) r = self.strip_rendered(response.content) self.assertEqual(r, u"|" + self.test_data["text_main"] + u"|" + self.test_data["text_sub"] + u"|")
def test_title_tags(self): """ Test title-level templatetags """ page1, page2 = self.get_pages() title_ext = TitleTags.objects.create(extended_object=page2.get_title_obj('en')) title_ext.tags.add('titletag.1', 'titletag.2') for lang in self.languages: page2.publish(lang) tags = Tag.objects.filter(name__in=('titletag.1', 'titletag.2')) request = self.get_page_request(page2.get_public_object(), AnonymousUser()) response = details(request, '') self.assertContains(response, '<li>titletag.2</li>') self.assertContains(response, '<li>titletag.1</li>')
def get(self, request, **kwargs): rendered = details(request, '') soup = BeautifulSoup(rendered.rendered_content) content = { 'header': soup.find('header'), 'footer': soup.find('footer') } # remove en/ from links for key, value in content.items(): content[key] = str(value).replace('en/', '') return Response(data=content)
def test_page_tags(self): """ Test page-level templatetags """ page1, page2 = self.get_pages() page_ext = PageTags.objects.create(extended_object=page1) page_ext.tags.add('pagetag.1', 'pagetag.2') for lang in self.languages: page1.publish(lang) tags = Tag.objects.filter(name__in=('pagetag.1', 'pagetag.2')) request = self.get_page_request(page1.get_public_object(), AnonymousUser()) response = details(request, None) self.assertContains(response, '<li>pagetag.1</li>') self.assertContains(response, '<li>pagetag.2</li>')
def test_detail_view_fallback_language(self): ''' Ask for a page in elvish (doesn't exist), and assert that it fallsback to English ''' page = create_page("page1", "nav_playground.html", "en") with SettingsOverride( TEMPLATE_CONTEXT_PROCESSORS=[], CMS_LANGUAGES={ 1: [ { 'code': 'x-klingon', 'name': 'Klingon', 'public': True, 'fallbacks': [] }, { 'code': 'x-elvish', 'name': 'Elvish', 'public': True, 'fallbacks': [ 'x-klingon', 'en', ] }, ] }, ): create_title("x-klingon", "futla ak", page, slug=page.get_slug()) page.publish() from cms.views import details request = AttributeObject( REQUEST={'language': 'x-elvish'}, GET=[], session={}, path='/', current_page=None, method='GET', COOKIES={}, META={}, user=User(), ) response = details(request, '') self.assertTrue(isinstance(response, HttpResponseRedirect))
def test_title_tags(self): """ Test title-level templatetags """ page1, page2 = self.get_pages() title_ext = TitleTags.objects.create(extended_object=page2.get_title_obj('en')) title_ext.tags.add('titletag.1', 'titletag.2') for lang in self.languages: page2.publish(lang) tags = Tag.objects.filter(name__in=('titletag.1', 'titletag.2')) request = self.get_page_request(page2.get_public_object(), AnonymousUser()) response = details(request, '') self.assertContains(response, '<li>titletag.2</li>') self.assertContains(response, '<li>titletag.1</li>') self.assertEqual(set(response.context_data['ttags_list']), set(tags)) self.assertEqual(set(response.context_data['ptags_list']), set())
def test_13_detail_view_fallsback_language_no_redirect(self): """ Ask for a page in a language that doesn't exist, and assert that it fallsback. But does no redirect and displays the content directly. """ test_settings = dict(CMS_TEMPLATES=((TEMPLATE_NAME, ''), ), CMS_LANGUAGE_FALLBACK='no_redirect') with SettingsOverride(**test_settings): from cms.views import details request = self.get_request(language=settings.LANGUAGES[1][0]) response = details(request, slug=self.test_page.get_slug()) r = self.strip_rendered(response.content) self.assertEqual( r, u'|' + self.test_data['text_main'] + u'|' + self.test_data['text_sub'] + u'|')
def test_detail_view_fallback_language(self): ''' Ask for a page in elvish (doesn't exist), and assert that it fallsback to English ''' page = create_page("page1", "nav_playground.html", "en") with self.settings(TEMPLATE_CONTEXT_PROCESSORS=[], CMS_LANGUAGES={ 1:[ {'code':'x-klingon', 'name':'Klingon', 'public':True, 'fallbacks':[]}, {'code':'x-elvish', 'name':'Elvish', 'public':True, 'fallbacks':['x-klingon', 'en', ]}, ]}, ): create_title("x-klingon", "futla ak", page, slug=page.get_slug()) page.publish("x-klingon") from cms.views import details def get_path(): return '/' def is_secure(): return False def get_host(): return 'testserver' User = get_user_model() request = AttributeObject( GET=QueryDict('language=x-elvish'), POST=QueryDict(''), session={}, path='/', current_page=None, method='GET', COOKIES={}, META={}, user=User(), get_full_path=get_path, is_secure=is_secure, get_host=get_host, ) response = details(request, '') self.assertTrue(isinstance(response, HttpResponseRedirect))
def get_page_from_request(request): """ tries to get a page from a request if the page hasn't been handled by the cms urls.py """ if hasattr(request, '_current_page_cache'): return request._current_page_cache else: path = request.path from cms.views import details kw = {} # TODO: very ugly - change required! if path.startswith('/admin/'): kw['page_id']=path.split("/")[0] else: kw['slug']=path[1:-1] resp = details(request, no404=True, only_context=True, **kw) return resp['current_page']
def dispatch(self, request, *args, **kwargs): """ In some Shop configurations, it is common to render the the catalog's list view right on the main landing page. Therefore we have a combination of the ``ProductListView`` and the ``ProductRetrieveView`` interfering with the CMS's root page, which means that we have overlapping namespaces. For example, the URL ``/awesome-toy`` must be served by the ``ProductRetrieveView``, but ``/cart`` is served by **django-CMS**. In such a situation, the CMS is not able to intercept all requests intended for itself. Instead this ``ProductRetrieveView`` would not find a product if we query for, say ``/cart``, and hence would raise a Not Found exception. However, since we have overlapping namespaces, this method first attempts to resolve by product, and if that fails, it forwards the request to django-CMS. """ try: return super().dispatch(request, *args, **kwargs) except Http404: if request.current_page.node.is_root(): return details(request, kwargs.get('slug')) raise except: raise
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) 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_language_fallback(self): """ Test language fallbacks in details view """ from cms.views import details p1 = create_page("page", "nav_playground.html", "en", published=True) p1.set_as_homepage() # There's no "de" translation. # Fallbacks are configured. # The cms is set to redirect on fallback. request = self.get_request('/de/', 'de') response = details(request, p1.get_path()) self.assertEqual(response.status_code, 302) self.assertEqual(response['Location'], '/en/') # There's no "de" translation. # There's no fallbacks configured. 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) # There's no "de" translation. # Fallbacks are configured. # The cms is set to render in place instead of redirecting # to the fallback. 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.assertRedirects(response, '/en/')
def handler404(request): # return render(request, "design/404.html") return details(request, '404')