Example #1
0
 def test_page_already_expired(self):
     """
     Test that a page which has a end date in the past gives a 404, not a
     500.
     """
     yesterday = datetime.date.today() - datetime.timedelta(days=1)
     with SettingsOverride(CMS_MODERATOR=False, CMS_PERMISSION=False):
         page = create_page('page',
                            'nav_playground.html',
                            'en',
                            publication_end_date=yesterday,
                            published=True)
         resp = self.client.get(page.get_absolute_url('en'))
         self.assertEqual(resp.status_code, 404)
Example #2
0
 def test_settings(self):
     toolbars = toolbar_pool.toolbars
     toolbar_pool.clear()
     with SettingsOverride(CMS_TOOLBARS=[
             'cms.cms_toolbar.BasicToolbar',
             'cms.cms_toolbar.PlaceholderToolbar'
     ]):
         toolbar_pool.register(TestToolbar)
         self.assertEqual(len(list(self.pool.get_toolbars().keys())), 2)
         api.create_page("home", "simple.html", "en", published=True)
         with self.login_user_context(self.get_superuser()):
             response = self.client.get("/en/?edit")
             self.assertEqual(response.status_code, 200)
     toolbar_pool.toolbars = toolbars
Example #3
0
 def test_multisite(self):
     """
     Checking that templates can be loaded by the template loader
     """
     templates = get_cms_setting('TEMPLATES')
     for template in templates:
         if template[0] != constants.TEMPLATE_INHERITANCE_MAGIC:
             self.assertTrue(template[0].find('%s/' % SITE_PATH[1]) >= -1)
     with SettingsOverride(SITE_ID=2):
         templates = get_cms_setting('TEMPLATES')
         for template in templates:
             if template[0] != constants.TEMPLATE_INHERITANCE_MAGIC:
                 self.assertTrue(
                     template[0].find('%s/' % SITE_PATH[2]) >= -1)
 def test_apphook_include_extra_parameters(self):
     with SettingsOverride(
             ROOT_URLCONF=
             'cms.test_utils.project.second_urls_for_apphook_tests'):
         titles = 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.assertEquals(response.status_code, 200)
         self.assertTemplateUsed(response, 'sampleapp/extra.html')
         self.assertContains(response, 'someopts')
Example #5
0
 def create_fixtures(self):
     defaults = {
         'template': 'nav_playground.html',
         'published': True,
         'in_navigation': True,
     }
     with SettingsOverride(CMS_PERMISSION=False):
         first = create_page('first', language='en', **defaults)
         create_title('de', 'erste', first)
         second = create_page('second',
                              language='en',
                              reverse_id='myreverseid',
                              **defaults)
         create_title('de', 'zweite', second)
Example #6
0
 def test_list_apphooks(self):
     out = StringIO()
     apps = ["cms", "menus", "sekizai", "cms.test_utils.project.sampleapp"]
     with SettingsOverride(INSTALLED_APPS=apps):
         create_page('Hello Title',
                     "nav_playground.html",
                     "en",
                     apphook=APPHOOK)
         self.assertEqual(
             Title.objects.filter(application_urls=APPHOOK).count(), 1)
         command = cms.Command()
         command.stdout = out
         command.handle("list", "apphooks", interactive=False)
         self.assertEqual(out.getvalue(), "SampleApp\n")
Example #7
0
 def test_explicit_apphooks(self):
     """
     Test explicit apphook loading with the CMS_APPHOOKS setting.
     """
     apphooks = (
         '%s.%s' % (APP_MODULE, APP_NAME),
     )
     with SettingsOverride(CMS_APPHOOKS=apphooks):
         apphook_pool.clear()
         hooks = apphook_pool.get_apphooks()
         app_names = [hook[0] for hook in hooks]
         self.assertEqual(len(hooks), 1)
         self.assertEqual(app_names, [APP_NAME])
         apphook_pool.clear()
