Esempio n. 1
0
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']
Esempio n. 2
0
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)
Esempio n. 3
0
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)
Esempio n. 4
0
 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)
Esempio n. 5
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__()
Esempio n. 6
0
 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))
Esempio n. 7
0
 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)
Esempio n. 9
0
 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'], [])
Esempio n. 10
0
 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")
Esempio n. 11
0
 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')
Esempio n. 12
0
 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)
Esempio n. 13
0
 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)
Esempio n. 14
0
 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')])
Esempio n. 15
0
 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)
Esempio n. 16
0
 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)
         
Esempio n. 17
0
 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)
Esempio n. 18
0
    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'], '')
Esempio n. 19
0
    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/")
Esempio n. 20
0
 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'
         ], [])
Esempio n. 22
0
 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])
Esempio n. 23
0
 def test_login_required(self):
     create_page("page", "nav_playground.html", "en", published=True,
                      login_required=True)
     request = self.get_request('/')
     response = details(request, '')
     self.assertEqual(response.status_code, 302)
     self.assertEqual(response['Location'], '%s?next=/en/' % settings.LOGIN_URL)
     with SettingsOverride(i18n_installed=False):
         request = self.get_request('/')
         response = details(request, '')
         self.assertEqual(response.status_code, 302)
         self.assertEqual(response['Location'], '%s?next=/' % settings.LOGIN_URL)
Esempio n. 24
0
 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)
Esempio n. 25
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()
Esempio n. 26
0
 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])
Esempio n. 27
0
    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])
Esempio n. 28
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)
Esempio n. 29
0
 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())
Esempio n. 30
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.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)
Esempio n. 31
0
 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__()
Esempio n. 32
0
 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))
Esempio n. 33
0
    def test_details_view(self):
        """
        Tests that the `detail` view is working.
        """
        with SettingsOverride(CMS_TEMPLATES=[(TEMPLATE_NAME, '')]):
            from cms.views import details

            response = details(self.get_request(self.test_page), '')
            response.render()
            r = self.strip_rendered(response.content.decode('utf8'))
            self.assertEqual(
                r, u'|' + self.test_data['text_main'] + u'|' +
                self.test_data['text_sub'] + u'|')
Esempio n. 34
0
 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/')
Esempio n. 35
0
 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))
Esempio n. 36
0
 def _enter_settings_override(self):
     self._settings_ctx_manager = SettingsOverride(**self.settings_overrides)
     self._settings_ctx_manager.__enter__()
Esempio n. 37
0
 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__()