Example #1
0
    def test_include_urlconf(self):
        self.create_base_structure(APP_NAME, 'en')

        path = reverse('extra_second')
        response = self.client.get(path)
        self.assertEqual(response.status_code, 200)
        self.assertTemplateUsed(response, 'sampleapp/extra.html')
        self.assertContains(response, "test included urlconf")

        path = reverse('extra_first')
        response = self.client.get(path)
        self.assertEqual(response.status_code, 200)
        self.assertTemplateUsed(response, 'sampleapp/extra.html')
        self.assertContains(response, "test urlconf")
        with force_language("de"):
            path = reverse('extra_first')
        response = self.client.get(path)
        self.assertEqual(response.status_code, 200)
        self.assertTemplateUsed(response, 'sampleapp/extra.html')
        self.assertContains(response, "test urlconf")
        with force_language("de"):
            path = reverse('extra_second')
        response = self.client.get(path)
        self.assertEqual(response.status_code, 200)
        self.assertTemplateUsed(response, 'sampleapp/extra.html')
        self.assertContains(response, "test included urlconf")

        self.apphook_clear()
Example #2
0
    def test_get_page_for_apphook(self):
        en_title, de_title = self.create_base_structure(APP_NAME, ['en', 'de'])
        with force_language("en"):
            path = reverse('sample-settings')
        request = self.get_request(path)
        request.LANGUAGE_CODE = 'en'

        attached_to_page = applications_page_check(request, path=path[1:])  # strip leading slash
        self.assertEqual(attached_to_page.pk, en_title.page.pk)

        response = self.client.get(path)
        self.assertEqual(response.status_code, 200)

        self.assertTemplateUsed(response, 'sampleapp/home.html')
        self.assertContains(response, en_title.title)
        with force_language("de"):
            path = reverse('sample-settings')
        request = self.get_request(path)
        request.LANGUAGE_CODE = 'de'
        attached_to_page = applications_page_check(request, path=path[1:])  # strip leading slash and language prefix
        self.assertEqual(attached_to_page.pk, de_title.page.pk)

        response = self.client.get(path)
        self.assertEqual(response.status_code, 200)
        self.assertTemplateUsed(response, 'sampleapp/home.html')
        self.assertContains(response, de_title.title)
        self.apphook_clear()
Example #3
0
    def test_get_apps(self):
        """
        Check that urlconf are dynamically loaded according to the different page the apphook is
        attached to
        """
        titles = self.create_base_structure('VariableUrlsApp', ['en', 'de'])
        titles[0].page.reverse_id = 'page1'
        titles[0].page.save()

        self.reload_urls()

        # only one urlconf is configured given that only one page is created
        with force_language('de'):
            reverse('extra_first')
            with self.assertRaises(NoReverseMatch):
                reverse('sample2-root')

        self.reload_urls()
        self.apphook_clear()

        page2 = create_page('page2', 'nav_playground.html',
                            'en', created_by=self.superuser, published=True,
                            parent=titles[0].page.get_parent_page().get_draft_object(),
                            apphook='VariableUrlsApp', reverse_id='page2')
        create_title('de', 'de_title', page2, slug='slug')
        page2.publish('de')

        self.reload_urls()

        with force_language('de'):
            reverse('sample2-root')
            reverse('extra_first')

        self.apphook_clear()
