diff --git a/authority/fixtures/tests.json b/authority/fixtures/tests.json index ff53116..2f4bf49 100644 --- a/authority/fixtures/tests.json +++ b/authority/fixtures/tests.json @@ -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": [] + } } ] diff --git a/authority/permissions.py b/authority/permissions.py index 55ac8b2..dde6d0b 100644 --- a/authority/permissions.py +++ b/authority/permissions.py @@ -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, diff --git a/authority/tests.py b/authority/tests.py index 20d3c39..792ac5e 100644 --- a/authority/tests.py +++ b/authority/tests.py @@ -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",)