From 4fab60634983f9327295cc68edf89824557728f9 Mon Sep 17 00:00:00 2001 From: Rodrigo Duarte Sousa Date: Fri, 20 Mar 2015 17:51:02 -0300 Subject: Enables retrieval of project's parents and subtree Adds the possibility to retrieve a project and list its parents and subtree in the hierarchy. Co-Authored-By: Rodrigo Duarte Co-Authored-By: Samuel de Medeiros Queiroz Implements: bp hierarchical-multitenancy Change-Id: I874f6faffc8a2db9d99f12cbe0a69c0a30c0d9df --- openstackclient/tests/identity/v3/fakes.py | 19 +++ openstackclient/tests/identity/v3/test_project.py | 150 ++++++++++++++++++++++ 2 files changed, 169 insertions(+) (limited to 'openstackclient/tests') diff --git a/openstackclient/tests/identity/v3/fakes.py b/openstackclient/tests/identity/v3/fakes.py index dfbcf44f..ae7a684c 100644 --- a/openstackclient/tests/identity/v3/fakes.py +++ b/openstackclient/tests/identity/v3/fakes.py @@ -145,6 +145,25 @@ PROJECT_WITH_PARENT = { 'links': base_url + 'projects/' + (project_id + '-with-parent'), } +PROJECT_WITH_GRANDPARENT = { + 'id': project_id + '-with-grandparent', + 'name': project_name + ', granny and grandpa', + 'description': project_description + ' plus another eight?', + 'enabled': True, + 'domain_id': domain_id, + 'parent_id': PROJECT_WITH_PARENT['id'], + 'links': base_url + 'projects/' + (project_id + '-with-grandparent'), +} + +parents = [{'project': PROJECT}] +grandparents = [{'project': PROJECT}, {'project': PROJECT_WITH_PARENT}] +ids_for_parents = [PROJECT['id']] +ids_for_parents_and_grandparents = [PROJECT['id'], PROJECT_WITH_PARENT['id']] + +children = [{'project': PROJECT_WITH_GRANDPARENT}] +ids_for_children = [PROJECT_WITH_GRANDPARENT['id']] + + role_id = 'r1' role_name = 'roller' diff --git a/openstackclient/tests/identity/v3/test_project.py b/openstackclient/tests/identity/v3/test_project.py index ebf612cc..946bbdcd 100644 --- a/openstackclient/tests/identity/v3/test_project.py +++ b/openstackclient/tests/identity/v3/test_project.py @@ -783,6 +783,8 @@ class TestProjectShow(TestProject): columns, data = self.cmd.take_action(parsed_args) self.projects_mock.get.assert_called_with( identity_fakes.project_id, + parents_as_list=False, + subtree_as_list=False, ) collist = ('description', 'domain_id', 'enabled', 'id', 'name') @@ -795,3 +797,151 @@ class TestProjectShow(TestProject): identity_fakes.project_name, ) self.assertEqual(datalist, data) + + def test_project_show_parents(self): + project = copy.deepcopy(identity_fakes.PROJECT_WITH_GRANDPARENT) + project['parents'] = identity_fakes.grandparents + self.projects_mock.get.return_value = fakes.FakeResource( + None, + project, + loaded=True, + ) + + arglist = [ + identity_fakes.PROJECT_WITH_GRANDPARENT['id'], + '--parents', + ] + verifylist = [ + ('project', identity_fakes.PROJECT_WITH_GRANDPARENT['id']), + ('parents', True), + ('children', False), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + columns, data = self.cmd.take_action(parsed_args) + self.projects_mock.get.assert_called_with( + identity_fakes.PROJECT_WITH_GRANDPARENT['id'], + parents_as_list=True, + subtree_as_list=False, + ) + + collist = ( + 'description', + 'domain_id', + 'enabled', + 'id', + 'name', + 'parent_id', + 'parents', + ) + self.assertEqual(columns, collist) + datalist = ( + identity_fakes.PROJECT_WITH_GRANDPARENT['description'], + identity_fakes.PROJECT_WITH_GRANDPARENT['domain_id'], + identity_fakes.PROJECT_WITH_GRANDPARENT['enabled'], + identity_fakes.PROJECT_WITH_GRANDPARENT['id'], + identity_fakes.PROJECT_WITH_GRANDPARENT['name'], + identity_fakes.PROJECT_WITH_GRANDPARENT['parent_id'], + identity_fakes.ids_for_parents_and_grandparents, + ) + self.assertEqual(data, datalist) + + def test_project_show_subtree(self): + project = copy.deepcopy(identity_fakes.PROJECT_WITH_PARENT) + project['subtree'] = identity_fakes.children + self.projects_mock.get.return_value = fakes.FakeResource( + None, + project, + loaded=True, + ) + + arglist = [ + identity_fakes.PROJECT_WITH_PARENT['id'], + '--children', + ] + verifylist = [ + ('project', identity_fakes.PROJECT_WITH_PARENT['id']), + ('parents', False), + ('children', True), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + columns, data = self.cmd.take_action(parsed_args) + self.projects_mock.get.assert_called_with( + identity_fakes.PROJECT_WITH_PARENT['id'], + parents_as_list=False, + subtree_as_list=True, + ) + + collist = ( + 'description', + 'domain_id', + 'enabled', + 'id', + 'name', + 'parent_id', + 'subtree', + ) + self.assertEqual(columns, collist) + datalist = ( + identity_fakes.PROJECT_WITH_PARENT['description'], + identity_fakes.PROJECT_WITH_PARENT['domain_id'], + identity_fakes.PROJECT_WITH_PARENT['enabled'], + identity_fakes.PROJECT_WITH_PARENT['id'], + identity_fakes.PROJECT_WITH_PARENT['name'], + identity_fakes.PROJECT_WITH_PARENT['parent_id'], + identity_fakes.ids_for_children, + ) + self.assertEqual(data, datalist) + + def test_project_show_parents_and_children(self): + project = copy.deepcopy(identity_fakes.PROJECT_WITH_PARENT) + project['subtree'] = identity_fakes.children + project['parents'] = identity_fakes.parents + self.projects_mock.get.return_value = fakes.FakeResource( + None, + project, + loaded=True, + ) + + arglist = [ + identity_fakes.PROJECT_WITH_PARENT['id'], + '--parents', + '--children', + ] + verifylist = [ + ('project', identity_fakes.PROJECT_WITH_PARENT['id']), + ('parents', True), + ('children', True), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + columns, data = self.cmd.take_action(parsed_args) + self.projects_mock.get.assert_called_with( + identity_fakes.PROJECT_WITH_PARENT['id'], + parents_as_list=True, + subtree_as_list=True, + ) + + collist = ( + 'description', + 'domain_id', + 'enabled', + 'id', + 'name', + 'parent_id', + 'parents', + 'subtree', + ) + self.assertEqual(columns, collist) + datalist = ( + identity_fakes.PROJECT_WITH_PARENT['description'], + identity_fakes.PROJECT_WITH_PARENT['domain_id'], + identity_fakes.PROJECT_WITH_PARENT['enabled'], + identity_fakes.PROJECT_WITH_PARENT['id'], + identity_fakes.PROJECT_WITH_PARENT['name'], + identity_fakes.PROJECT_WITH_PARENT['parent_id'], + identity_fakes.ids_for_parents, + identity_fakes.ids_for_children, + ) + self.assertEqual(data, datalist) -- cgit v1.2.1