def test_lambda_in_swagger_object(self): lambda_arn = 'TestLambda' path = '/test' operation = 'get' module = 'test' function = operation swagger = self.__get_minimal_swagger() swagger[swagger_processor.LAMBDA_DISPATCH_OBJECT_NAME] = { 'lambda': lambda_arn } swagger['paths'][path] = { operation: { "responses": { "200": { "description": "A successful service status response." } } } } expected_swagger = self.__copy_and_remove_lambda_dispatch_objects(swagger) self.__add_error_responses(expected_swagger, path, operation) self.__add_integration_object(expected_swagger, path, operation, lambda_arn, module, function) self.__add_default_expected_definitions(expected_swagger) self.__add_cors_options_operation(expected_swagger['paths'][path]) self.__add_cors_response_headers(expected_swagger['paths'][path][operation]) self.__add_operation_iam_security(expected_swagger['paths'][path][operation]) swagger_processor.process_swagger(swagger) self.__validate_swagger(expected_swagger, swagger)
def test_additional_response_template_content(self): lambda_arn = 'TestLambda' path = '/test' operation = 'get' module = 'test' function = operation swagger = self.__get_minimal_swagger() swagger[swagger_processor.LAMBDA_DISPATCH_OBJECT_NAME] = { 'lambda': lambda_arn, 'additional-response-template-content': { '200': '200aa', '400': '400aa', '500': '500aa' } } swagger['paths'][path] = { operation: { "responses": { "200": { "description": "A successful service status response." } }, swagger_processor.LAMBDA_DISPATCH_OBJECT_NAME: { 'additional-response-template-content': { '200': '200cc', '400': '400cc', '500': '500cc' } } }, swagger_processor.LAMBDA_DISPATCH_OBJECT_NAME: { 'additional-response-template-content': { '200': '200bb', '400': '400bb', '500': '500bb' } } } additional_response_template_content = { '200': '200aa200bb200cc', '400': '400aa400bb400cc', '500': '500aa500bb500cc', } expected_swagger = self.__copy_and_remove_lambda_dispatch_objects(swagger) self.__add_error_responses(expected_swagger, path, operation) self.__add_integration_object(expected_swagger, path, operation, lambda_arn, module, function, additional_response_template_content = additional_response_template_content) self.__add_default_expected_definitions(expected_swagger) self.__add_cors_options_operation(expected_swagger['paths'][path]) self.__add_cors_response_headers(expected_swagger['paths'][path][operation]) self.__add_operation_iam_security(expected_swagger['paths'][path][operation]) swagger_processor.process_swagger(swagger) self.__validate_swagger(expected_swagger, swagger)
def test_parameter_reference(self): swagger = self.__get_minimal_swagger() lambda_arn = 'TestLambda' swagger[swagger_processor.LAMBDA_DISPATCH_OBJECT_NAME] = { 'lambda': lambda_arn } path = '/foo/{test_param}/bar' module = 'foo_bar' operation = 'get' function = operation swagger['parameters'] = { 'ref_key': { 'in': 'path', 'name': 'test_param', 'type': 'string' } } swagger['paths'][path] = { operation: { "responses": { "200": { "description": "A successful service status response." } }, "parameters": [ { "$ref": "#/parameters/ref_key" } ] } } expected_swagger = self.__copy_and_remove_lambda_dispatch_objects(swagger) self.__add_error_responses(expected_swagger, path, operation) self.__add_integration_object(expected_swagger, path, operation, lambda_arn, module, function) self.__add_default_expected_definitions(expected_swagger) expected_parameters = [ { 'in': 'path', 'name': 'test_param', 'type': 'string' } ] self.__add_cors_options_operation(expected_swagger['paths'][path], parameters = expected_parameters) self.__add_cors_response_headers(expected_swagger['paths'][path][operation]) self.__add_operation_iam_security(expected_swagger['paths'][path][operation]) swagger_processor.process_swagger(swagger) self.__validate_swagger(expected_swagger, swagger)
def test_no_lambda_dispatch_object_with_integration_object(self): swagger = self.__get_minimal_swagger() swagger['paths']['/test'] = { "get": { "responses": { "200": { "description": "A successful service status response." } }, swagger_processor.API_GATEWAY_INTEGRATION_OBJECT_NAME: { } } } expected_swagger = self.__copy_and_remove_lambda_dispatch_objects(swagger) swagger_processor.process_swagger(swagger) self.__validate_swagger(expected_swagger, swagger)
def test_body_parameter(self): swagger = self.__get_minimal_swagger() lambda_arn = 'TestLambda' swagger[swagger_processor.LAMBDA_DISPATCH_OBJECT_NAME] = { 'lambda': lambda_arn } path = '/foo/bar' module = 'foo_bar' operation = 'post' function = operation swagger['paths'][path] = { operation: { "responses": { "200": { "description": "A successful service status response." } }, "parameters": [ { "in": "body", "name": 'test_param', "schema": { "type": "string" } } ] } } expected_swagger = self.__copy_and_remove_lambda_dispatch_objects(swagger) self.__add_error_responses(expected_swagger, path, operation) self.__add_integration_object(expected_swagger, path, operation, lambda_arn, module, function) self.__add_default_expected_definitions(expected_swagger) self.__add_cors_options_operation(expected_swagger['paths'][path]) self.__add_cors_response_headers(expected_swagger['paths'][path][operation]) self.__add_operation_iam_security(expected_swagger['paths'][path][operation]) swagger_processor.process_swagger(swagger) self.__validate_swagger(expected_swagger, swagger)
def test_all_operations(self): swagger = self.__get_minimal_swagger() lambda_arn = 'TestLambda' swagger[swagger_processor.LAMBDA_DISPATCH_OBJECT_NAME] = { 'lambda': lambda_arn } path = '/test' test_path = swagger['paths'][path] = {} # all but options, which gets special handling when cors is enabled (which it is by default) all_operations = ['get', 'put', 'post', 'delete', 'head', 'patch'] for operation in all_operations: test_path[operation] = { "responses": { "200": { "description": "A successful service status response." } } } test_path['x-foo'] = {} # should be ignored expected_swagger = self.__copy_and_remove_lambda_dispatch_objects(swagger) for operation in all_operations: self.__add_error_responses(expected_swagger, path, operation) self.__add_integration_object(expected_swagger, path, operation, lambda_arn, 'test', operation) self.__add_cors_response_headers(expected_swagger['paths'][path][operation]) self.__add_operation_iam_security(expected_swagger['paths'][path][operation]) self.__add_cors_options_operation(expected_swagger['paths'][path]) self.__add_default_expected_definitions(expected_swagger) swagger_processor.process_swagger(swagger) self.__validate_swagger(expected_swagger, swagger)
def test_valid_swagger(self, mock_process_lambda_dispatch_objects, mock_process_interface_implementation_objects): swagger = { "swagger": "2.0", "info": { "version": "1.0.0", "title": "" }, "paths": {} } mock_context = mock.MagicMock() swagger_navigator_matcher = SwaggerNavigatorMatcher(swagger) swagger_processor.process_swagger(mock_context, swagger) mock_process_lambda_dispatch_objects.assert_called_with( mock_context, swagger_navigator_matcher) mock_process_interface_implementation_objects.assert_called_with( mock_context, swagger_navigator_matcher)