def test_with_one_path_method(self): function_name = "myfunction" swagger = { "paths": { "/path1": { "get": { "x-amazon-apigateway-integration": { "type": "aws_proxy", "uri": "someuri" } } } } } parser = SwaggerParser(swagger) parser._get_integration_function_name = Mock() parser._get_integration_function_name.return_value = function_name expected = [Api(path="/path1", method="get", function_name=function_name, cors=None)] result = parser.get_apis() self.assertEquals(expected, result) parser._get_integration_function_name.assert_called_with({ "x-amazon-apigateway-integration": { "type": "aws_proxy", "uri": "someuri" } })
def test_invalid_swagger(self, test_case_name, swagger): parser = SwaggerParser(swagger) result = parser.get_apis() expected = [] self.assertEquals(expected, result)
def _extract_from_serverless_api(self, logical_id, api_resource, collector): """ Extract APIs from AWS::Serverless::Api resource by reading and parsing Swagger documents. The result is added to the collector. Parameters ---------- logical_id : str Logical ID of the resource api_resource : dict Resource definition, including its properties collector : ApiCollector Instance of the API collector that where we will save the API information """ properties = api_resource.get("Properties", {}) body = properties.get("DefinitionBody") uri = properties.get("DefinitionUri") binary_media = properties.get("BinaryMediaTypes", []) stage_name = properties.get("StageName") stage_variables = properties.get("Variables") if not body and not uri: # Swagger is not found anywhere. LOG.debug( "Skipping resource '%s'. Swagger document not found in DefinitionBody and DefinitionUri", logical_id) return reader = SamSwaggerReader(definition_body=body, definition_uri=uri, working_dir=self.cwd) swagger = reader.read() parser = SwaggerParser(swagger) apis = parser.get_apis() LOG.debug("Found '%s' APIs in resource '%s'", len(apis), logical_id) collector.add_apis(logical_id, apis) collector.add_binary_media_types( logical_id, parser.get_binary_media_types()) # Binary media from swagger collector.add_binary_media_types( logical_id, binary_media) # Binary media specified on resource in template collector.add_stage_name(logical_id, stage_name) collector.add_stage_variables(logical_id, stage_variables)
def test_with_combination_of_paths_methods(self): function_name = "myfunction" swagger = { "paths": { "/path1": { "get": { "x-amazon-apigateway-integration": { "type": "aws_proxy", "uri": "someuri" } }, "delete": { "x-amazon-apigateway-integration": { "type": "aws_proxy", "uri": "someuri" } } }, "/path2": { "post": { "x-amazon-apigateway-integration": { "type": "aws_proxy", "uri": "someuri" } } } } } parser = SwaggerParser(swagger) parser._get_integration_function_name = Mock() parser._get_integration_function_name.return_value = function_name expected = { Api(path="/path1", method="get", function_name=function_name, cors=None), Api(path="/path1", method="delete", function_name=function_name, cors=None), Api(path="/path2", method="post", function_name=function_name, cors=None), } result = parser.get_apis() self.assertEquals(expected, set(result))
def test_does_not_have_function_name(self): swagger = { "paths": { "/path1": { "post": { "x-amazon-apigateway-integration": { "type": "aws_proxy", "uri": "someuri" } } } } } parser = SwaggerParser(swagger) parser._get_integration_function_name = Mock() parser._get_integration_function_name.return_value = None # Function Name could not be resolved expected = [] result = parser.get_apis() self.assertEquals(expected, result)