From 2cd77d393de6b20971aadf051618a5bb58adb3db Mon Sep 17 00:00:00 2001 From: One-Fine-Day Date: Tue, 5 Dec 2017 15:51:48 -0600 Subject: [PATCH] ActionsValidationsResource and VersionsResource Unit Tests test_actions_validations_id_api.py contains the unit tests for the ActionsValidationsResource test_api.py contains the unit tests for the VersionsResource .gitignore was modified in follow up to the additon of --cov-report=html in the tox file from the 'Unit Test for WorkflowResource and WorkflowIdResource' commit Change-Id: Ic830ade260591e7145b1199a2b4be1c6f9cdf8a6 --- .gitignore | 3 +- .../test_actions_validations_id_api.py | 80 +++++++++++-------- tests/unit/control/test_api.py | 29 +++++++ 3 files changed, 79 insertions(+), 33 deletions(-) create mode 100644 tests/unit/control/test_api.py diff --git a/.gitignore b/.gitignore index 7a17c73d..21325a59 100644 --- a/.gitignore +++ b/.gitignore @@ -37,6 +37,7 @@ pip-delete-this-directory.txt # Unit test / coverage reports htmlcov/ +cov/* .tox/ .coverage .coverage.* @@ -108,4 +109,4 @@ AUTHORS # build/lint artifacts /charts/shipyard/charts /charts/shipyard/requirements.lock -.DS_Store \ No newline at end of file +.DS_Store diff --git a/tests/unit/control/test_actions_validations_id_api.py b/tests/unit/control/test_actions_validations_id_api.py index 659ecaed..a082fece 100644 --- a/tests/unit/control/test_actions_validations_id_api.py +++ b/tests/unit/control/test_actions_validations_id_api.py @@ -11,11 +11,13 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. -import json +from mock import patch +import pytest from shipyard_airflow.control.action.actions_validations_id_api import \ ActionsValidationsResource from shipyard_airflow.errors import ApiError +from tests.unit.control import common def actions_db(action_id): @@ -52,39 +54,53 @@ def get_validations(validation_id): return None -def test_get_action_validation(): - """ - Tests the main response from get all actions - """ - action_resource = ActionsValidationsResource() - # stubs for db - action_resource.get_action_db = actions_db - action_resource.get_validation_db = get_validations +class TestActionsValidationsResource(): + @patch.object(ActionsValidationsResource, 'get_action_validation', + common.str_responder) + def test_on_get(self, api_client): + """Validate the on_get method returns 200 on success""" + result = api_client.simulate_get( + "/api/v1.0/actions/123456/validations/123456", + headers=common.AUTH_HEADERS) + assert result.status_code == 200 - validation = action_resource.get_action_validation( - action_id='59bb330a-9e64-49be-a586-d253bb67d443', - validation_id='43' - ) - print(json.dumps(validation, default=str)) - assert validation['action_id'] == '59bb330a-9e64-49be-a586-d253bb67d443' - assert validation['validation_name'] == 'It has shiny goodness' + def test_get_action_validation(self): + """Tests the main response from get all actions""" + action_resource = ActionsValidationsResource() + # stubs for db + action_resource.get_action_db = actions_db + action_resource.get_validation_db = get_validations - try: validation = action_resource.get_action_validation( action_id='59bb330a-9e64-49be-a586-d253bb67d443', - validation_id='not a chance' - ) - assert False - except ApiError as api_error: - assert api_error.status == '404 Not Found' - assert api_error.title == 'Validation not found' + validation_id='43') + assert validation[ + 'action_id'] == '59bb330a-9e64-49be-a586-d253bb67d443' + assert validation['validation_name'] == 'It has shiny goodness' - try: - validation = action_resource.get_action_validation( - action_id='error_it', - validation_id='not a chance' - ) - assert False - except ApiError as api_error: - assert api_error.status == '404 Not Found' - assert api_error.title == 'Action not found' + with pytest.raises(ApiError) as api_error: + action_resource.get_action_validation( + action_id='59bb330a-9e64-49be-a586-d253bb67d443', + validation_id='not a chance') + assert 'Validation not found' in str(api_error) + + with pytest.raises(ApiError) as api_error: + validation = action_resource.get_action_validation( + action_id='error_it', validation_id='not a chance') + assert 'Action not found' in str(api_error) + + @patch('shipyard_airflow.db.shipyard_db.ShipyardDbAccess.get_action_by_id') + def test_get_action_db(self, mock_get_action_by_id): + action_resource = ActionsValidationsResource() + action_id = '123456789' + action_resource.get_action_db(action_id) + mock_get_action_by_id.assert_called_with(action_id=action_id) + + @patch( + 'shipyard_airflow.db.shipyard_db.ShipyardDbAccess.get_validation_by_id' + ) + def test_get_validation_db(self, mock_get_tasks_by_id): + action_resource = ActionsValidationsResource() + validation_id = '123456' + action_resource.get_validation_db(validation_id) + mock_get_tasks_by_id.assert_called_with(validation_id=validation_id) diff --git a/tests/unit/control/test_api.py b/tests/unit/control/test_api.py new file mode 100644 index 00000000..971ffc37 --- /dev/null +++ b/tests/unit/control/test_api.py @@ -0,0 +1,29 @@ +# Copyright 2017 AT&T Intellectual Property. All other rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +from shipyard_airflow.control.base import ShipyardRequestContext +from shipyard_airflow.control.api import VersionsResource +from tests.unit.control.common import create_req, create_resp + +context = ShipyardRequestContext() + + +class TestVersionsResource(): + def test_on_get(self): + version_resource = VersionsResource() + req = create_req(context, None) + resp = create_resp() + version_resource.on_get(req, resp) + assert sorted(resp.body) == sorted( + '{"v1.0": {"status": "stable", "path": "/api/v1.0"}}') + assert resp.status == '200 OK'