Example #8
0
 def test_apphook_not_hooked(self):
     """
     Test details view when apphook pool has apphooks, but they're not
     actually hooked
     """
     if APP_MODULE in sys.modules:
         del sys.modules[APP_MODULE]
     apphooks = ('%s.%s' % (APP_MODULE, APP_NAME), )
     create_page("page2", "nav_playground.html", "en", published=True)
     with SettingsOverride(CMS_APPHOOKS=apphooks):
         apphook_pool.clear()
         response = self.client.get('/en/')
         self.assertEqual(response.status_code, 200)
         apphook_pool.clear()
Example #9
0
    def test_implicit_apphooks(self):
        """
        Test implicit apphook loading with INSTALLED_APPS cms_app.py
        """

        apps = ['cms.test_utils.project.sampleapp']
        with SettingsOverride(INSTALLED_APPS=apps, ROOT_URLCONF='cms.test_utils.project.urls_for_apphook_tests'):
            apphook_pool.clear()
            hooks = apphook_pool.get_apphooks()
            app_names = [hook[0] for hook in hooks]
            self.assertEqual(len(hooks), 3)
            self.assertIn(NS_APP_NAME, app_names)
            self.assertIn(APP_NAME, app_names)
            apphook_pool.clear()
Example #10
0
    def test_hide_untranslated(self):
        TESTLANG = get_primary_lanaguage()
        TESTLANG2 = get_secondary_lanaguage()
        page = create_page("mlpage-%s" % TESTLANG, "nav_playground.html",
                           TESTLANG)
        create_title(TESTLANG2,
                     "mlpage-%s" % TESTLANG2,
                     page,
                     slug=page.get_slug())
        page2 = create_page("mlpage-2-%s" % TESTLANG,
                            "nav_playground.html",
                            TESTLANG,
                            parent=page)
        page.publish(TESTLANG)
        page.publish(TESTLANG2)
        page2.publish(TESTLANG)

        menu = CMSMenu()
        lang_settings = copy.deepcopy(get_cms_setting('LANGUAGES'))

        request_1 = self.get_request('/%s/' % TESTLANG, TESTLANG)
        request_2 = self.get_request('/%s/' % TESTLANG2, TESTLANG2)

        lang_settings[1][1]['hide_untranslated'] = False
        with SettingsOverride(CMS_LANGUAGES=lang_settings):
            list_1 = [node.id for node in menu.get_nodes(request_1)]
            list_2 = [node.id for node in menu.get_nodes(request_2)]
            self.assertEqual(list_1, list_2)
            self.assertEqual(len(list_1), 2)

        lang_settings[1][1]['hide_untranslated'] = True
        with SettingsOverride(CMS_LANGUAGES=lang_settings):
            list_1 = [node.id for node in menu.get_nodes(request_1)]
            list_2 = [node.id for node in menu.get_nodes(request_2)]
            self.assertNotEqual(list_1, list_2)
            self.assertEqual(len(list_2), 1)
            self.assertEqual(len(list_1), 2)
