test_api_gateway_rest.py - AWS Code Sample

test_api_gateway_rest.py

# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: Apache-2.0 """ Unit tests for api_gateway_rest.py functions. """ import boto3 from botocore.exceptions import ClientError import pytest import api_gateway_rest @pytest.mark.parametrize('error_code,stop_on_method', [ (None, None), ('TestException', 'stub_create_rest_api'), ('TestException', 'stub_get_resources'), ('TestException', 'stub_create_resource'), ('TestException', 'stub_put_method'), ('TestException', 'stub_put_integration'), ('TestException', 'stub_create_deployment'), ('TestException', 'stub_add_permission'), ]) def test_create_rest_api( make_stubber, make_unique_name, stub_runner, error_code, stop_on_method): apig_client = boto3.client('apigateway') apig_stubber = make_stubber(apig_client) lambda_client = boto3.client('lambda') lambda_stubber = make_stubber(lambda_client) api_name = make_unique_name('api-') api_base_path = 'test-path' api_stage = 'test' account_id = '123456789012' lambda_func_arn = 'aws;arn:lambda:::function/test-func' rest_api_id = 'rest-id' root_id = 'root-id' resource_id = 'resource-id' lambda_uri = \ f'arn:aws:apigateway:{apig_client.meta.region_name}:' \ f'lambda:path/2015-03-31/functions/{lambda_func_arn}/invocations' apig_source_arn = \ f'arn:aws:execute-api:{apig_client.meta.region_name}:' \ f'{account_id}:{rest_api_id}/*/*/{api_base_path}' with stub_runner(error_code, stop_on_method) as runner: runner.add(apig_stubber.stub_create_rest_api, api_name, rest_api_id) runner.add(apig_stubber.stub_get_resources, rest_api_id, [ {'id': 'not-the-root-id', 'path': '/not-the-root'}, {'id': root_id, 'path': '/'}]) runner.add( apig_stubber.stub_create_resource, rest_api_id, root_id, api_base_path, resource_id) runner.add(apig_stubber.stub_put_method, rest_api_id, resource_id) runner.add( apig_stubber.stub_put_integration, rest_api_id, resource_id, lambda_uri) runner.add(apig_stubber.stub_create_deployment, rest_api_id, api_stage) runner.add( lambda_stubber.stub_add_permission, lambda_func_arn, 'lambda:InvokeFunction', 'apigateway.amazonaws.com', apig_source_arn) if error_code is None: got_api_id = api_gateway_rest.create_rest_api( apig_client, api_name, api_base_path, api_stage, account_id, lambda_client, lambda_func_arn) assert got_api_id == rest_api_id else: with pytest.raises(ClientError) as exc_info: api_gateway_rest.create_rest_api( apig_client, api_name, api_base_path, api_stage, account_id, lambda_client, lambda_func_arn) assert exc_info.value.response['Error']['Code'] == error_code @pytest.mark.parametrize('error_code', [None, 'TestException']) def test_delete_rest_api(make_stubber, error_code): apig_client = boto3.client('apigateway') apig_stubber = make_stubber(apig_client) api_id = 'test-id' apig_stubber.stub_delete_rest_api(api_id, error_code=error_code) if error_code is None: api_gateway_rest.delete_rest_api(apig_client, api_id) else: with pytest.raises(ClientError) as exc_info: api_gateway_rest.delete_rest_api(apig_client, api_id) assert exc_info.value.response['Error']['Code'] == error_code