Source code for permission.tests.test_decorators.test_permission_required

# coding=utf-8
"""
"""
__author__ = 'Alisue <lambdalisue@hashnote.net>'
import django
from django.test import TestCase
from django.http import HttpRequest
from django.core.exceptions import PermissionDenied
from permission.utils.handlers import registry
from permission.tests.compatibility import skipIf
from permission.tests.compatibility import MagicMock
from permission.tests.test_decorators.utils import create_mock_handler
from permission.tests.test_decorators.utils import create_mock_request
from permission.tests.test_decorators.utils import create_mock_queryset
from permission.tests.test_decorators.utils import create_mock_model
from permission.tests.test_decorators.utils import create_mock_view_func
from permission.tests.test_decorators.utils import create_mock_view_class

from permission.decorators.functionbase import permission_required as f
from permission.decorators.methodbase import permission_required as m
from permission.decorators.classbase import permission_required as c
from permission.decorators import permission_required as p

p = p('permission.add_article')
c = c('permission.add_article')
m = m('permission.add_article')
f = f('permission.add_article')

model = create_mock_model()
instance = model()

[docs]def view_func(request, *args, **kwargs): assert isinstance(request, HttpRequest)
try: from django.views.generic import View as BaseView except ImportError: # classbase generic view related test will not be run so never mind. BaseView = object
[docs]class View(BaseView):
[docs] def dispatch(self, request, *args, **kwargs): assert isinstance(self, View) assert isinstance(request, HttpRequest)
[docs] def get_object(self, queryset=None): return instance
[docs]class PermissionDecoratorsTestCase(TestCase):
[docs] def setUp(self): self.handler = create_mock_handler() self.request = create_mock_request(self.handler) self.queryset = create_mock_queryset(instance) # store original registry self._original_registry = registry._registry # clear registry and register mock handler registry._registry = {} registry.register( model, self.handler, )
[docs] def tearDown(self): # restore original reigstry registry._registry = self._original_registry
[docs] def test_function_views(self): if django.VERSION >= (1, 3): # class decorator cannot handle self.assertRaises(AttributeError, c, view_func) # method decorator can handle method_view = m(view_func) method_view(self.request, self.queryset, object_id=1) # function decorator can handle function_view = f(view_func) function_view(self.request, self.queryset, object_id=1)
@skipIf( django.VERSION < (1, 3), 'Classbase generic view is not supported int his version')
[docs] def test_method_views(self): view_method = View.dispatch # class decorator cannot handle self.assertRaises(AttributeError, c, View.dispatch) # method decorator can handle method_view = m(View.dispatch) method_view(View(), self.request, pk=1) # function decorators cannot handle function_view = f(View.dispatch) self.assertRaises(AttributeError, function_view, View(), self.request, pk=1)
@skipIf( django.VERSION < (1, 3), 'Classbase generic view is not supported int his version')
[docs] def test_class_views(self): # class decorator can handle class_view = c(View) class_view.as_view()(self.request, pk=1) # method decorator cannot handle method_view = m(View) self.assertFalse(hasattr(method_view, 'as_view')) # function decorator cannot handle function_view = f(View) self.assertFalse(hasattr(method_view, 'as_view'))
@skipIf( django.VERSION < (1, 3), 'Classbase generic view is not supported int his version')
[docs] def test_permission_required(self): # function functional_view = p(view_func) functional_view(self.request, queryset=self.queryset, object_id=1) # method method_view = p(View.dispatch) method_view(View(), self.request, pk=1) # class class_view = p(View) class_view.as_view()(self.request, pk=1)