Example #11
0
    def test_detail_view_404_when_no_language_is_found(self):
        page = create_page("page1", "nav_playground.html", "en")
        create_title("de", page.get_title(), page, slug=page.get_slug())
        page.publish('en')
        page.publish('de')

        with SettingsOverride(TEMPLATE_CONTEXT_PROCESSORS=[],
                              CMS_LANGUAGES={
                                  1: [
                                      {
                                          'code': 'x-klingon',
                                          'name': 'Klingon',
                                          'public': True,
                                          'fallbacks': []
                                      },
                                      {
                                          'code': 'x-elvish',
                                          'name': 'Elvish',
                                          'public': True,
                                          'fallbacks': []
                                      },
                                  ]
                              }):
            from cms.views import details

            def get_path():
                return '/'

            def is_secure():
                return False

            def get_host():
                return 'testserver'

            request = AttributeObject(
                REQUEST={'language': 'x-elvish'},
                GET=[],
                session={},
                path='/',
                current_page=None,
                method='GET',
                COOKIES={},
                META={},
                user=AnonymousUser(),
                get_full_path=get_path,
                is_secure=is_secure,
                get_host=get_host,
            )
            self.assertRaises(Http404, details, request, '')
    def test_multi_edit(self):
        user = self.get_staff()
        page = create_page('Test', 'col_two.html', 'en', published=True)
        title = create_title("fr", "test", page)

        exm = MultilingualExample1()
        exm.translate("en")
        exm.char_1 = 'one'
        exm.char_2 = 'two'
        exm.save()
        exm.translate("fr")
        exm.char_1 = "un"
        exm.char_2 = "deux"
        exm.save()

        request = self.get_page_request(page, user, edit=True)
        response = detail_view_multi(request, exm.pk)
        self.assertContains(
            response,
            '<h1><span id="cms_placeholder-model-placeholderapp-%s-%s" class="cms_placeholder-generic">one</span></h1>'
            % (exm.pk, 'char_1'))
        self.assertContains(
            response,
            "/admin/placeholderapp/multilingualexample1/edit-field/%s/en/" %
            exm.pk)
        self.assertTrue(
            re.search(self.edit_fields_rx % "char_1",
                      response.content.decode('utf8')))
        self.assertTrue(
            re.search(self.edit_fields_rx % "char_1%2Cchar_2",
                      response.content.decode('utf8')))

        with SettingsOverride(LANGUAGE_CODE="fr"):
            request = self.get_page_request(title.page,
                                            user,
                                            edit=True,
                                            lang_code="fr")
            response = detail_view_multi(request, exm.pk)
            self.assertContains(
                response,
                '<h1><span id="cms_placeholder-model-placeholderapp-%s-%s" class="cms_placeholder-generic">un</span></h1>'
                % (exm.pk, 'char_1'))
            self.assertContains(
                response,
                "/admin/placeholderapp/multilingualexample1/edit-field/%s/fr/"
                % exm.pk)
            self.assertTrue(
                re.search(self.edit_fields_rx % "char_1%2Cchar_2",
                          response.content.decode('utf8')))
Example #13
0
 def test_apphooks_receive_url_params(self):
     # make sure that urlparams actually reach the apphook views
     with SettingsOverride(ROOT_URLCONF='cms.test_utils.project.urls'):
         self.create_base_structure(APP_NAME, 'en')
         path = reverse(
             'sample-params',
             kwargs=dict(
                 my_params='is-my-param-really-in-the-context-QUESTIONMARK')
         )
         response = self.client.get(path)
         self.assertEquals(response.status_code, 200)
         self.assertTemplateUsed(response, 'sampleapp/home.html')
         self.assertContains(
             response,
             'my_params: is-my-param-really-in-the-context-QUESTIONMARK')
Example #14
0
 def test_detail_view_404_when_no_language_is_found(self):
     with SettingsOverride(TEMPLATE_CONTEXT_PROCESSORS=[],
                           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',
         )
         self.assertRaises(Http404, details, request, '')
Example #15
0
    def test_apphook_on_root_reverse(self):
        with SettingsOverride(ROOT_URLCONF='cms.test_utils.project.urls_for_apphook_tests'):
            apphook_pool.clear()
            superuser = get_user_model().objects.create_superuser('admin', '*****@*****.**', 'admin')
            page = create_page("apphooked-page", "nav_playground.html", "en",
                               created_by=superuser, published=True, apphook="SampleApp")
            create_title("de", "aphooked-page-de", page)
            self.assertTrue(page.publish('de'))
            self.assertTrue(page.publish('en'))

            self.reload_urls()

            self.assertFalse(reverse('sample-settings').startswith('//'))

            apphook_pool.clear()
