def create_mock_class(name, base, instance=None): instance = instance or MagicMock() mock_class = MagicMock(name=name, return_value=instance) mock_class.__bases__ = (type, base) mock_class.__class__ = type return mock_class
def test_register_with_abstract_model(self): from django.core.exceptions import ImproperlyConfigured abstract_model = MagicMock() abstract_model._meta = MagicMock() abstract_model._meta.abstract = True self.assertRaises(ImproperlyConfigured, self.registry.register, abstract_model, self.handler)
def create_mock_model(): instance = MagicMock() model = MagicMock(name='MockModel') model.__bases__ = (type,) model.__class__ = type model._meta = MagicMock(**{ 'abstract': False, }) return model
def create_mock_request(mock_permission_handler): request = MagicMock(spec=HttpRequest) request.build_absolute_uri = MagicMock(return_value="/") request.META = MagicMock() request.user = MagicMock(**{ 'is_active.return_value': True, 'is_authenticated.return_value': True, 'has_perm.side_effect': mock_permission_handler.has_perm, }) return request
def setUp(self): self.mock_logic = MagicMock(spec=PermissionLogic) self.mock_logic2 = MagicMock(spec=PermissionLogic) # clear registry self.registry_backup = registry._registry registry._registry = {} # clear attributes if hasattr(Article, '_permission_logics'): delattr(Article, '_permission_logics') if hasattr(Article, '_permission_handler'): delattr(Article, '_permission_handler')
def setUp(self): self.handler = LogicalPermissionHandler self.user = create_user('john') self.perm1 = 'permission.add_article' self.perm2 = 'permission.change_article' self.perm3 = 'permission.delete_article' self.article = create_article('test') from permission.logics import PermissionLogic from permission import add_permission_logic self.mock_logic1 = MagicMock(spec=PermissionLogic) self.mock_logic1.has_perm = MagicMock(return_value=False) self.mock_logic2 = MagicMock(spec=PermissionLogic) self.mock_logic2.has_perm = MagicMock(return_value=False) add_permission_logic(Article, self.mock_logic1) add_permission_logic(Article, self.mock_logic2)
def test_has_module_perms(self): perms = [ 'permission.add_article', 'permission.change_article', 'permission.delete_article', ] app_labels = ['permission'] registry.get_handlers = MagicMock(return_value=[ MagicMock(get_supported_app_labels=MagicMock( return_value=app_labels), has_module_perms=MagicMock(return_value=False)), MagicMock(get_supported_app_labels=MagicMock( return_value=app_labels), has_module_perms=MagicMock(return_value=True)), ]) backend = PermissionBackend() self.assertFalse(registry.get_handlers.called) self.assertFalse( registry.get_handlers()[0].get_supported_app_labels.called) self.assertFalse( registry.get_handlers()[1].get_supported_app_labels.called) self.assertFalse(registry.get_handlers()[0].has_module_perms.called) self.assertFalse(registry.get_handlers()[1].has_module_perms.called) self.assertTrue(backend.has_module_perms(self.user, 'permission')) self.assertTrue(registry.get_handlers.called) self.assertTrue( registry.get_handlers()[0].get_supported_app_labels.called) self.assertTrue( registry.get_handlers()[1].get_supported_app_labels.called) self.assertTrue(registry.get_handlers()[0].has_module_perms.called) self.assertTrue(registry.get_handlers()[1].has_module_perms.called)
def test_has_perm_with_obj(self): perms = [ 'permission.add_article', 'permission.change_article', 'permission.delete_article', ] registry.get_handlers = MagicMock(return_value=[ MagicMock(get_permissions=MagicMock(return_value=perms), has_perm=MagicMock(return_value=False)), MagicMock(get_permissions=MagicMock(return_value=perms), has_perm=MagicMock(return_value=True)), ]) backend = PermissionBackend() self.assertFalse(registry.get_handlers.called) self.assertFalse(registry.get_handlers()[0].get_permissions.called) self.assertFalse(registry.get_handlers()[1].get_permissions.called) self.assertFalse(registry.get_handlers()[0].has_perm.called) self.assertFalse(registry.get_handlers()[1].has_perm.called) self.assertTrue(backend.has_perm(self.user, self.perm1, self.article)) self.assertTrue(registry.get_handlers.called) self.assertTrue(registry.get_handlers()[0].get_permissions.called) self.assertTrue(registry.get_handlers()[1].get_permissions.called) self.assertTrue(registry.get_handlers()[0].has_perm.called) self.assertTrue(registry.get_handlers()[1].has_perm.called)
def test_has_perm_non_related_permission(self): instance = self.handler(Article) instance.get_permissions = MagicMock(return_value=[ 'permission.add_article', 'permission.change_article', 'permission.delete_article', ]) self.assertFalse(instance.has_perm(self.user, 'unknown')) self.assertFalse(instance.has_perm(self.user, 'unknown', self.article))
def create_mock_queryset(obj): from django.db.models.query import QuerySet from django.core.exceptions import ObjectDoesNotExist def get_side_effect(*args, **kwargs): if kwargs.get('pk', None) == 1: return obj if kwargs.get('title', None) == 'permission_test_article1': return obj if kwargs.get('title__exact', None) == 'permission_test_article1': return obj raise queryset.model.DoesNotEixst queryset = MagicMock(spec=QuerySet, **{ 'get.side_effect': get_side_effect, }) queryset.model = MagicMock() queryset.model.DoesNotEixst = ObjectDoesNotExist queryset.model._meta = MagicMock(object_name='MockQuerysetModel') return queryset
def create_mock_request(mock_permission_handler): request = MagicMock(spec=HttpRequest) request.build_absolute_uri = MagicMock(return_value="/") request.META = MagicMock() request.user = MagicMock( **{ 'is_active.return_value': True, 'is_authenticated.return_value': True, 'has_perm.side_effect': mock_permission_handler.has_perm, }) return request
def create_mock_model(): instance = MagicMock() model = MagicMock(name='MockModel') model.__bases__ = (type, ) model.__class__ = type model._meta = MagicMock(**{ 'abstract': False, }) return model
def create_mock_handler(): instance = MagicMock( **{ 'has_perm.return_value': False, 'get_permissions.return_value': [ 'permission.add_article', ], }) handler = create_mock_class('MockPermissionHandler', base=PermissionHandler, instance=instance) return handler
def test_with_get_queryset(self): # set object get_object = lambda x, y: y.get(*x.args, **x.kwargs) self.view_class.get_object = get_object self.view_class_exc.get_object = get_object self.view_class.get_queryset = MagicMock(return_value=self.queryset) self.view_class_exc.get_queryset = MagicMock( return_value=self.queryset) # has_perm always return False self.view_class.as_view()(self.request, pk=1) self.request.user.has_perm.assert_called_with( 'permission.add_article', obj=self.model_instance, ) self.handler.has_perm.assert_called_with( 'permission.add_article', obj=self.model_instance, ) self.assertFalse(self.view_func.called) self.assertRaises(PermissionDenied, self.view_class_exc.as_view(), self.request, pk=1) self.assertFalse(self.view_func.called) # has_perm always return True self.handler.has_perm.return_value = True self.view_class.as_view()(self.request, pk=1) self.request.user.has_perm.assert_called_with( 'permission.add_article', obj=self.model_instance, ) self.handler.has_perm.assert_called_with( 'permission.add_article', obj=self.model_instance, ) self.assertTrue(self.view_func.called)
def test_has_perm_permission_logics_called(self): instance = self.handler(Article) instance.get_permissions = MagicMock(return_value=[ 'permission.add_article', 'permission.change_article', 'permission.delete_article', ]) self.assertFalse(self.mock_logic1.has_perm.called) self.assertFalse(self.mock_logic2.has_perm.called) self.assertFalse(instance.has_perm(self.user, 'permission.add_article')) self.assertTrue(self.mock_logic1.has_perm.called) self.assertTrue(self.mock_logic2.has_perm.called)
def test_has_perm_with_nil_permission(self): perms = [ 'permission.add_article', 'permission.change_article', 'permission.delete_article', ] registry.get_handlers = MagicMock(return_value=[ MagicMock(get_permissions=MagicMock(return_value=perms), has_perm=MagicMock(return_value=False)), MagicMock(get_permissions=MagicMock(return_value=perms), has_perm=MagicMock(return_value=True)), ]) backend = PermissionBackend() self.assertFalse(backend.has_perm(None, 'permissions.nil_permission'))
def test_has_perm_permission_logics_called(self): instance = self.handler(Article) instance.get_supported_permissions = MagicMock(return_value=[ 'permission.add_article', 'permission.change_article', 'permission.delete_article', ]) self.assertFalse(self.mock_logic1.has_perm.called) self.assertFalse(self.mock_logic2.has_perm.called) self.assertFalse(instance.has_perm(self.user, 'permission.add_article')) self.assertTrue(self.mock_logic1.has_perm.called) self.assertTrue(self.mock_logic2.has_perm.called) self.assertEqual(self.mock_logic1.has_perm.call_count, 1) self.assertEqual(self.mock_logic2.has_perm.call_count, 1) # permission check should be cached thus `has_perm` should not be # called twice for same user instance self.assertFalse(instance.has_perm(self.user, 'permission.add_article')) self.assertEqual(self.mock_logic1.has_perm.call_count, 1) self.assertEqual(self.mock_logic2.has_perm.call_count, 1)
def setUp(self): self.registry = PermissionHandlerRegistry() self.model = MagicMock() self.model._meta = MagicMock() self.model._meta.abstract = False self.handler = PermissionHandler
def create_mock_view_func(): response = MagicMock(spec=HttpResponse) function = MagicMock(return_value=response) return function
def test_has_module_perms_fail(self): instance = self.handler(Article) user = MagicMock() user.has_perm.return_value = True self.assertFalse(instance.has_module_perms(user, 'unknown')) self.assertFalse(user.has_perm.called)
def test_has_module_perms_success(self): instance = self.handler(Article) user = MagicMock() user.has_perm.return_value = True self.assertTrue(instance.has_module_perms(user, 'permission')) self.assertTrue(user.has_perm.called)