Example #1
0
 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)
Example #2
0
 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)
Example #3
0
 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)
Example #4
0
 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(&quot;hello world!&quot;)
    </code>
</pre>""" % plugin.pk)
        self.assertContains(response, '<script src="/static/djangocms_highlightjs/js/highlight.pack.js"></script>')
Example #6
0
    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))
Example #7
0
    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))
Example #8
0
    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
Example #9
0
 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)
Example #10
0
 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']))
Example #11
0
 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)
Example #12
0
 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)
Example #13
0
    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"|")
Example #15
0
 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'|')
Example #16
0
 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'|')
Example #17
0
 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)
Example #18
0
 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'|')
Example #19
0
 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'|')
Example #20
0
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/')
Example #21
0
 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)
Example #22
0
 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, '')
Example #23
0
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']
Example #24
0
 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)
Example #25
0
 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/')
Example #26
0
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
Example #27
0
    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'|')
Example #28
0
 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/')
Example #29
0
 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)
Example #30
0
 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)
Example #31
0
 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)
Example #32
0
    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())
Example #34
0
    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"|")
Example #35
0
    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>')
Example #36
0
    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>')
Example #38
0
    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))
Example #39
0
    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())
Example #40
0
    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))
Example #42
0
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']
Example #43
0
    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
Example #44
0
 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)
Example #45
0
    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/')
Example #46
0
def handler404(request):
    # return render(request, "design/404.html")
    return details(request, '404')