Example #16
0
    def test_multiple_apphooks(self):
        # test for #1538
        with SettingsOverride(ROOT_URLCONF='cms.test_utils.project.third_urls_for_apphook_tests'):
            apphook_pool.clear()
            superuser = get_user_model().objects.create_superuser('admin', '*****@*****.**', 'admin')
            create_page("home", "nav_playground.html", "en", created_by=superuser, published=True, )
            create_page("apphook1-page", "nav_playground.html", "en",
                        created_by=superuser, published=True, apphook="SampleApp")
            create_page("apphook2-page", "nav_playground.html", "en",
                        created_by=superuser, published=True, apphook="SampleApp2")

            reverse('sample-root')
            reverse('sample2-root')

            apphook_pool.clear()
Example #17
0
    def test_get_child_page_for_apphook_with_instance_namespace(self):
        with SettingsOverride(ROOT_URLCONF='cms.test_utils.project.second_urls_for_apphook_tests'):
            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)
            apphook_pool.clear()
Example #18
0
    def setUp(self):
        self.assertEqual(Site.objects.all().count(), 1)
        with SettingsOverride(SITE_ID=1):
            u = self._create_user("test", True, True)

            # setup sites
            self.site2 = Site.objects.create(domain="sample2.com",
                                             name="sample2.com",
                                             pk=2)
            self.site3 = Site.objects.create(domain="sample3.com",
                                             name="sample3.com",
                                             pk=3)

        self._login_context = self.login_user_context(u)
        self._login_context.__enter__()
Example #19
0
 def test_existing_overwrite_url(self):
     with SettingsOverride(CMS_PERMISSION=False):
         create_page('home', 'nav_playground.html', 'en', published=True)
         create_page('boo', 'nav_playground.html', 'en', published=True)
         data = {
             'title': 'foo',
             'overwrite_url': '/boo/',
             'slug': 'foo',
             'language': 'en',
             'template': 'nav_playground.html',
             'site': 1,
         }
         form = PageForm(data)
         self.assertFalse(form.is_valid())
         self.assertTrue('overwrite_url' in form.errors)
Example #20
0
 def test_get_all_plugins_single_page(self):
     page = create_page('page', 'col_two.html', 'en')
     placeholder = page.placeholders.get(slot='col_left')
     conf = {
         'col_two': {
             'plugins': ['TextPlugin', 'LinkPlugin'],
         },
         'col_two.html col_left': {
             'plugins': ['LinkPlugin'],
         },
     }
     with SettingsOverride(CMS_PLACEHOLDER_CONF=conf):
         plugins = plugin_pool.get_all_plugins(placeholder, page)
         self.assertEqual(len(plugins), 1, plugins)
         self.assertEqual(plugins[0], LinkPlugin)
Example #21
0
 def test_uninstall_plugins_with_plugin(self):
     out = StringIO()
     apps = ["cms", "menus", "sekizai", "cms.test_utils.project.sampleapp"]
     with SettingsOverride(INSTALLED_APPS=apps):
         placeholder = Placeholder.objects.create(slot="test")
         add_plugin(placeholder, TextPlugin, "en", body="en body")
         self.assertEqual(
             CMSPlugin.objects.filter(plugin_type=PLUGIN).count(), 1)
         command = cms.Command()
         command.stdout = out
         command.handle("uninstall", "plugins", PLUGIN, interactive=False)
         self.assertEqual(out.getvalue(),
                          "1 'TextPlugin' plugins uninstalled\n")
         self.assertEqual(
             CMSPlugin.objects.filter(plugin_type=PLUGIN).count(), 0)