Example #4
0
    def test_get_page_for_apphook_on_preview_or_edit(self):
        if get_user_model().USERNAME_FIELD == 'email':
            superuser = get_user_model().objects.create_superuser('admin', '*****@*****.**', '*****@*****.**')
        else:
            superuser = get_user_model().objects.create_superuser('admin', '*****@*****.**', 'admin')

        page = create_page("home", "nav_playground.html", "en",
                           created_by=superuser, published=True, apphook=APP_NAME)
        create_title('de', page.get_title(), page)
        page.publish('en')
        page.publish('de')
        page.save()

        # Needed because publish button only shows if the page is dirty
        page.set_publisher_state('en', state=PUBLISHER_STATE_DIRTY)

        public_page = page.get_public_object()

        with self.login_user_context(superuser):
            with force_language("en"):
                path = reverse('sample-settings')
                request = self.get_request(path + '?%s' % get_cms_setting('CMS_TOOLBAR_URL__EDIT_ON'))
                request.LANGUAGE_CODE = 'en'
                attached_to_page = applications_page_check(request, path=path[1:])  # strip leading slash
                response = self.client.get(path+"?edit")
                self.assertContains(response, '?redirect=')
            with force_language("de"):
                path = reverse('sample-settings')
                request = self.get_request(path + '?%s' % get_cms_setting('CMS_TOOLBAR_URL__EDIT_ON'))
                request.LANGUAGE_CODE = 'de'
                attached_to_page = applications_page_check(request, path=path[1:])  # strip leading slash
                self.assertEqual(attached_to_page.pk, public_page.pk)
Example #5
0
 def test_switch_moderator_on(self):
     site = get_current_site()
     with force_language("en"):
         pages_root = unquote(reverse("pages-root"))
     page1 = create_page('page', 'nav_playground.html', 'en', published=True)
     with disable_logger(log):
         call_command('cms', 'moderator', 'on')
     with force_language("en"):
         path = page1.get_absolute_url()[len(pages_root):].strip('/')
         page2 = get_page_from_path(site, path)
     self.assertEqual(page1.get_absolute_url(), page2.get_absolute_url())
Example #6
0
    def test_get_page_choices_with_multiple_translations(self):
        site = get_current_site()
        pages = [
            create_page("0001", "nav_playground.html", "en"),
            create_page("0002", "nav_playground.html", "en"),
            create_page("0003", "nav_playground.html", "en"),
            create_page("0004", "nav_playground.html", "en"),
        ]
        languages = ['de', 'fr']

        for page in pages:
            for language in languages:
                title = page.get_title('en')
                create_title(language, title, page=page)

        for language in ['en'] + languages:
            expected = [
                ('', '----'),
                (site.name, [
                    (page.pk, page.get_title(language, fallback=False))
                    for page in pages
                ])
            ]

            with force_language(language):
                self.assertSequenceEqual(get_page_choices(), expected)
Example #7
0
    def render(self):
        self.populate()
        self.post_template_populate()

        context = self.get_render_context()

        with force_language(self.toolbar_language):
            return render_to_string('cms/toolbar/toolbar.html', context, request=self.request)
Example #8
0
 def get_object_public_url(self):
     if self.obj:
         with force_language(self.request_language):
             try:
                 return self.obj.get_public_url()
             except:
                 pass
     return ''
Example #9
0
 def test_switch_moderator_off(self):
     site = get_current_site()
     with force_language("en"):
         pages_root = unquote(reverse("pages-root"))
         page1 = create_page('page', 'nav_playground.html', 'en', published=True)
         path = page1.get_absolute_url()[len(pages_root):].strip('/')
         page2 = get_page_from_path(site, path)
         self.assertIsNotNone(page2)
         self.assertEqual(page1.get_absolute_url(), page2.get_absolute_url())
Example #10
0
 def in_apphook(self):
     with force_language(self.toolbar.request_language):
         try:
             resolver = resolve(self.toolbar.request_path)
         except Resolver404:
             return False
         else:
             from cms.views import details
             return resolver.func != details
Example #11
0
 def test_apphook_include_extra_parameters(self):
     self.create_base_structure(NS_APP_NAME, ['en', 'de'], 'instance_1')
     with force_language("en"):
         path = reverse('namespaced_app_ns:extra_second')
     request = self.get_request(path)
     request.LANGUAGE_CODE = 'en'
     response = self.client.get(path)
     self.assertEqual(response.status_code, 200)
     self.assertTemplateUsed(response, 'sampleapp/extra.html')
     self.assertContains(response, 'someopts')
Example #12
0
    def handle_old_url_exception(self, error):
        match = resolve(error.new_url_format)

        kwargs = match.kwargs
        kwargs['pk'] = self.kwargs['pk']
        url_name = '{0}:faq-answer'.format(match.namespace)

        with force_language(self.current_language):
            new_url_format = reverse(url_name, kwargs=kwargs)
        return HttpResponsePermanentRedirect(new_url_format)
