Fix BasePermission.assign for group perms

fixes #26
This commit is contained in:
Gunnlaugur Þór Briem 2013-05-14 14:20:31 +00:00 committed by Jannis Leidel
parent 1866f087b2
commit 06905e90c4
No known key found for this signature in database
GPG key ID: C795956FB489DCA9
3 changed files with 69 additions and 1 deletions

View file

@ -16,5 +16,29 @@
"email": "",
"date_joined": "2009-11-02 03:06:19"
}
},
{
"pk": 1,
"model": "auth.group",
"fields": {
"name": "Test Group 1",
"permissions": []
}
},
{
"pk": 2,
"model": "auth.group",
"fields": {
"name": "Test Group 2",
"permissions": []
}
},
{
"pk": 3,
"model": "auth.group",
"fields": {
"name": "Test Group 3",
"permissions": []
}
}
]

View file

@ -334,6 +334,7 @@ class BasePermission(object):
try:
perm = Permission.objects.get(
user=self.user,
group=self.group,
codename=codename,
approved=True,
content_type=content_type,
@ -342,6 +343,7 @@ class BasePermission(object):
except Permission.DoesNotExist:
perm = Permission.objects.create(
user=self.user,
group=self.group,
content_object=content_object,
codename=codename,
approved=True,

View file

@ -1,9 +1,10 @@
from django.conf import settings
from django.contrib.auth.models import Permission as DjangoPermission
from django.contrib.auth.models import Group
from django.test import TestCase
from django.contrib.contenttypes.models import ContentType
from django.core.exceptions import MultipleObjectsReturned
from django.db.models import Q
from django.test import TestCase
import authority
from authority import permissions
@ -94,6 +95,9 @@ class AssignBehaviourTest(TestCase):
def setUp(self):
self.user = User.objects.get(QUERY)
self.group1 = Group.objects.get(name='Test Group 1')
self.group2 = Group.objects.get(name='Test Group 2')
self.group3 = Group.objects.get(name='Test Group 2')
self.check = UserPermission(self.user)
def test_add(self):
@ -102,6 +106,44 @@ class AssignBehaviourTest(TestCase):
self.assertTrue(isinstance(result[0], DjangoPermission))
self.assertTrue(self.check.add_user())
def test_assign_to_group(self):
result = UserPermission(group=self.group1).assign(
check='delete_user', content_object=self.user)
self.assertIsInstance(result, list)
self.assertIsInstance(result[0], Permission)
self.assertTrue(
UserPermission(group=self.group1).delete_user(self.user)
)
def test_assign_to_group_does_not_overwrite_other_group_permission(self):
UserPermission(group=self.group1).assign(
check='delete_user', content_object=self.user)
UserPermission(group=self.group2).assign(
check='delete_user', content_object=self.user)
self.assertTrue(
UserPermission(group=self.group2).delete_user(self.user)
)
self.assertTrue(
UserPermission(group=self.group1).delete_user(self.user)
)
def test_assign_to_group_does_not_fail_when_two_group_perms_exist(self):
for group in self.group1, self.group2:
perm = Permission(
group=group,
content_object=self.user,
codename='user_permission.delete_user',
approved=True
)
perm.save()
try:
UserPermission(group=self.group3).assign(
check='delete_user', content_object=self.user)
except MultipleObjectsReturned:
self.fail("assign() should not have raised this exception")
def test_delete(self):
result = self.check.assign(content_object=self.user, check="delete_user",)