Mercurial > genshi > mirror
diff examples/trac/trac/tests/perm.py @ 39:93b4dcbafd7b trunk
Copy Trac to main branch.
author | cmlenz |
---|---|
date | Mon, 03 Jul 2006 18:53:27 +0000 |
parents | |
children |
line wrap: on
line diff
new file mode 100644 --- /dev/null +++ b/examples/trac/trac/tests/perm.py @@ -0,0 +1,157 @@ +from trac import perm +from trac.config import Configuration +from trac.core import * +from trac.test import EnvironmentStub + +import unittest + + +class DefaultPermissionStoreTestCase(unittest.TestCase): + + def setUp(self): + self.env = EnvironmentStub(enable=[perm.DefaultPermissionStore, + perm.DefaultPermissionGroupProvider]) + self.store = perm.DefaultPermissionStore(self.env) + + def test_simple_actions(self): + db = self.env.get_db_cnx() + cursor = db.cursor() + cursor.executemany("INSERT INTO permission VALUES (%s,%s)", [ + ('john', 'WIKI_MODIFY'), ('john', 'REPORT_ADMIN'), + ('kate', 'TICKET_CREATE')]) + self.assertEquals(['WIKI_MODIFY', 'REPORT_ADMIN'], + self.store.get_user_permissions('john')) + self.assertEquals(['TICKET_CREATE'], self.store.get_user_permissions('kate')) + + def test_simple_group(self): + db = self.env.get_db_cnx() + cursor = db.cursor() + cursor.executemany("INSERT INTO permission VALUES (%s,%s)", [ + ('dev', 'WIKI_MODIFY'), ('dev', 'REPORT_ADMIN'), + ('john', 'dev')]) + self.assertEquals(['WIKI_MODIFY', 'REPORT_ADMIN'], + self.store.get_user_permissions('john')) + + def test_nested_groups(self): + db = self.env.get_db_cnx() + cursor = db.cursor() + cursor.executemany("INSERT INTO permission VALUES (%s,%s)", [ + ('dev', 'WIKI_MODIFY'), ('dev', 'REPORT_ADMIN'), + ('admin', 'dev'), ('john', 'admin')]) + self.assertEquals(['WIKI_MODIFY', 'REPORT_ADMIN'], + self.store.get_user_permissions('john')) + + def test_builtin_groups(self): + db = self.env.get_db_cnx() + cursor = db.cursor() + cursor.executemany("INSERT INTO permission VALUES (%s,%s)", [ + ('authenticated', 'WIKI_MODIFY'), + ('authenticated', 'REPORT_ADMIN'), + ('anonymous', 'TICKET_CREATE')]) + self.assertEquals(['WIKI_MODIFY', 'REPORT_ADMIN', 'TICKET_CREATE'], + self.store.get_user_permissions('john')) + self.assertEquals(['TICKET_CREATE'], + self.store.get_user_permissions('anonymous')) + + def test_get_all_permissions(self): + db = self.env.get_db_cnx() + cursor = db.cursor() + cursor.executemany("INSERT INTO permission VALUES (%s,%s)", [ + ('dev', 'WIKI_MODIFY'), ('dev', 'REPORT_ADMIN'), + ('john', 'dev')]) + expected = [('dev', 'WIKI_MODIFY'), + ('dev', 'REPORT_ADMIN'), + ('john', 'dev')] + for res in self.store.get_all_permissions(): + self.failIf(res not in expected) + + +class TestPermissionRequestor(Component): + implements(perm.IPermissionRequestor) + + def get_permission_actions(self): + return ['TEST_CREATE', 'TEST_DELETE', 'TEST_MODIFY', + ('TEST_ADMIN', ['TEST_CREATE', 'TEST_DELETE', + 'TEST_MODIFY'])] + +class PermissionSystemTestCase(unittest.TestCase): + + def setUp(self): + from trac.core import ComponentMeta + + self.env = EnvironmentStub(enable=[perm.PermissionSystem, + perm.DefaultPermissionStore, + TestPermissionRequestor]) + self.perm = perm.PermissionSystem(self.env) + + def test_all_permissions(self): + self.assertEqual({'TEST_CREATE': True, 'TEST_DELETE': True, + 'TEST_MODIFY': True, 'TEST_ADMIN': True, + 'TRAC_ADMIN': True}, + self.perm.get_user_permissions()) + + def test_simple_permissions(self): + self.perm.grant_permission('bob', 'TEST_CREATE') + self.perm.grant_permission('jane', 'TEST_DELETE') + self.perm.grant_permission('jane', 'TEST_MODIFY') + self.assertEqual({'TEST_CREATE': True}, + self.perm.get_user_permissions('bob')) + self.assertEqual({'TEST_DELETE': True, 'TEST_MODIFY': True}, + self.perm.get_user_permissions('jane')) + + def test_meta_permissions(self): + self.perm.grant_permission('bob', 'TEST_CREATE') + self.perm.grant_permission('jane', 'TEST_ADMIN') + self.assertEqual({'TEST_CREATE': True}, + self.perm.get_user_permissions('bob')) + self.assertEqual({'TEST_CREATE': True, 'TEST_DELETE': True, + 'TEST_MODIFY': True, 'TEST_ADMIN': True}, + self.perm.get_user_permissions('jane')) + + def test_get_all_permissions(self): + self.perm.grant_permission('bob', 'TEST_CREATE') + self.perm.grant_permission('jane', 'TEST_ADMIN') + expected = [('bob', 'TEST_CREATE'), + ('jane', 'TEST_ADMIN')] + for res in self.perm.get_all_permissions(): + self.failIf(res not in expected) + + +class PermTestCase(unittest.TestCase): + + def setUp(self): + self.env = EnvironmentStub(enable=[perm.PermissionSystem, + perm.DefaultPermissionStore, + TestPermissionRequestor]) + # Add a few groups + db = self.env.get_db_cnx() + cursor = db.cursor() + cursor.executemany("INSERT INTO permission VALUES(%s,%s)", [ + ('employee', 'TEST_MODIFY'), + ('developer', 'TEST_ADMIN'), + ('developer', 'employee'), + ('bob', 'developer')]) + db.commit() + self.perm = perm.PermissionCache(self.env, 'bob') + + def test_has_permission(self): + self.assertEqual(1, self.perm.has_permission('TEST_MODIFY')) + self.assertEqual(1, self.perm.has_permission('TEST_ADMIN')) + self.assertEqual(0, self.perm.has_permission('TRAC_ADMIN')) + + def test_assert_permission(self): + self.perm.assert_permission('TEST_MODIFY') + self.perm.assert_permission('TEST_ADMIN') + self.assertRaises(perm.PermissionError, + self.perm.assert_permission, 'TRAC_ADMIN') + + +def suite(): + suite = unittest.TestSuite() + suite.addTest(unittest.makeSuite(DefaultPermissionStoreTestCase, 'test')) + suite.addTest(unittest.makeSuite(PermissionSystemTestCase, 'test')) + suite.addTest(unittest.makeSuite(PermTestCase, 'test')) + return suite + +if __name__ == '__main__': + unittest.main()