Source code for permission.tests.test_backends

# coding=utf-8
"""
"""
__author__ = 'Alisue <lambdalisue@hashnote.net>'
from django.test import TestCase
from django.core.exceptions import ObjectDoesNotExist
from permission.tests.utils import create_user
from permission.tests.utils import create_article
from permission.tests.models import Article
from permission.tests.compatibility import MagicMock
from permission.tests.compatibility import override_settings
from permission.backends import PermissionBackend
from permission.utils.handlers import registry

@override_settings(
    AUTHENTICATION_BACKENDS=(
        'django.contrib.auth.backends.ModelBackend',
        'permission.backends.PermissionBackend',
    ),
)
[docs]class PermissionPermissionBackendTestCase(TestCase):
[docs] def setUp(self): 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') self.original_get_handlers = registry.get_handlers
[docs] def tearDown(self): registry.get_handlers = self.original_get_handlers
[docs] def test_constructor(self): backend = PermissionBackend()
[docs] def test_authenticate(self): backend = PermissionBackend() self.assertEqual(backend.authenticate(None, None), None)
[docs] def test_has_perm_without_obj(self): perms = [ 'permission.add_article', 'permission.change_article', 'permission.delete_article', ] registry.get_handlers = MagicMock(return_value=[ MagicMock(get_supported_permissions=MagicMock(return_value=perms), has_perm=MagicMock(return_value=False)), MagicMock(get_supported_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_supported_permissions.called) self.assertFalse(registry.get_handlers()[1].get_supported_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.assertTrue(registry.get_handlers.called) self.assertTrue(registry.get_handlers()[0].get_supported_permissions.called) self.assertTrue(registry.get_handlers()[1].get_supported_permissions.called) self.assertTrue(registry.get_handlers()[0].has_perm.called) self.assertTrue(registry.get_handlers()[1].has_perm.called)
[docs] 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_supported_permissions=MagicMock(return_value=perms), has_perm=MagicMock(return_value=False)), MagicMock(get_supported_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_supported_permissions.called) self.assertFalse(registry.get_handlers()[1].get_supported_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_supported_permissions.called) self.assertTrue(registry.get_handlers()[1].get_supported_permissions.called) self.assertTrue(registry.get_handlers()[0].has_perm.called) self.assertTrue(registry.get_handlers()[1].has_perm.called)
@override_settings( PERMISSION_CHECK_PERMISSION_PRESENCE=False, )
[docs] 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'))
@override_settings( PERMISSION_CHECK_PERMISSION_PRESENCE=True, )
[docs] def test_has_perm_with_nil_permission_raise(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.assertRaises(ObjectDoesNotExist, backend.has_perm, None, 'permissions.nil_permission')
@override_settings( PERMISSION_CHECK_PERMISSION_PRESENCE=False, AUTHENTICATION_BACKENDS = ( 'django.contrib.auth.backends.ModelBackend', 'permission.backends.PermissionBackend', ), )
[docs] def test_has_perm_with_nil_permission_with_user(self): self.assertFalse(self.user.has_perm('permissions.nil_permission'))
@override_settings( PERMISSION_CHECK_PERMISSION_PRESENCE=True, AUTHENTICATION_BACKENDS = ( 'django.contrib.auth.backends.ModelBackend', 'permission.backends.PermissionBackend', ), )
[docs] def test_has_perm_with_nil_permission_raise_with_user(self): self.assertRaises(ObjectDoesNotExist, self.user.has_perm, 'permissions.nil_permission')
[docs] 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)