From 5b92656ee004e153e68198726e695ba7e9cfb29d Mon Sep 17 00:00:00 2001 From: thuva4 Date: Fri, 23 Mar 2018 12:32:13 +0530 Subject: Add projects CRUD in testapiclient implement interface to do CRUD operations for projects in testapiclient Tests are added Change-Id: I777b684b0a48a81de4555aa77bef88fd19249458 Signed-off-by: thuva4 --- .../testapi-client/testapiclient/cli/scenarios.py | 89 +++++++++++++++++++++ .../tests/unit/test_scenario_project.py | 90 ++++++++++++++++++++++ 2 files changed, 179 insertions(+) create mode 100644 testapi/testapi-client/testapiclient/tests/unit/test_scenario_project.py (limited to 'testapi/testapi-client/testapiclient') diff --git a/testapi/testapi-client/testapiclient/cli/scenarios.py b/testapi/testapi-client/testapiclient/cli/scenarios.py index cb8f1f3..1e384d0 100644 --- a/testapi/testapi-client/testapiclient/cli/scenarios.py +++ b/testapi/testapi-client/testapiclient/cli/scenarios.py @@ -301,3 +301,92 @@ class VersionOwnerPut(command.Command): resources_url(parsed_args.scenario_name, 'owner'), ['installer', 'version'], parsed_args), parsed_args.owner) + + +class ProjectCreate(command.Command): + + def get_parser(self, prog_name): + parser = super(ProjectCreate, self).get_parser(prog_name) + parser.add_argument('--scenario-name', + type=str, + required=True, + help='Create project by scenario name') + parser.add_argument('--installer', + required=True, + help='Create project under installer name') + parser.add_argument('--version', + required=True, + help='Create project under version name') + parser.add_argument('project', + type=json.loads, + help='Project create request format :\n' + '\'[{ "project" (string),' + '"scores": (array[ScenarioScore]),' + '"trust_indicators": (array[ScenarioTI]),' + '"customs": (array[string]) }]\',\n') + return parser + + def take_action(self, parsed_args): + return self.app.client_manager.post( + urlparse.query_by( + resources_url(parsed_args.scenario_name, 'projects'), + ['installer', 'version'], + parsed_args), parsed_args.project) + + +class ProjectDelete(command.Command): + + def get_parser(self, prog_name): + parser = super(ProjectDelete, self).get_parser(prog_name) + parser.add_argument('--scenario-name', + required=True, + type=str, + help='Delete projects by scenario name') + parser.add_argument('--installer', + required=True, + help='Delete projects under installer name') + parser.add_argument('--version', + required=True, + help='Delete projects under version name') + parser.add_argument('name', + nargs='+', + help='Delete projects by name') + return parser + + def take_action(self, parsed_args): + return self.app.client_manager.delete( + urlparse.query_by( + resources_url(parsed_args.scenario_name, 'projects'), + ['installer', 'version'], + parsed_args), parsed_args.name) + + +class ProjectPut(command.Command): + + def get_parser(self, prog_name): + parser = super(ProjectPut, self).get_parser(prog_name) + parser.add_argument('--scenario-name', + type=str, + required=True, + help='Update project by scenario name') + parser.add_argument('--installer', + required=True, + help='Update project under installer name') + parser.add_argument('--version', + required=True, + help='Update project under version name') + parser.add_argument('project', + type=json.loads, + help='Project update request format :\n' + '\'[{ "project" (string),' + '"scores": (array[ScenarioScore]),' + '"trust_indicators": (array[ScenarioTI]),' + '"customs": (array[string]) }]\',\n') + return parser + + def take_action(self, parsed_args): + return self.app.client_manager.put( + urlparse.query_by( + resources_url(parsed_args.scenario_name, 'projects'), + ['installer', 'version'], + parsed_args), parsed_args.project) diff --git a/testapi/testapi-client/testapiclient/tests/unit/test_scenario_project.py b/testapi/testapi-client/testapiclient/tests/unit/test_scenario_project.py new file mode 100644 index 0000000..7bd6645 --- /dev/null +++ b/testapi/testapi-client/testapiclient/tests/unit/test_scenario_project.py @@ -0,0 +1,90 @@ +import json + +from mock import mock +from six.moves.urllib import parse + +from testapiclient.cli import scenarios +from testapiclient.tests.unit import fakes +from testapiclient.tests.unit import utils + + +class ProjectTest(utils.TestCommand): + def setUp(self): + super(ProjectTest, self).setUp() + self.base_url = parse.urljoin(self.api_url, 'scenarios/{}/projects') + self.scenario_name = 's1' + self.project_json = { + 'trust_indicators': [], + 'project': 'test-project', + 'scores': [], + 'customs': [] + } + self.project_string = json.dumps(self.project_json) + + +class ProjectCreateTest(ProjectTest): + + def setUp(self): + super(ProjectCreateTest, self).setUp() + + def test_create_success(self): + self.post_mock.return_value = fakes.FakeResponse(data=None) + project_create = scenarios.ProjectCreate(self.app, mock.Mock()) + args = [ + '--scenario-name', 's1', '--installer', 'i1', '--version', 'v1', + self.project_string] + verifies = [ + ('scenario_name', 's1'), + ('installer', 'i1'), + ('version', 'v1'), + ('project', self.project_json)] + parsed_args = self.check_parser(project_create, args, verifies) + project_create.take_action(parsed_args) + self.post_mock.assert_called_once() + + +class ProjectDeleteTest(ProjectTest): + + def setUp(self): + super(ProjectDeleteTest, self).setUp() + + def test_delete_success(self): + self.delete_mock.return_value = fakes.FakeResponse(data=None) + project_delete = scenarios.ProjectDelete(self.app, mock.Mock()) + args = [ + '--scenario-name', 's1', '--installer', 'i1', '--version', 'v1', + 'def'] + verifies = [ + ('scenario_name', 's1'), + ('installer', 'i1'), + ('version', 'v1'), + ('name', ['def'])] + parsed_args = self.check_parser(project_delete, args, verifies) + project_delete.take_action(parsed_args) + kall = self.delete_mock.call_args + args, kwargs = kall + self.assert_url( + args[0], + self.base_url + '?version=v1&installer=i1') + + +class ProjectPutTest(ProjectTest): + + def setUp(self): + super(ProjectPutTest, self).setUp() + + def test_put_success(self): + self.put_mock.return_value = fakes.FakeResponse( + data=None) + project_put = scenarios.ProjectPut(self.app, mock.Mock()) + args = [ + '--scenario-name', 's1', '--installer', 'i1', '--version', 'v1', + self.project_string] + verifies = [ + ('scenario_name', 's1'), + ('installer', 'i1'), + ('version', 'v1'), + ('project', self.project_json)] + parsed_args = self.check_parser(project_put, args, verifies) + project_put.take_action(parsed_args) + self.put_mock.assert_called_once() -- cgit 1.2.3-korg