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)
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
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')
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)
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")
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()
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()
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()
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)
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')))
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')
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, '')
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()
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()
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()
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__()
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)
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)
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)
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$")
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)
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)
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)
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)
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)
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()
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)
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