Example #13
0
    def update_translation(self, language, data):
        with force_language(language):
            # write to the db.
            # we bypass save() because saving a translation
            # should be very transparent.
            # So we avoid the save() method and signals.
            (self.__class__._default_manager.filter(pk=self.pk).update(**data))

        # update the current instance
        self.translate(language, **data)
Example #14
0
    def handle_old_url_exception(self, error):
        match = resolve(error.new_url_format)

        kwargs = match.kwargs
        kwargs['pk'] = self.kwargs['pk']
        url_name = '{0}:faq-answer'.format(match.namespace)

        with force_language(self.current_language):
            new_url_format = reverse(url_name, kwargs=kwargs)
        return HttpResponsePermanentRedirect(new_url_format)
Example #15
0
    def render_with_structure(self, context, nodelist):
        self.populate()

        context.update(self.get_render_context())

        with force_language(self.toolbar_language):
            # needed to populate the context with sekizai content
            render_to_string('cms/toolbar/toolbar_javascript.html', flatten_context(context))

        # render everything below the tag
        rendered_contents = nodelist.render(context)

        self.post_template_populate()

        with force_language(self.toolbar_language):
            # render the toolbar content
            toolbar = render_to_string('cms/toolbar/toolbar_with_structure.html', flatten_context(context))
        # return the toolbar content and the content below
        return '%s\n%s' % (toolbar, rendered_contents)
Example #16
0
    def test_apphook_csrf_exempt_endpoint(self):
        self.create_base_structure(NS_APP_NAME, 'en', 'instance_ns')

        client = self.client_class(enforce_csrf_checks=True)

        with force_language("en"):
            path = reverse('namespaced_app_ns:sample-exempt')

        response = client.post(path)

        # Assert our POST request went through
        self.assertEqual(response.status_code, 200)

        with force_language("en"):
            path = reverse('namespaced_app_ns:sample-account')

        response = client.post(path)

        # Assert our POST request did not go through
        self.assertEqual(response.status_code, 403)
Example #17
0
    def test_toolbar_current_app_namespace(self):
        self.create_base_structure(NS_APP_NAME, 'en', 'instance_ns')
        with force_language("en"):
            path = reverse('namespaced_app_ns:sample-settings')
        request = self.get_request(path)
        toolbar = CMSToolbar(request)
        self.assertTrue(toolbar.toolbars['cms.test_utils.project.sampleapp.cms_toolbars.CategoryToolbar'].is_current_app)
        self.assertFalse(toolbar.toolbars['cms.test_utils.project.extensionapp.cms_toolbars.MyTitleExtensionToolbar'].is_current_app)

        # Testing a decorated view
        with force_language("en"):
            path = reverse('namespaced_app_ns:sample-exempt')
        request = self.get_request(path)
        toolbar = CMSToolbar(request)
        self.assertEqual(toolbar.toolbars['cms.test_utils.project.sampleapp.cms_toolbars.CategoryToolbar'].app_path,
                         'cms.test_utils.project.sampleapp')
        self.assertTrue(toolbar.toolbars['cms.test_utils.project.sampleapp.cms_toolbars.CategoryToolbar'].is_current_app)
        self.assertEqual(toolbar.toolbars['cms.test_utils.project.extensionapp.cms_toolbars.MyTitleExtensionToolbar'].app_path,
                         'cms.test_utils.project.sampleapp')
        self.assertFalse(toolbar.toolbars['cms.test_utils.project.extensionapp.cms_toolbars.MyTitleExtensionToolbar'].is_current_app)
Example #18
0
 def get_object_draft_url(self):
     if self.obj:
         with force_language(self.request_language):
             try:
                 return self.obj.get_draft_url()
             except:
                 try:
                     return self.obj.get_absolute_url()
                 except:
                     pass
     return ''
