django-authority/authority/tests.py

178 lines
5.3 KiB
Python
Raw Normal View History

2009-11-02 11:33:04 +00:00
from django.test import TestCase
from django.contrib.auth.models import User
from django.contrib.auth.models import Permission as DjangoPermission
import authority
from authority import permissions
from authority.models import Permission
from authority.exceptions import NotAModel, UnsavedModelInstance
2009-11-02 11:33:04 +00:00
2012-09-20 15:55:38 +00:00
2009-11-02 11:33:04 +00:00
class UserPermission(permissions.BasePermission):
checks = ('browse',)
label = 'user_permission'
authority.register(User, UserPermission)
2012-09-20 15:55:38 +00:00
2009-11-02 11:33:04 +00:00
class BehaviourTest(TestCase):
2010-01-15 21:30:09 +00:00
"""
2009-11-02 11:33:04 +00:00
self.user will be given:
- django permission add_user (test_add)
- authority to delete_user which is him (test_delete)
This permissions are given in the test case and not in the fixture, for
later reference.
2010-01-15 21:30:09 +00:00
"""
2012-09-20 15:55:38 +00:00
fixtures = ['tests.json']
2009-11-02 11:33:04 +00:00
def setUp(self):
self.user = User.objects.get(username='jezdez')
self.check = UserPermission(self.user)
def test_no_permission(self):
self.assertFalse(self.check.add_user())
self.assertFalse(self.check.delete_user())
self.assertFalse(self.check.delete_user(self.user))
def test_add(self):
# setup
perm = DjangoPermission.objects.get(codename='add_user')
self.user.user_permissions.add(perm)
# test
self.assertTrue(self.check.add_user())
def test_delete(self):
perm = Permission(
user=self.user,
content_object=self.user,
codename='user_permission.delete_user',
approved=True
)
perm.save()
# test
self.assertFalse(self.check.delete_user())
self.assertTrue(self.check.delete_user(self.user))
2012-09-20 15:55:38 +00:00
class AssignBehaviourTest(TestCase):
2012-09-20 15:55:38 +00:00
"""
self.user will be given:
- permission add_user (test_add),
- permission delete_user for him (test_delete),
- all existing codenames permissions: a/b/c/d (test_all),
"""
fixtures = ['tests.json']
def setUp(self):
self.user = User.objects.get(username='jezdez')
self.check = UserPermission(self.user)
def test_add(self):
result = self.check.assign(check='add_user')
self.assertTrue(isinstance(result[0], DjangoPermission))
self.assertTrue(self.check.add_user())
def test_delete(self):
result = self.check.assign(
content_object=self.user,
check='delete_user',
)
self.assertTrue(isinstance(result[0], Permission))
self.assertFalse(self.check.delete_user())
self.assertTrue(self.check.delete_user(self.user))
def test_all(self):
result = self.check.assign(content_object=self.user)
self.assertTrue(isinstance(result, list))
self.assertTrue(self.check.browse_user(self.user))
self.assertTrue(self.check.delete_user(self.user))
self.assertTrue(self.check.add_user(self.user))
self.assertTrue(self.check.change_user(self.user))
class GenericAssignBehaviourTest(TestCase):
2010-01-15 21:30:09 +00:00
"""
self.user will be given:
- permission add (test_add),
- permission delete for him (test_delete),
2010-01-15 21:30:09 +00:00
"""
2012-09-20 15:55:38 +00:00
fixtures = ['tests.json']
2010-01-15 21:30:09 +00:00
def setUp(self):
self.user = User.objects.get(username='jezdez')
self.check = UserPermission(self.user)
def test_add(self):
result = self.check.assign(check='add', generic=True)
2010-01-15 21:30:09 +00:00
self.assertTrue(isinstance(result[0], DjangoPermission))
self.assertTrue(self.check.add_user())
def test_delete(self):
2012-09-20 15:55:38 +00:00
result = self.check.assign(
content_object=self.user,
check='delete',
generic=True,
)
self.assertTrue(isinstance(result[0], Permission))
self.assertFalse(self.check.delete_user())
self.assertTrue(self.check.delete_user(self.user))
2012-09-20 15:55:38 +00:00
class AssignExceptionsTest(TestCase):
2010-01-15 21:30:09 +00:00
"""
2012-09-20 15:55:38 +00:00
Tests that exceptions are thrown if assign() was called with inconsistent
arguments.
2010-01-15 21:30:09 +00:00
"""
2012-09-20 15:55:38 +00:00
fixtures = ['tests.json']
def setUp(self):
self.user = User.objects.get(username='jezdez')
self.check = UserPermission(self.user)
2010-01-15 21:30:09 +00:00
def test_unsaved_model(self):
try:
self.check.assign(content_object=User())
except UnsavedModelInstance:
return True
self.fail()
def test_not_model_content_object(self):
try:
self.check.assign(content_object='fail')
except NotAModel:
return True
self.fail()
2012-09-20 16:03:12 +00:00
class PerformanceTest(TestCase):
"""
Tests that permission are actually cached and that the number of queries
stays constant.
"""
fixtures = ['tests.json']
def setUp(self):
self.user = User.objects.get(username='jezdez')
self.check = UserPermission(self.user)
def test_has_user_perms(self):
# Show that when calling has_user_perms multiple times no additional
# queries are done.
# Make sure the has_user_perms check does not get short-circuited.
assert not self.user.is_superuser
assert self.user.is_active
# Regardless of how many times has_user_perms is called, the number of
# queries is the same.
with self.assertNumQueries(1):
self.check.has_user_perms('foo', self.user, True, True)
self.check.has_user_perms('foo', self.user, True, True)
self.check.has_user_perms('foo', self.user, True, True)