def get_toolbar_for_page(page, user, edit=None, preview=None): """ This method is a helper to build a request to test the toolbar in different states for different users """ if edit is None: edit = random.choice([True, False]) if preview is None: preview = random.choice([True, False]) url = page.get_absolute_url() factory = RequestFactory() if edit: url = f"{url:s}?edit" else: url = f"{url:s}?edit_off" if preview: url = f"{url:s}&preview" request = factory.get(url) request.user = user request.current_page = page request.session = {} middleware = ToolbarMiddleware() middleware.process_request(request) # pylint: disable=no-member request.toolbar.get_left_items() return request.toolbar
def get_page_request(self, page, user, path=None, edit=False, lang='en'): """ Createds a GET request for the given page suitable for use the django CMS toolbar :param page: current page object :param user: current user :param path: path (if different from the current page path) :param edit: editing mode :param lang: request language :return: request """ from cms.middleware.toolbar import ToolbarMiddleware path = path or page and page.get_absolute_url() if edit: path += '?edit' request = RequestFactory().get(path) request.session = {} request.user = user request.LANGUAGE_CODE = lang if edit: request.GET = {'edit': None} else: request.GET = {'edit_off': None} request.current_page = page mid = ToolbarMiddleware() mid.process_request(request) return request
def _prepare_request(self, request, page, user, lang, use_middlewares, use_toolbar=False): request.current_page = SimpleLazyObject(lambda: page) if not user: if self._login_context: user = self._login_context.user else: user = AnonymousUser() request.user = user request.session = {} request.cookies = SimpleCookie() request.errors = StringIO() request.LANGUAGE_CODE = lang # Let's use middleware in case requested, otherwise just use CMS toolbar if needed if use_middlewares: handler = BaseHandler() handler.load_middleware() for middleware_method in handler._request_middleware: if middleware_method(request): raise Exception(u'Couldn\'t create request mock object -' u'request middleware returned a response') elif use_toolbar: from cms.middleware.toolbar import ToolbarMiddleware mid = ToolbarMiddleware() mid.process_request(request) return request
def get_page_request(self, page, user, path=None, edit=False, lang_code='en', disable=False): path = path or page and page.get_absolute_url() if edit: path += '?%s' % get_cms_setting('CMS_TOOLBAR_URL__EDIT_ON') request = RequestFactory().get(path) request.session = {} request.user = user request.LANGUAGE_CODE = lang_code request.GET = request.GET.copy() if edit: request.GET['edit'] = None else: request.GET['edit_off'] = None if disable: request.GET[get_cms_setting('CMS_TOOLBAR_URL__DISABLE')] = None request.current_page = page mid = ToolbarMiddleware() mid.process_request(request) if hasattr(request, 'toolbar'): request.toolbar.populate() return request
def get_toolbar_for_page(page, user, edit, preview): """ This method is a helper to build a request to test the toolbar in different states for different users """ url = page.get_absolute_url() factory = RequestFactory() if edit: url = "{:s}?edit".format(url) else: url = "{:s}?edit_off".format(url) if preview: url = "{:s}&preview".format(url) request = factory.get(url) request.user = user request.current_page = page request.session = {} middleware = ToolbarMiddleware() middleware.process_request(request) # pylint: disable=no-member request.toolbar.get_left_items() return request.toolbar
def _process_request_by_toolbar_middleware(self, request, obj=None): midleware = ToolbarMiddleware() midleware.process_request(request) if hasattr(request, 'toolbar'): if obj: request.toolbar.set_object(obj) request.toolbar.populate() request.resolver_match = resolve(request.path) request.toolbar.post_template_populate() return request
def _get_page_request(self, page, user): request = RequestFactory().get("/") request.session = {} request.user = user request.current_page = page mid = ToolbarMiddleware() mid.process_request(request) if hasattr(request, "toolbar"): request.toolbar.populate() return request
def test_get_page_by_pk_arg_edit_mode(self): control = self._getfirst() request = self.get_request('/') request.GET = {"edit": ''} user = self._create_user("admin", True, True) request.current_page = control request.user = user middleware = ToolbarMiddleware() middleware.process_request(request) page = _get_page_by_untyped_arg(control.pk, request, 1) self.assertEqual(page, control.publisher_draft)
def test_get_page_by_pk_arg_edit_mode(self): control = self._getfirst() request = self.get_request('/') request.GET = {"edit": ''} user = User(username="******", password="******", is_superuser=True, is_staff=True, is_active=True) user.save() request.current_page = control request.user = user middleware = ToolbarMiddleware() middleware.process_request(request) page = _get_page_by_untyped_arg(control.pk, request, 1) self.assertEqual(page, control.publisher_draft)
def get_page_request(page, user=None, path=None, edit=False, language='en'): path = path or page and page.get_absolute_url() if edit: path += '?edit' request = RequestFactory().get(path) request.session = {} request.user = user or AnonymousUser() request.LANGUAGE_CODE = language if edit: request.GET = {'edit': None} else: request.GET = {'edit_off': None} request.current_page = page mid = ToolbarMiddleware() mid.process_request(request) return request
def get_page_request(self, page, user, path=None, edit=False, lang_code="en"): path = path or page and page.get_absolute_url() if edit: path += "?edit" request = RequestFactory().get(path) request.session = {} request.user = user request.LANGUAGE_CODE = lang_code if edit: request.GET = {"edit": None} else: request.GET = {"edit_off": None} request.current_page = page mid = ToolbarMiddleware() mid.process_request(request) return request
def get_page_request(page, user): """ Helper method to get the current page request object :param page: A page object :param user: The user requesting the page request object :return: A page request object """ request = RequestFactory().get("/") request.session = {} request.user = user request.current_page = page mid = ToolbarMiddleware(request) mid.process_request(request) if hasattr(request, "toolbar"): request.toolbar.populate() return request
def get_page_request(self, page, user, path=None, edit=False, lang_code='en'): from cms.middleware.toolbar import ToolbarMiddleware path = path or page and page.get_absolute_url(lang_code) if edit: path += '?edit' request = RequestFactory().get(path) request.session = {} request.user = user request.LANGUAGE_CODE = lang_code if edit: request.GET = {'edit': None} else: request.GET = {'edit_off': None} request.current_page = page mid = ToolbarMiddleware() mid.process_request(request) return request
def setUp(self): self.create_request() self.user.is_staff = self.user.is_superuser = True self.user.save() self.client.force_login(self.user) self.request.current_page = create_page('foo', 'default.html', 'en', published=True) ToolbarMiddleware().process_request(self.request) self.toolbar = self.request.toolbar
def _prepare_request(self, request, page, user, lang, use_middlewares, use_toolbar=False, secure=False): from django.contrib.auth.models import AnonymousUser try: from importlib import import_module except ImportError: from django.utils.importlib import import_module engine = import_module(settings.SESSION_ENGINE) request.current_page = SimpleLazyObject(lambda: page) if not user: if self._login_context: user = self._login_context.user else: user = AnonymousUser() if user.is_authenticated(): session_key = user._meta.pk.value_to_string(user) else: session_key = 'session_key' request.user = user request._cached_user = user request.session = engine.SessionStore(session_key) if secure: request.environ['SERVER_PORT'] = str('443') request.environ['wsgi.url_scheme'] = str('https') request.cookies = SimpleCookie() request.errors = StringIO() request.LANGUAGE_CODE = lang if request.method == 'POST': request._dont_enforce_csrf_checks = True # Let's use middleware in case requested, otherwise just use CMS toolbar if needed if use_middlewares: handler = BaseHandler() handler.load_middleware() for middleware_method in handler._request_middleware: if middleware_method(request): raise Exception('Couldn\'t create request mock object -' 'request middleware returned a response') elif use_toolbar: from cms.middleware.toolbar import ToolbarMiddleware mid = ToolbarMiddleware() mid.process_request(request) return request
def _prepare_request(self, request, page, user, lang, use_middlewares, use_toolbar=False, secure=False): from django.contrib.auth.models import AnonymousUser from importlib import import_module engine = import_module(settings.SESSION_ENGINE) request.current_page = SimpleLazyObject(lambda: page) if not user: if self._login_context: user = self._login_context.user else: user = AnonymousUser() if user.is_authenticated: session_key = user._meta.pk.value_to_string(user) else: session_key = 'session_key' request.user = user request._cached_user = user request.session = engine.SessionStore(session_key) if secure: request.environ['SERVER_PORT'] = str('443') request.environ['wsgi.url_scheme'] = str('https') request.cookies = SimpleCookie() request.errors = StringIO() request.LANGUAGE_CODE = lang if request.method == 'POST': request._dont_enforce_csrf_checks = True # Let's use middleware in case requested, otherwise just use CMS toolbar if needed if use_middlewares: self._apply_middlewares(request) elif use_toolbar: from cms.middleware.toolbar import ToolbarMiddleware mid = ToolbarMiddleware() mid.process_request(request) return request
def _prepare_request(self, request, page, user, lang, use_middlewares, use_toolbar=False, secure=False): from django.contrib.auth.models import AnonymousUser request.current_page = SimpleLazyObject(lambda: page) if not user: if self._login_context: user = self._login_context.user else: user = AnonymousUser() request.user = user request._cached_user = user request.session = {} if secure: request.environ['SERVER_PORT'] = str('443') request.environ['wsgi.url_scheme'] = str('https') if user.is_authenticated(): request.session[SESSION_KEY] = user._meta.pk.value_to_string(user) request.cookies = SimpleCookie() request.errors = StringIO() request.LANGUAGE_CODE = lang if request.method == 'POST': request._dont_enforce_csrf_checks = True # Let's use middleware in case requested, otherwise just use CMS toolbar if needed if use_middlewares: handler = BaseHandler() handler.load_middleware() for middleware_method in handler._request_middleware: if middleware_method(request): raise Exception('Couldn\'t create request mock object -' 'request middleware returned a response') elif use_toolbar: from cms.middleware.toolbar import ToolbarMiddleware mid = ToolbarMiddleware() mid.process_request(request) return request
def get_request(self): page = create_page(u'page one', 'fullwidth.html', language='en') page.publish('en') path = page.get_absolute_url() admin_user = create_user('admin', '*****@*****.**', 'admin', is_staff=True, is_superuser=True) request = RequestFactory().get(path) request.current_page = page request.user = admin_user request.session = {} mid = ToolbarMiddleware() mid.process_request(request) return request
def get_page_request(self, page, user, path=None, edit=False, lang_code='en', disable=False): path = path or page and page.get_absolute_url() if edit: path += '?%s' % get_cms_setting('CMS_TOOLBAR_URL__EDIT_ON') request = RequestFactory().get(path) request.session = {} request.user = user request.LANGUAGE_CODE = lang_code if edit: request.GET = {'edit': None} else: request.GET = {'edit_off': None} if disable: request.GET[get_cms_setting('CMS_TOOLBAR_URL__DISABLE')] = None request.current_page = page mid = ToolbarMiddleware() mid.process_request(request) if hasattr(request, 'toolbar'): request.toolbar.populate() return request
def _prepare_request(self, request, page, user, lang, use_middlewares, use_toolbar=False, secure=False): from django.contrib.auth.models import AnonymousUser from importlib import import_module engine = import_module(settings.SESSION_ENGINE) request.current_page = SimpleLazyObject(lambda: page) if not user: if self._login_context: user = self._login_context.user else: user = AnonymousUser() if callable(user.is_authenticated): authenticated = user.is_authenticated() else: authenticated = user.is_authenticated if authenticated: session_key = user._meta.pk.value_to_string(user) else: session_key = 'session_key' request.user = user request._cached_user = user request.session = engine.SessionStore(session_key) if secure: request.environ['SERVER_PORT'] = str('443') request.environ['wsgi.url_scheme'] = str('https') request.cookies = SimpleCookie() request.errors = StringIO() request.LANGUAGE_CODE = lang if request.method == 'POST': request._dont_enforce_csrf_checks = True # Let's use middleware in case requested, otherwise just use CMS toolbar if needed if use_middlewares: self._apply_middlewares(request) elif use_toolbar: from cms.middleware.toolbar import ToolbarMiddleware mid = ToolbarMiddleware() mid.process_request(request) return request
def test_02_toolbar_middleware_show_toolbar(self): class Mock: pass middle = ToolbarMiddleware() request = Mock() response = Mock() # if request.is_ajax(): setattr(request, 'is_ajax', lambda: True) result = middle.show_toolbar(request, response) self.assertEqual(result, False) #if response.status_code != 200: setattr(request, 'is_ajax', lambda: False) setattr(response, 'status_code', 201) result = middle.show_toolbar(request, response) self.assertEqual(result, False) setattr(response, 'status_code', 200) #if not response['Content-Type'].split(';')[0] in HTML_TYPES: setattr(response, '__getitem__', lambda _: 'Whatever') result = middle.show_toolbar(request, response) self.assertEqual(result, False) setattr(response, '__getitem__', lambda _: 'text/html') #if is_media_request(request): setattr(request, 'path', '/media/') result = middle.show_toolbar(request, response) self.assertEqual(result, False) setattr(request, 'path', '') #if "edit" in request.GET: setattr(request, 'GET', ["edit"]) result = middle.show_toolbar(request, response) self.assertEqual(result, True) setattr(request, 'GET', []) #if not hasattr(request, "user"): result = middle.show_toolbar(request, response) self.assertEqual(result, False) setattr(request, 'user', 'test-user')
def setup_toolbar(self, page, user, is_edit_mode=True): page.set_publisher_state('en', state=PUBLISHER_STATE_DIRTY) # make page dirty if is_edit_mode: edit_mode = get_cms_setting('CMS_TOOLBAR_URL__EDIT_ON') else: edit_mode = get_cms_setting('CMS_TOOLBAR_URL__EDIT_OFF') request = RequestFactory().get('{}?{}'.format(page.get_absolute_url('en'), edit_mode)) request.current_page = page request.user = user request.session = self.client.session ToolbarMiddleware().process_request(request) self.toolbar = request.toolbar self.toolbar.populate() self.toolbar.post_template_populate() self.toolbar_left_items = self.toolbar.get_left_items() self.toolbar_right_items = self.toolbar.get_right_items()
def test_02_toolbar_middleware_show_toolbar(self): class Mock: pass middle = ToolbarMiddleware() request = Mock() response = Mock() # if request.is_ajax(): setattr(request,'is_ajax', lambda : True) result = middle.show_toolbar(request, response) self.assertEqual(result, False) #if response.status_code != 200: setattr(request,'is_ajax', lambda : False) setattr(response, 'status_code', 201) result = middle.show_toolbar(request, response) self.assertEqual(result, False) setattr(response, 'status_code', 200) #if not response['Content-Type'].split(';')[0] in HTML_TYPES: setattr(response, '__getitem__', lambda _: 'Whatever') result = middle.show_toolbar(request, response) self.assertEqual(result, False) setattr(response, '__getitem__', lambda _: 'text/html') #if is_media_request(request): setattr(request, 'path', '/media/') result = middle.show_toolbar(request, response) self.assertEqual(result, False) setattr(request, 'path', '') #if "edit" in request.GET: setattr(request, 'GET', ["edit"]) result = middle.show_toolbar(request, response) self.assertEqual(result, True) setattr(request, 'GET', []) #if not hasattr(request, "user"): result = middle.show_toolbar(request, response) self.assertEqual(result, False) setattr(request, 'user', 'test-user')