Example #19
0
 def test_publish_wrong_lang(self):
     page = self.create_page("test_admin", published=False)
     superuser = self.get_superuser()
     with self.settings(
         LANGUAGES=(('de', 'de'), ('en', 'en')),
         CMS_LANGUAGES={1: [{'code': 'en', 'name': 'en', 'fallbacks': ['fr', 'de'], 'public': True}]}
     ):
         with self.login_user_context(superuser):
             with force_language('de'):
                 response = self.client.post(admin_reverse("cms_page_publish_page", args=[page.pk, 'en']))
     self.assertEqual(response.status_code, 302)
     page = Page.objects.get(pk=page.pk)
Example #20
0
    def get_on_delete_redirect_url(self):
        language = self.current_lang
        parent_page = self.page.parent_page if self.page else None

        # if the current page has a parent in the request's current language redirect to it
        if parent_page and language in parent_page.get_languages():
            with force_language(language):
                return parent_page.get_absolute_url(language=language)

        # else redirect to root, do not redirect to Page.objects.get_home() because user could have deleted the last
        # page, if DEBUG == False this could cause a 404
        return reverse('pages-root')
Example #21
0
 def test_toolbar_current_app_apphook_with_implicit_current_app(self):
     self.create_base_structure(NS_APP_NAME, 'en', 'namespaced_app_ns')
     with force_language("en"):
         path = reverse('namespaced_app_ns:current-app')
     request = self.get_request(path)
     toolbar = CMSToolbar(request)
     self.assertEqual(toolbar.toolbars['cms.test_utils.project.sampleapp.cms_toolbars.CategoryToolbar'].app_path,
                      'cms.test_utils.project.sampleapp')
     self.assertTrue(toolbar.toolbars['cms.test_utils.project.sampleapp.cms_toolbars.CategoryToolbar'].is_current_app)
     self.assertEqual(toolbar.toolbars['cms.test_utils.project.extensionapp.cms_toolbars.MyTitleExtensionToolbar'].app_path,
                      'cms.test_utils.project.sampleapp')
     self.assertFalse(toolbar.toolbars['cms.test_utils.project.extensionapp.cms_toolbars.MyTitleExtensionToolbar'].is_current_app)
Example #22
0
 def test_apphook_breaking_under_home_with_new_path_caching(self):
     home = self.create_homepage("home", "nav_playground.html", "en", published=True)
     child = create_page("child", "nav_playground.html", "en", published=True, parent=home)
     # not-home is what breaks stuff, because it contains the slug of the home page
     not_home = create_page("not-home", "nav_playground.html", "en", published=True, parent=child)
     create_page("subchild", "nav_playground.html", "en", published=True, parent=not_home, apphook='SampleApp')
     with force_language("en"):
         self.reload_urls()
         urlpatterns = get_app_patterns()
         resolver = urlpatterns[0]
         url = resolver.reverse('sample-root')
         self.assertEqual(url, 'child/not-home/subchild/')
Example #23
0
    def get_publish_url(self):
        pk = self.page.pk if self.page else 0
        params = {}

        if self.dirty_statics:
            params['statics'] = ','.join(str(sp.pk) for sp in self.dirty_statics)

        if self.in_apphook():
            params['redirect'] = self.toolbar.request_path

        with force_language(self.current_lang):
            url = admin_reverse('cms_page_publish_page', args=(pk, self.current_lang))
        return add_url_parameters(url, params)