Example #22
0
    def test_plugins_non_default_language_fallback(self):
        """ Tests language_fallback placeholder configuration """
        page_en = create_page('page_en', 'col_two.html', 'en')
        create_title("de", "page_de", page_en)
        placeholder_en = page_en.placeholders.get(slot='col_left')
        placeholder_de = page_en.placeholders.get(slot='col_left')
        add_plugin(placeholder_de, TextPlugin, 'de', body='de body')

        class NoPushPopContext(Context):
            def push(self):
                pass

            pop = push

        context_en = NoPushPopContext()
        context_en['request'] = self.get_request(language="en", page=page_en)
        context_de = NoPushPopContext()
        context_de['request'] = self.get_request(language="de", page=page_en)

        # First test the default (non-fallback) behavior)
        ## Deutsch page should have the text plugin
        content_de = render_placeholder(placeholder_en, context_de)
        self.assertRegexpMatches(content_de, "^de body$")
        del(placeholder_en._plugins_cache)
        cache.clear()
        ## English page should have no text
        content_en = render_placeholder(placeholder_en, context_en)
        self.assertNotRegex(content_en, "^de body$")
        self.assertEqual(len(content_en), 0)
        del(placeholder_en._plugins_cache)
        cache.clear()
        conf = {
            'col_left': {
                'language_fallback': True,
            },
        }
        with SettingsOverride(CMS_PLACEHOLDER_CONF=conf):
            ## English page should have deutsch text
            content_en = render_placeholder(placeholder_en, context_en)
            self.assertRegexpMatches(content_en, "^de body$")

            # remove the cached plugins instances
            del(placeholder_en._plugins_cache)
            cache.clear()
            # Then we add a plugin to check for proper rendering
            add_plugin(placeholder_en, TextPlugin, 'en', body='en body')
            content_en = render_placeholder(placeholder_en, context_en)
            self.assertRegexpMatches(content_en, "^en body$")
Example #23
0
 def test_page_language_url(self):
     with SettingsOverride(
             ROOT_URLCONF='cms.test_utils.project.urls_no18n'):
         page1 = create_page("home",
                             template="col_two.html",
                             language="en-us",
                             published=True)
         path = "/"
         context = self.get_context(path=path)
         del context['request'].LANGUAGE_CODE
         context['request'].urlconf = "cms.test_utils.project.urls_no18n"
         tpl = Template(
             "{%% load menu_tags %%}{%% page_language_url '%s' %%}" %
             "en-us")
         url = tpl.render(context)
         self.assertEqual(url, "%s" % path)
Example #24
0
 def test_toolbar_current_app_apphook_with_implicit_current_app(self):
     with SettingsOverride(
             ROOT_URLCONF=
             'cms.test_utils.project.second_urls_for_apphook_tests'):
         en_title = self.create_base_structure(
             NS_APP_NAME, 'en', 'namespaced_app_ns')  # nopyflakes
         with force_language("en"):
             path = reverse('namespaced_app_ns:current-app')
         request = self.get_request(path)
         toolbar = CMSToolbar(request)
         self.assertTrue(toolbar.toolbars[
             'cms.test_utils.project.sampleapp.cms_toolbar.CategoryToolbar']
                         .is_current_app)
         self.assertFalse(toolbar.toolbars[
             'cms.test_utils.project.extensionapp.cms_toolbar.MyTitleExtensionToolbar']
                          .is_current_app)
Example #25
0
 def test_cached_show_placeholder_sekizai(self):
     from django.core.cache import cache;cache.clear()
     from cms.test_utils import project
     template_dir = os.path.join(os.path.dirname(project.__file__), 'templates', 'alt_plugin_templates', 'show_placeholder')
     page = create_page('Test', 'col_two.html', 'en')
     placeholder = page.placeholders.all()[0]
     add_plugin(placeholder, TextPlugin, 'en', body='HIDDEN')
     request = RequestFactory().get('/')
     with SettingsOverride(TEMPLATE_DIRS=[template_dir]):
         template = Template("{% load cms_tags sekizai_tags %}{% show_placeholder slot page 'en' 1 %}{% render_block 'js' %}")
         context = RequestContext(request, {'page': page, 'slot': placeholder.slot})
         output = template.render(context)
         self.assertIn('JAVASCRIPT', output)
         context = RequestContext(request, {'page': page, 'slot': placeholder.slot})
         output = template.render(context)
         self.assertIn('JAVASCRIPT', output)
