class Fixture(object): # pragma: no cover DB_OVERRIDE = { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': ':memory:' } def __init__(self, name, apps=['cms'], **settings_overrides): self.name = name self.apps = apps self.settings_overrides = settings_overrides def start(self): self.so = SettingsOverride(**self.settings_overrides) self.so.__enter__() self.old_db = connections.databases['default'] connections.databases['default'] = self.DB_OVERRIDE if 'default' in connections._connections: del connections._connections['default'] call_command('syncdb', migrate_all=True, interactive=False, verbosity=0) def save(self): filename = os.path.join(settings.FIXTURE_DIRS[0], self.name) with open(filename, 'wb') as fobj: call_command('dumpdata', *self.apps, stdout=fobj) self.so.__exit__(None, None, None) connections.databases['default'] = self.old_db if 'default' in connections._connections: del connections._connections['default']
class NoAdminPageTests(CMSTestCase): urls = 'cms.test_utils.project.noadmin_urls' def setUp(self): admin = 'django.contrib.admin' noadmin_apps = [app for app in settings.INSTALLED_APPS if not app == admin] self._ctx = SettingsOverride(INSTALLED_APPS=noadmin_apps) self._ctx.__enter__() def tearDown(self): self._ctx.__exit__(None, None, None) def test_get_page_from_request_fakeadmin_nopage(self): request = self.get_request('/en/admin/') page = get_page_from_request(request) self.assertEqual(page, None)
class SettingsOverrideTestCase(CMSTestCase): settings_overrides = {} def _pre_setup(self): self._enter_settings_override() super(SettingsOverrideTestCase, self)._pre_setup() def _enter_settings_override(self): self._settings_ctx_manager = SettingsOverride(**self.settings_overrides) self._settings_ctx_manager.__enter__() def _post_teardown(self): super(SettingsOverrideTestCase, self)._post_teardown() self._exit_settings_override() def _exit_settings_override(self): self._settings_ctx_manager.__exit__(None, None, None)
def start(self): self.so = SettingsOverride(**self.settings_overrides) self.so.__enter__() self.old_db = connections.databases['default'] connections.databases['default'] = self.DB_OVERRIDE if 'default' in connections._connections: del connections._connections['default'] call_command('syncdb', migrate_all=True, interactive=False, verbosity=0)
def setUp(self): admin = 'django.contrib.admin' noadmin_apps = [app for app in installed_apps() if not app == admin] try: from django.apps import apps apps.set_installed_apps(noadmin_apps) except ImportError: self._ctx = SettingsOverride(INSTALLED_APPS=noadmin_apps) self._ctx.__enter__()
def test_page_permissions_view_groups(self): with SettingsOverride(CMS_PUBLIC_FOR='staff'): user = User.objects.create_user('user', '*****@*****.**', 'user') group = Group.objects.create(name='testgroup') group.user_set.add(user) request = self.get_request(user) page = create_page('A', 'nav_playground.html', 'en') PagePermission.objects.create(can_view=True, group=group, page=page) self.assertTrue(page.has_view_permission(request))
def test_authed_basic_perm(self): with SettingsOverride(CMS_PUBLIC_FOR='staff'): user = User.objects.create_user('user', '*****@*****.**', 'user') user.user_permissions.add( Permission.objects.get(codename='view_page')) request = self.get_request(user) page = Page() page.pk = 1 page.level = 0 page.tree_id = 1 self.assertTrue(page.has_view_permission(request))
def test_publish_limit(self): with self.login_user_context(User.objects.get(username="******")): with SettingsOverride(CMS_MAX_PAGE_PUBLISH_REVERSIONS=5): page = Page.objects.all()[0] page_pk = page.pk self.assertEquals(Revision.objects.all().count(), 5) for x in range(10): publish_url = URL_CMS_PAGE + "%s/publish/" % page_pk response = self.client.get(publish_url) self.assertEquals(response.status_code, 302) self.assertEqual(Revision.objects.all().count(), 6)
def test_toolbar_template_change_permission(self): with SettingsOverride(CMS_PERMISSIONS=True): page = create_page('test', 'nav_playground.html', 'en', published=True) request = self.request_factory.get(page.get_absolute_url()) request.user = self.get_staff() request.current_page = page SessionMiddleware().process_request(request) request.session = {} toolbar = CMSToolbar(request) items = toolbar.get_items({}) self.assertEqual([item for item in items if item.css_class_suffix == 'templates'], [])
def test_apphook_urlpattern_order(self): # this one includes the actual cms.urls, so it can be tested if # they are loaded in the correct order (the cms page pattern must be last) # (the other testcases replicate the inclusion code and thus don't test this) with SettingsOverride(ROOT_URLCONF='cms.test_utils.project.urls'): 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")
def test_apphook_include_extra_parameters(self): with SettingsOverride(ROOT_URLCONF='cms.test_utils.project.second_urls_for_apphook_tests'): 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')
def test_collectstatic_with_cached_static_files_storage(self): # CachedStaticFilesStorage requires that the CSS files # don't contain any broken links. with TemporaryDirectory() as tmpdir: with SettingsOverride( STATIC_ROOT=tmpdir, STATICFILES_STORAGE= 'django.contrib.staticfiles.storage.CachedStaticFilesStorage' ): with StdoutOverride(): management.call_command('collectstatic', interactive=False)
def test_publish_wrong_lang(self): page = self.create_page("test_admin", published=False) superuser = self.get_superuser() with SettingsOverride( 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.get(reverse("admin:cms_page_publish_page", args=[page.pk, 'en'])) self.assertEqual(response.status_code, 302) page = Page.objects.get(pk=page.pk)
def test_get_site_choices_without_moderator_with_superuser(self): with SettingsOverride(CMS_MODERATOR=False): # boilerplate (creating a page) user_super = User(username="******", is_staff=True, is_active=True, is_superuser=True) user_super.set_password("super") user_super.save() with self.login_user_context(user_super): create_page("home", "nav_playground.html", "en", created_by=user_super) # The proper test result = get_site_choices() self.assertEquals(result, [(1,'example.com')])
def test_home_slug_not_accessible(self): with SettingsOverride(CMS_PERMISSION=False): page = create_page('page', 'nav_playground.html', 'en', published=True) self.assertEqual(page.get_absolute_url('en'), '/en/') resp = self.client.get('/en/') self.assertEqual(resp.status_code, HttpResponse.status_code) resp = self.client.get('/en/page/') self.assertEqual(resp.status_code, HttpResponseNotFound.status_code)
def create_fixtures(self): defaults = { 'template': 'nav_playground.html', 'published': True, 'in_navigation': True, } with SettingsOverride(CMS_MODERATOR=False, 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_site_framework(self): #Test the site framework, and test if it's possible to disable it with SettingsOverride(SITE_ID=self.site2.pk): create_page("page_2a", "nav_playground.html", "en", site=self.site2) response = self.client.get("/admin/cms/page/?site__exact=%s" % self.site3.pk) self.assertEqual(response.status_code, 200) create_page("page_3b", "nav_playground.html", "en", site=self.site3) with SettingsOverride(SITE_ID=self.site3.pk): create_page("page_3a", "nav_playground.html", "en", site=self.site3) # with param self.assertEqual(Page.objects.on_site(self.site2.pk).count(), 1) self.assertEqual(Page.objects.on_site(self.site3.pk).count(), 2) self.assertEqual(Page.objects.drafts().on_site().count(), 2) with SettingsOverride(SITE_ID=self.site2.pk): # without param self.assertEqual(Page.objects.drafts().on_site().count(), 1)
def test_show_placeholder_for_page_placeholder_does_not_exist(self): """ Verify ``show_placeholder`` correctly handles being given an invalid identifier. """ User = get_user_model() with SettingsOverride(DEBUG=True): request = HttpRequest() request.REQUEST = {} request.session = {} request.user = User() self.assertRaises(Placeholder.DoesNotExist, _show_placeholder_for_page, RequestContext(request), 'does_not_exist', 'myreverseid') with SettingsOverride(DEBUG=False): content = _show_placeholder_for_page(RequestContext(request), 'does_not_exist', 'myreverseid') self.assertEqual(content['content'], '')
def test_untranslated_language_url(self): """ Tests page_language_url templatetag behavior when used on a page without the requested translation, both when CMS_HIDE_UNTRANSLATED is True and False. When True it should return the root page URL if the current page is untranslated (PR #1125) """ page_1 = create_page('Page 1', 'nav_playground.html', 'en', published=True, in_navigation=True, reverse_id='page1') create_title("de", "Seite 1", page_1, slug="seite-1") page_2 = create_page('Page 2', 'nav_playground.html', 'en', page_1, published=True, in_navigation=True, reverse_id='page2') create_title("de", "Seite 2", page_2, slug="seite-2") page_3 = create_page('Page 3', 'nav_playground.html', 'en', page_2, published=True, in_navigation=True, reverse_id='page3') tpl = Template("{% load menu_tags %}{% page_language_url 'de' %}") # Default configuration has CMS_HIDE_UNTRANSLATED=False context = self.get_context(page_2.get_absolute_url()) context['request'].current_page = page_2 res = tpl.render(context) self.assertEqual(res, "/de/seite-2/") context = self.get_context(page_3.get_absolute_url()) context['request'].current_page = page_3 res = tpl.render(context) self.assertEqual(res, "") with SettingsOverride(CMS_HIDE_UNTRANSLATED=True): context = self.get_context(page_2.get_absolute_url()) context['request'].current_page = page_2 res = tpl.render(context) self.assertEqual(res, "/de/seite-2/") context = self.get_context(page_3.get_absolute_url()) context['request'].current_page = page_3 res = tpl.render(context) self.assertEqual(res, "/de/")
def test_handle_no_page(self): """ Test handle nopage correctly works with DEBUG=True """ request = self.get_request('/') slug = '' self.assertRaises(Http404, _handle_no_page, request, slug) with SettingsOverride(DEBUG=True): request = self.get_request('/en/') slug = '' response = _handle_no_page(request, slug) self.assertEqual(response.status_code, 200)
def test_template_change_permission(self): with SettingsOverride(CMS_PERMISSIONS=True): page = create_page('test', 'nav_playground.html', 'en', published=True) request = self.get_page_request(page, self.get_nonstaff()) toolbar = CMSToolbar(request) items = toolbar.get_left_items() + toolbar.get_right_items() self.assertEqual([ item for item in items if item.css_class_suffix == 'templates' ], [])
def test_authed_basic_perm(self): with SettingsOverride(CMS_PUBLIC_FOR='staff'): user = User.objects.create_user('user', '*****@*****.**', 'user') user.user_permissions.add(Permission.objects.get(codename='view_page')) request = self.get_request(user) page = Page() page.pk = 1 page.level = 0 page.tree_id = 1 pages = [page] result = get_visible_pages(request, pages) self.assertEqual(result, [1])
def test_login_required(self): create_page("page", "nav_playground.html", "en", published=True, login_required=True) request = self.get_request('/') response = details(request, '') self.assertEqual(response.status_code, 302) self.assertEqual(response['Location'], '%s?next=/en/' % settings.LOGIN_URL) with SettingsOverride(i18n_installed=False): request = self.get_request('/') response = details(request, '') self.assertEqual(response.status_code, 302) self.assertEqual(response['Location'], '%s?next=/' % settings.LOGIN_URL)
def test_uninstall_plugins_with_plugin(self): out = StringIO() apps = ["cms", "menus", "sekizai", "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_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_global_permission(self): with SettingsOverride(CMS_PUBLIC_FOR='staff'): user = User.objects.create_user('user', '*****@*****.**', 'user') GlobalPagePermission.objects.create(can_view=True, user=user) request = self.get_request(user) page = Page() page.pk = 1 page.level = 0 page.tree_id = 1 pages = [page] result = get_visible_pages(request, pages) self.assertEqual(result, [1])
def test_plugins_children_prepopulate(self): """ Validate a default textplugin with a nested default link plugin """ class NoPushPopContext(Context): def push(self): pass pop = push conf = { 'col_left': { 'default_plugins': [ { 'plugin_type': 'TextPlugin', 'values': { 'body': '<p>body %(_tag_child_1)s and %(_tag_child_2)s</p>' }, 'children': [ { 'plugin_type': 'LinkPlugin', 'values': { 'name': 'django', 'url': 'https://www.djangoproject.com/' }, }, { 'plugin_type': 'LinkPlugin', 'values': { 'name': 'django-cms', 'url': 'https://www.django-cms.org' }, }, ] }, ] }, } with SettingsOverride(CMS_PLACEHOLDER_CONF=conf): page = create_page('page_en', 'col_two.html', 'en') placeholder = page.placeholders.get(slot='col_left') context = NoPushPopContext() context['request'] = self.get_request(language="en", page=page) render_placeholder(placeholder, context) plugins = placeholder.get_plugins_list() self.assertEqual(len(plugins), 3) self.assertEqual(plugins[0].plugin_type, 'TextPlugin') self.assertEqual(plugins[1].plugin_type, 'LinkPlugin') self.assertEqual(plugins[2].plugin_type, 'LinkPlugin') self.assertTrue(plugins[1].parent == plugins[2].parent and plugins[1].parent == plugins[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 SettingsOverride(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 SettingsOverride(CMS_LANGUAGES=lang_settings): response = self.client.get("/de/") self.assertEqual(response.status_code, 302)
def test_show_breadcrumb(self): with SettingsOverride(CMS_MODERATOR=False): page2 = Page.objects.get(pk=self.page2.pk) context = self.get_context(path=self.page2.get_absolute_url()) tpl = Template("{% load menu_tags %}{% show_breadcrumb %}") tpl.render(context) nodes = context['ancestors'] self.assertEqual(nodes[0].get_absolute_url(), self.get_pages_root()) self.assertEqual(nodes[0].get_absolute_url(), "/content/") self.assertEqual(isinstance(nodes[0], NavigationNode), True) self.assertEqual(nodes[1].get_absolute_url(), page2.get_absolute_url())
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.assertEqual(toolbar.toolbars['cms.test_utils.project.sampleapp.cms_toolbar.CategoryToolbar'].app_path, 'cms.test_utils.project.sampleapp') self.assertTrue(toolbar.toolbars['cms.test_utils.project.sampleapp.cms_toolbar.CategoryToolbar'].is_current_app) self.assertEqual(toolbar.toolbars['cms.test_utils.project.extensionapp.cms_toolbar.MyTitleExtensionToolbar'].app_path, 'cms.test_utils.project.sampleapp') self.assertFalse(toolbar.toolbars['cms.test_utils.project.extensionapp.cms_toolbar.MyTitleExtensionToolbar'].is_current_app)
def setUp(self): with SettingsOverride(SITE_ID=1): u = User(username="******", is_staff = True, is_active = True, is_superuser = True) u.set_password("test") u.save() # setup sites self.site2 = Site.objects.create(domain="sample2.com", name="sample2.com") self.site3 = Site.objects.create(domain="sample3.com", name="sample3.com") self._login_context = self.login_user_context(u) self._login_context.__enter__()
def test_slug_collisions_api_2(self): """ Checks for slug collisions on root (not home) page and a home page child - uses API to create pages """ with SettingsOverride(CMS_MODERATOR=False): page1 = create_page('test page 1', 'nav_playground.html', 'en', published=True) page1_1 = create_page('test page 1_1', 'nav_playground.html', 'en', published=True, parent=page1, slug="foo") page2 = create_page('test page 1_1', 'nav_playground.html', 'en', published=True, slug="foo") # Home page child has an invalid slug, while root page is ok. Root wins! self.assertFalse(is_valid_page_slug(page1_1,page1_1.parent,"en",page1_1.get_slug("en"),page1_1.site)) self.assertTrue(is_valid_page_slug(page2,page2.parent,"en",page2.get_slug("en"),page2.site))
def test_details_view(self): """ Tests that the `detail` view is working. """ with SettingsOverride(CMS_TEMPLATES=[(TEMPLATE_NAME, '')]): from cms.views import details response = details(self.get_request(self.test_page), '') response.render() r = self.strip_rendered(response.content.decode('utf8')) self.assertEqual( r, u'|' + self.test_data['text_main'] + u'|' + self.test_data['text_sub'] + u'|')
def test_apphook_breaking_under_home_with_new_path_caching(self): with SettingsOverride(CMS_PERMISSION=False, ROOT_URLCONF='cms.test_utils.project.urls_2'): home = create_page("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/')
def test_slug_collisions_api_1(self): """ Checks for slug collisions on sibling pages - uses API to create pages """ with SettingsOverride(CMS_MODERATOR=False): page1 = create_page('test page 1', 'nav_playground.html', 'en', published=True) page1_1 = create_page('test page 1_1', 'nav_playground.html', 'en', published=True, parent=page1, slug="foo") page1_2 = create_page('test page 1_2', 'nav_playground.html', 'en', published=True, parent=page1, slug="foo") # both sibling pages has same slug, so both pages has an invalid slug self.assertFalse(is_valid_page_slug(page1_1,page1_1.parent,"en",page1_1.get_slug("en"),page1_1.site)) self.assertFalse(is_valid_page_slug(page1_2,page1_2.parent,"en",page1_2.get_slug("en"),page1_2.site))
def _enter_settings_override(self): self._settings_ctx_manager = SettingsOverride(**self.settings_overrides) self._settings_ctx_manager.__enter__()
def setUp(self): admin = 'django.contrib.admin' noadmin_apps = [app for app in settings.INSTALLED_APPS if not app == admin] self._ctx = SettingsOverride(INSTALLED_APPS=noadmin_apps) self._ctx.__enter__()