Example #24
0
def get_plugin_tree_as_json(request, plugins):
    from cms.utils.plugins import (
        build_plugin_tree,
        downcast_plugins,
        get_plugin_restrictions,
    )

    tree_data = []
    tree_structure = []
    restrictions = {}
    toolbar = get_toolbar_from_request(request)
    template = toolbar.templates.drag_item_template
    placeholder = plugins[0].placeholder
    host_page = placeholder.page
    copy_to_clipboard = placeholder.pk == toolbar.clipboard.pk
    plugins = downcast_plugins(plugins, select_placeholder=True)
    plugin_tree = build_plugin_tree(plugins)
    get_plugin_info = get_plugin_toolbar_info

    def collect_plugin_data(plugin):
        child_classes, parent_classes = get_plugin_restrictions(
            plugin=plugin,
            page=host_page,
            restrictions_cache=restrictions,
        )
        plugin_info = get_plugin_info(
            plugin,
            children=child_classes,
            parents=parent_classes,
        )

        tree_data.append(plugin_info)

        for plugin in plugin.child_plugin_instances or []:
            collect_plugin_data(plugin)

    with force_language(toolbar.toolbar_language):
        for root_plugin in plugin_tree:
            collect_plugin_data(root_plugin)
            context = {
                'plugin': root_plugin,
                'request': request,
                'clipboard': copy_to_clipboard,
                'cms_toolbar': toolbar,
            }
            tree_structure.append(template.render(context))
    tree_data.reverse()
    return json.dumps({
        'html': '\n'.join(tree_structure),
        'plugins': tree_data
    })
Example #25
0
    def test_get_i18n_apphook_with_explicit_current_app(self):
        self.apphook_clear()
        titles = self.create_base_structure(NS_APP_NAME, ['en', 'de'], 'instance_1')
        public_de_title = titles[1]
        de_title = Title.objects.get(page=public_de_title.page.publisher_draft, language="de")
        de_title.slug = "de"
        de_title.save()
        de_title.page.publish('de')

        self.reload_urls()
        self.apphook_clear()

        page2 = create_page("page2",
                            "nav_playground.html",
                            language="en",
                            created_by=self.superuser,
                            published=True,
                            parent=de_title.page.get_parent_page(),
                            apphook=NS_APP_NAME,
                            apphook_namespace="instance_2")
        create_title("de", "de_title", page2, slug="slug")
        page2.publish('de')
        clear_app_resolvers()
        clear_url_caches()

        if APP_MODULE in sys.modules:
            del sys.modules[APP_MODULE]

        self.reload_urls()
        with force_language("de"):
            reverse('namespaced_app_ns:current-app', current_app="instance_1")
            reverse('namespaced_app_ns:current-app', current_app="instance_2")
            reverse('namespaced_app_ns:current-app')
        with force_language("en"):
            reverse('namespaced_app_ns:current-app', current_app="instance_1")
            reverse('namespaced_app_ns:current-app', current_app="instance_2")
            reverse('namespaced_app_ns:current-app')
        self.apphook_clear()
Example #26
0
    def test_apphook_permissions_preserves_view_name(self):
        self.create_base_structure(APP_NAME, ['en', 'de'])

        view_names = (
            ('sample-settings', 'sample_view'),
            ('sample-class-view', 'ClassView'),
            ('sample-class-based-view', 'ClassBasedView'),
        )

        with force_language("en"):
            for url_name, view_name in view_names:
                path = reverse(url_name)
                match = resolve(path)
                self.assertEqual(match.func.__name__, view_name)
Example #27
0
    def test_get_child_page_for_apphook_with_instance_namespace(self):
        en_title = self.create_base_structure(NS_APP_NAME, 'en', 'instance_ns')
        with force_language("en"):
            path = reverse('namespaced_app_ns:sample-settings')
            path_instance1 = reverse('instance_ns:sample-settings')
            path_instance2 = reverse('namespaced_app_ns:sample-settings', current_app='instance_ns')
        self.assertEqual(path, path_instance1)
        self.assertEqual(path, path_instance2)

        request = self.get_request(path)
        request.LANGUAGE_CODE = 'en'
        attached_to_page = applications_page_check(request, path=path[1:])  # strip leading slash
        self.assertEqual(attached_to_page.pk, en_title.page_id)
        self.apphook_clear()
Example #28
0
    def test_default_language_changer_with_implicit_current_app(self):
        self.create_base_structure(NS_APP_NAME, ['en', 'de'], 'namespaced_app_ns')
        self.reload_urls()
        with force_language("en"):
            path = reverse('namespaced_app_ns:translated-url')
        request = self.get_request(path)
        request.LANGUAGE_CODE = 'en'

        url = DefaultLanguageChanger(request)('en')
        self.assertEqual(url, path)

        url = DefaultLanguageChanger(request)('de')
        self.assertEqual(url, '/de%s' % path[3:].replace('/page', '/Seite'))
        self.apphook_clear()
