Example #1
0
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
Example #2
0
 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 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)
Example #4
0
def create_mock_model():
    instance = MagicMock()
    model = MagicMock(name='MockModel')
    model.__bases__ = (type,)
    model.__class__ = type
    model._meta = MagicMock(**{
            'abstract': False,
        })
    return model
Example #5
0
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
Example #6
0
 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')
Example #7
0
    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)
Example #8
0
    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)
Example #9
0
    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)
Example #10
0
 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))
Example #11
0
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
Example #12
0
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
Example #13
0
def create_mock_model():
    instance = MagicMock()
    model = MagicMock(name='MockModel')
    model.__bases__ = (type, )
    model.__class__ = type
    model._meta = MagicMock(**{
        'abstract': False,
    })
    return model
Example #14
0
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
Example #15
0
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
Example #16
0
    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)
Example #17
0
 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)
Example #18
0
    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'))
Example #19
0
 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)
Example #20
0
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
Example #21
0
 def setUp(self):
     self.registry = PermissionHandlerRegistry()
     self.model = MagicMock()
     self.model._meta = MagicMock()
     self.model._meta.abstract = False
     self.handler = PermissionHandler
Example #22
0
def create_mock_view_func():
    response = MagicMock(spec=HttpResponse)
    function = MagicMock(return_value=response)
    return function
Example #23
0
 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)
Example #24
0
 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)