Example #26
0
 def test_placeholder_context_leaking(self):
     TEST_CONF = {'test': {'extra_context': {'width': 10}}}
     ph = Placeholder.objects.create(slot='test')
     class NoPushPopContext(Context):
         def push(self):
             pass
         pop = push
     context = NoPushPopContext()
     context['request'] = self.get_request()
     with SettingsOverride(CMS_PLACEHOLDER_CONF=TEST_CONF):
         render_placeholder(ph, context)
         self.assertTrue('width' in context)
         self.assertEqual(context['width'], 10)
         ph.render(context, None)
         self.assertTrue('width' in context)
         self.assertEqual(context['width'], 10)
Example #27
0
 def test_get_all_plugins_inherit(self):
     parent = create_page('parent', 'col_two.html', 'en')
     page = create_page('page', constants.TEMPLATE_INHERITANCE_MAGIC, 'en', parent=parent)
     placeholder = page.placeholders.get(slot='col_left')
     conf = {
         'col_two': {
             'plugins': ['TextPlugin', 'LinkPlugin'],
         },
         'col_two.html col_left': {
             'plugins': ['LinkPlugin'],
         },
     }
     with SettingsOverride(CMS_PLACEHOLDER_CONF=conf):
         plugins = plugin_pool.get_all_plugins(placeholder, page)
         self.assertEqual(len(plugins), 1, plugins)
         self.assertEqual(plugins[0], LinkPlugin)
Example #28
0
    def test_default_language_changer_with_implicit_current_app(self):
        with SettingsOverride(ROOT_URLCONF='cms.test_utils.project.second_urls_for_apphook_tests'):
            titles = self.create_base_structure(NS_APP_NAME, ['en', 'de'], 'namespaced_app_ns')  # nopyflakes
            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'))

            apphook_pool.clear()
Example #29
0
    def test_cms_templates_length(self):
        '''
        Ensure that the correct exception is raised when CMS_TEMPLATES is
        configured with an empty tuple or the magic value 'INHERIT'
        '''
        improperly_configured_template_tests = (
            # don't allow 0 length
            (),

            # don't allow length of 1 if the only value is the magic inheritance
            (
                (CMS_TEMPLATE_INHERITANCE_MAGIC, None), ),
        )
        for value_to_test in improperly_configured_template_tests:
            with SettingsOverride(DEBUG=True, CMS_TEMPLATES=value_to_test):
                self.assertRaises(ImproperlyConfigured, post_patch_check)
Example #30
0
    def test_multilingual_middleware_get_lang_from_request(self):

        middle = MultilingualURLMiddleware()

        FRENCH = 'fr'
        ELVISH = 'x-elvish'

        with SettingsOverride(CMS_LANGUAGES=((FRENCH, 'French'), ("it",
                                                                  "Italian")),
                              CMS_FRONTEND_LANGUAGES=(FRENCH, )):
            request = AttributeObject(
                session={},
                path_info='/it/whatever',
                path='/it/whatever',
                COOKIES={},
                META={},
            )
            result = middle.get_language_from_request(request)
            self.assertEqual(result, 'en')  #falls back to default

            request = AttributeObject(
                session={
                    'django_language': FRENCH,
                },
                path_info='whatever',
                path='whatever',
                COOKIES={},
                META={},
            )
            result = middle.get_language_from_request(request)
            self.assertEqual(result, FRENCH)  # the session's language.

            request = AttributeObject(
                path_info='whatever',
                path='whatever',
                COOKIES={
                    'django_language': FRENCH,
                },
                META={},
            )
            result = middle.get_language_from_request(request)
            self.assertEqual(result, FRENCH)  # the cookies language.

            # Now the following should revert to the default language (en)
            request.COOKIES['django_language'] = ELVISH
            result = middle.get_language_from_request(request)
            self.assertEqual(result, 'en')  # The default