Example #29
0
    def _call_toolbar(self, func_name):
        with force_language(self.toolbar_language):
            first = ('cms.cms_toolbars.BasicToolbar', 'cms.cms_toolbars.PlaceholderToolbar')

            for key in first:
                toolbar = self.toolbars.get(key)
                if not toolbar:
                    continue
                getattr(toolbar, func_name)()

            for key in self.toolbars:
                if key in first:
                    continue
                toolbar = self.toolbars[key]
                getattr(toolbar, func_name)()
Example #30
0
    def test_page_language_url_for_apphook(self):

        self.apphook_clear()
        superuser = get_user_model().objects.create_superuser('admin', '*****@*****.**', 'admin')
        page = self.create_homepage("home", "nav_playground.html", "en", created_by=superuser)
        create_title('de', page.get_title(), page)
        page.publish('en')
        page.publish('de')

        child_page = create_page("child_page", "nav_playground.html", "en",
                                 created_by=superuser, parent=page)
        create_title('de', child_page.get_title(), child_page)
        child_page.publish('en')
        child_page.publish('de')

        child_child_page = create_page("child_child_page", "nav_playground.html",
                                       "en", created_by=superuser, parent=child_page, apphook='SampleApp')
        create_title("de", '%s_de' % child_child_page.get_title(), child_child_page)
        child_child_page.publish('en')
        child_child_page.publish('de')

        # publisher_public is set to draft on publish, issue with one to one reverse
        child_child_page = self.reload(child_child_page)
        with force_language("en"):
            path = reverse('extra_first')

        request = self.get_request(path)
        request.LANGUAGE_CODE = 'en'
        request.current_page = child_child_page

        fake_context = {'request': request}
        tag = DumbPageLanguageUrl()

        output = tag.get_context(fake_context, 'en')
        url = output['content']

        self.assertEqual(url, '/en/child_page/child_child_page/extra_1/')

        output = tag.get_context(fake_context, 'de')
        url = output['content']
        # look the extra "_de"
        self.assertEqual(url, '/de/child_page/child_child_page_de/extra_1/')

        output = tag.get_context(fake_context, 'fr')
        url = output['content']
        self.assertEqual(url, '/en/child_page/child_child_page/extra_1/')

        self.apphook_clear()
Example #31
0
    def get_success_url(self, obj, **kwargs):
        """
        This should return the URL of the created object, «obj».
        """
        if 'language' in kwargs:
            with force_language(kwargs['language']):
                url = obj.get_absolute_url()
        else:
            url = obj.get_absolute_url()

        # Add 'edit' to GET params of URL
        if self.edit_mode_on_success:
            sep = "&" if "?" in url else "?"
            url = '{0}{1}{2}'.format(
                url, sep, get_cms_setting('CMS_TOOLBAR_URL__EDIT_ON'))
        return url
Example #32
0
    def get_success_url(self, obj, **kwargs):
        """
        This should return the URL of the created object, «obj».
        """
        if 'language' in kwargs:
            with force_language(kwargs['language']):
                url = obj.get_absolute_url()
        else:
            url = obj.get_absolute_url()

        # Add 'edit' to GET params of URL
        if self.edit_mode_on_success:
            sep = "&" if "?" in url else "?"
            url = '{0}{1}{2}'.format(
                url, sep, get_cms_setting('CMS_TOOLBAR_URL__EDIT_ON'))
        return url
    def build_core(self, backend, stage, **options):
        from deployment import project_name

        language = self.get_language(backend)

        core_name_format = options['format']

        core_name = core_name_format % {
            'project': project_name,
            'stage': stage,
            'language': language,
        }

        core_root = os.path.join(settings.PROJECT_ROOT, 'tmp', core_name)

        with force_language(language):
            core_conf_root = self.build_conf(core_root, language)

            schema_xml = self.build_template(using=backend)
            schema_xml_path = os.path.join(core_conf_root, 'schema.xml')
            self.write_file(schema_xml_path, schema_xml)