def test_create_role_parent_hierarchy(self): id1, parent_id1 = 1, 11 id2, id3, id4 = 2, 3, 4 name1, name2, name3, name4 = 'name1', 'name2', 'name3', 'name4' rbac = RBAC() rbac.create_role(id1, name1, parent_id1) rbac.create_role(id2, name2, id1) rbac.create_role(id3, name3, id1) rbac.create_role(id4, name4, id2) self.assertEqual(rbac.role_id_to_name[id1], name1) self.assertEqual(rbac.role_id_to_name[id2], name2) self.assertEqual(rbac.role_id_to_name[id3], name3) self.assertEqual(rbac.role_id_to_name[id4], name4) self.assertIn(id1, rbac.registry._roles) self.assertIn(id2, rbac.registry._roles) self.assertIn(id3, rbac.registry._roles) self.assertIn(id4, rbac.registry._roles) self.assertEquals(rbac.registry._roles[id1], set([parent_id1])) self.assertEquals(rbac.registry._roles[id2], set([id1])) self.assertEquals(rbac.registry._roles[id3], set([id1])) self.assertEquals(rbac.registry._roles[id4], set([id2])) self.assertEquals(sorted(get_family(rbac.registry._roles, id1)), [None, id1, parent_id1]) self.assertEquals(sorted(get_family(rbac.registry._roles, id2)), [None, id1, id2, parent_id1]) self.assertEquals(sorted(get_family(rbac.registry._roles, id3)), [None, id1, id3, parent_id1]) self.assertEquals(sorted(get_family(rbac.registry._roles, id4)), [None, id1, id2, id4, parent_id1])
def test_edit_role_parent_hierarchy(self): id1, parent_id1 = 1, 11 id2, id3, id4 = 2, 3, 4 parent_id1_new, parent_id2_new, parent_id3_new = 111, 222, 333 name1, name2, name3, name4 = 'name1', 'name2', 'name3', 'name4' name1_new, name3_new, name4_new = 'name1_new', 'name3_new', 'name4_new' rbac = RBAC() rbac.create_role(id1, name1, parent_id1) rbac.create_role(id2, name2, id1) rbac.create_role(id3, name3, id1) rbac.create_role(id4, name4, id2) # Changing only the name here rbac.edit_role(id1, name1, name1_new, parent_id1) self.assertEqual(rbac.role_id_to_name[id1], name1_new) self.assertIn(id1, rbac.registry._roles) self.assertEquals(rbac.registry._roles[id1], set([parent_id1])) self.assertEquals(sorted(get_family(rbac.registry._roles, id1)), [None, id1, parent_id1]) # Changing the id1's parent ID here rbac.edit_role(id1, name1_new, name1_new, parent_id1_new) self.assertEqual(rbac.role_id_to_name[id1], name1_new) self.assertIn(id1, rbac.registry._roles) self.assertEquals(rbac.registry._roles[id1], set([parent_id1_new])) self.assertEquals(sorted(get_family(rbac.registry._roles, id1)), [None, id1, parent_id1_new]) # Changing both name and parent ID of id3 rbac.edit_role(id3, name3, name3_new, parent_id3_new) self.assertEqual(rbac.role_id_to_name[id3], name3_new) self.assertIn(id3, rbac.registry._roles) self.assertEquals(rbac.registry._roles[id3], set([parent_id3_new])) self.assertEquals(sorted(get_family(rbac.registry._roles, id3)), [None, id3, parent_id3_new]) # id4 should have parent_id2_new as one of its predecessors as a result of the first edit # whereas the second one should update id4's name. rbac.edit_role(id2, name2, name2, parent_id2_new) rbac.edit_role(id4, name4, name4_new, id2) self.assertEquals(sorted(get_family(rbac.registry._roles, id4)), [None, id2, id4, parent_id2_new]) self.assertEqual(rbac.role_id_to_name[id4], name4_new)