From 110d579b2eb6e6c5f46adff10031dfcd0fffdab7 Mon Sep 17 00:00:00 2001 From: Őry Máté <ory.mate@cloud.bme.hu> Date: Sat, 9 Nov 2013 04:10:38 +0100 Subject: [PATCH] acl: add tests --- circle/acl/tests/__init__.py | 0 circle/acl/tests/models.py | 23 +++++++++++++++++++++++ circle/acl/tests/test_acl.py | 135 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 158 insertions(+) create mode 100644 circle/acl/tests/__init__.py create mode 100644 circle/acl/tests/models.py create mode 100644 circle/acl/tests/test_acl.py diff --git a/circle/acl/tests/__init__.py b/circle/acl/tests/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/circle/acl/tests/__init__.py diff --git a/circle/acl/tests/models.py b/circle/acl/tests/models.py new file mode 100644 index 0000000..1b2c522 --- /dev/null +++ b/circle/acl/tests/models.py @@ -0,0 +1,23 @@ +from django.db.models import TextField + +from ..models import AclBase + + +class TestModel(AclBase): + normal_field = TextField() + + ACL_LEVELS = ( + ('alfa', 'Alfa'), + ('bravo', 'Bravo'), + ('charlie', 'Charlie'), + ) + + +class Test2Model(AclBase): + normal2_field = TextField() + + ACL_LEVELS = ( + ('one', 'One'), + ('two', 'Two'), + ('three', 'Three'), + ) diff --git a/circle/acl/tests/test_acl.py b/circle/acl/tests/test_acl.py new file mode 100644 index 0000000..2fbc14e --- /dev/null +++ b/circle/acl/tests/test_acl.py @@ -0,0 +1,135 @@ +from django.test import TestCase +from django.contrib.auth.models import User, Group, AnonymousUser + +from ..models import ObjectLevel +from .models import TestModel, Test2Model + + +class AclUserTest(TestCase): + def setUp(self): + self.u1 = User.objects.create(username='user1') + self.u2 = User.objects.create(username='user2', is_staff=True) + self.us = User.objects.create(username='superuser', is_superuser=True) + self.g1 = Group.objects.create(name='group1') + self.g1.user_set.add(self.u1) + self.g1.user_set.add(self.u2) + self.g1.save() + + def test_level_exists(self): + for codename, name in TestModel.ACL_LEVELS: + level = TestModel.get_level_object(codename) + self.assertEqual(level.codename, codename) + for codename, name in Test2Model.ACL_LEVELS: + level = Test2Model.get_level_object(codename) + self.assertEqual(level.codename, codename) + + def test_lowest_user_level(self): + i = TestModel.objects.create(normal_field='Hello') + self.assertFalse(i.has_level(self.u1, 'alfa', False)) + self.assertFalse(i.has_level(self.u1, 'bravo', False)) + i.set_level(self.u1, 'alfa') + i.set_level(self.g1, 'bravo') + self.assertTrue(i.has_level(self.u1, 'alfa', False)) + self.assertFalse(i.has_level(self.u1, 'bravo', False)) + + def test_anonymous_user_level(self): + i = TestModel.objects.create(normal_field='Hello') + anon = AnonymousUser() + self.assertFalse(i.has_level(anon, 'alfa')) + self.assertFalse(i.has_level(anon, 'bravo')) + + def test_middle_user_level(self): + i = TestModel.objects.create(normal_field='Hello') + self.assertFalse(i.has_level(self.u1, 'alfa')) + self.assertFalse(i.has_level(self.u1, 'bravo')) + self.assertFalse(i.has_level(self.u1, 'charlie')) + i.set_level(self.u1, 'bravo') + self.assertTrue(i.has_level(self.u1, 'alfa')) + self.assertTrue(i.has_level(self.u1, 'bravo')) + self.assertFalse(i.has_level(self.u1, 'charlie')) + + def test_level_set_twice_same(self): + i = TestModel.objects.create(normal_field='Hello') + self.assertFalse(i.has_level(self.u1, 'alfa')) + self.assertFalse(i.has_level(self.u1, 'bravo')) + self.assertFalse(i.has_level(self.u1, 'charlie')) + i.set_level(self.u1, 'bravo') + i.set_level(self.u1, 'bravo') + self.assertTrue(i.has_level(self.u1, 'alfa')) + self.assertTrue(i.has_level(self.u1, 'bravo')) + self.assertFalse(i.has_level(self.u1, 'charlie')) + + def test_level_set_twice_different(self): + i = TestModel.objects.create(normal_field='Hello') + self.assertFalse(i.has_level(self.u1, 'alfa')) + self.assertFalse(i.has_level(self.u1, 'bravo')) + self.assertFalse(i.has_level(self.u1, 'charlie')) + i.set_level(self.u1, 'charlie') + i.set_level(self.u1, 'bravo') + self.assertTrue(i.has_level(self.u1, 'alfa')) + self.assertTrue(i.has_level(self.u1, 'bravo')) + self.assertFalse(i.has_level(self.u1, 'charlie')) + + def test_superuser(self): + i = TestModel.objects.create(normal_field='Hello') + for u, v in [(self.u1, False), (self.u2, False), (self.us, True)]: + self.assertEqual(i.has_level(u, 'alfa'), v) + self.assertEqual(i.has_level(u, 'bravo'), v) + self.assertEqual(i.has_level(u, 'charlie'), v) + + def test_check_group_membership(self): + groups = self.u1.groups.values_list('id', flat=True) + self.assertIn(self.g1.id, groups) + + self.assertTrue(self.g1.user_set.filter(id=self.u2.id).exists()) + + def test_lowest_group_level(self): + i = TestModel.objects.create(normal_field='Hello') + self.assertFalse(i.has_level(self.u1, 'alfa')) + self.assertFalse(i.has_level(self.u1, 'bravo')) + i.set_level(self.g1, 'alfa') + self.assertTrue(i.has_level(self.u1, 'alfa')) + self.assertFalse(i.has_level(self.u1, 'bravo')) + + def test_middle_group_level(self): + i = TestModel.objects.create(normal_field='Hello') + self.assertFalse(i.has_level(self.u1, 'alfa')) + self.assertFalse(i.has_level(self.u1, 'bravo')) + self.assertFalse(i.has_level(self.u1, 'charlie')) + i.set_level(self.g1, 'bravo') + self.assertTrue(i.has_level(self.u1, 'alfa')) + self.assertTrue(i.has_level(self.u1, 'bravo')) + self.assertFalse(i.has_level(self.u1, 'charlie')) + + def test_set_level_error_handling(self): + with self.assertRaises(AttributeError): + TestModel.objects.create().set_level('wrong arg', 'level') + + def test_get_users_with_level(self): + i1 = TestModel.objects.create(normal_field='Hello') + i2 = Test2Model.objects.create(normal2_field='Hello2') + i1.set_level(self.u1, 'bravo') + i1.set_level(self.u2, 'charlie') + i2.set_level(self.u1, 'one') + i2.set_level(self.us, u'three') + res1 = i1.get_users_with_level() + self.assertEqual([(self.u1, u'bravo'), (self.u2, u'charlie')], res1) + res2 = i2.get_users_with_level() + self.assertEqual([(self.u1, u'one'), (self.us, u'three')], res2) + + def test_get_groups_with_level(self): + i1 = TestModel.objects.create(normal_field='Hello') + i2 = Test2Model.objects.create(normal2_field='Hello2') + i1.set_level(self.g1, 'bravo') + i1.set_level(self.u2, 'charlie') + i2.set_level(self.g1, 'one') + i2.set_level(self.us, u'three') + res1 = i1.get_groups_with_level() + self.assertEqual([(self.g1, u'bravo')], res1) + res2 = i2.get_groups_with_level() + self.assertEqual([(self.g1, u'one')], res2) + + def test_object_level_unicode(self): + i1 = TestModel.objects.create(normal_field='Hello') + i1.set_level(self.g1, 'bravo') + unicode(ObjectLevel.objects.all()[0]) -- libgit2 0.26.0