diff --git a/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/processors/ParameterProcessor.java b/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/processors/ParameterProcessor.java index 273a19fa8a..fde98ab36d 100644 --- a/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/processors/ParameterProcessor.java +++ b/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/processors/ParameterProcessor.java @@ -133,6 +133,13 @@ public List processParameters(List parameters) { } + for (Parameter parameter : processedPathLevelParameters) { + Schema schema = parameter.getSchema(); + if(schema != null){ + schemaProcessor.processSchema(schema); + } + } + return processedPathLevelParameters; } } \ No newline at end of file diff --git a/modules/swagger-parser-v3/src/test/java/io/swagger/v3/parser/processors/ParameterProcessorTest.java b/modules/swagger-parser-v3/src/test/java/io/swagger/v3/parser/processors/ParameterProcessorTest.java index 60e82e4197..318c0f0e49 100644 --- a/modules/swagger-parser-v3/src/test/java/io/swagger/v3/parser/processors/ParameterProcessorTest.java +++ b/modules/swagger-parser-v3/src/test/java/io/swagger/v3/parser/processors/ParameterProcessorTest.java @@ -13,10 +13,7 @@ import io.swagger.v3.oas.models.parameters.RequestBody; import io.swagger.v3.parser.ResolverCache; import io.swagger.v3.parser.models.RefFormat; -import mockit.FullVerifications; -import mockit.Injectable; -import mockit.Mocked; -import mockit.StrictExpectations; +import mockit.*; import org.testng.annotations.Test; @@ -44,7 +41,18 @@ public void testProcessParameters_TypesThatAreNotRefOrBody(@Injectable final Hea @Injectable final CookieParameter cookieParameter, @Injectable final PathParameter pathParameter) throws Exception { expectedModelProcessorCreation(); - + new Expectations() { + { + headerParameter.getSchema(); + result = null; + queryParameter.getSchema(); + result = null; + cookieParameter.getSchema(); + result = null; + pathParameter.getSchema(); + result = null; + } + }; final List processedParameters = new ParameterProcessor(cache, openAPI) .processParameters(Arrays.asList(headerParameter, queryParameter, @@ -78,6 +86,12 @@ public void testProcessParameters_RefToHeader( Parameter refParameter = new Parameter().$ref(ref); expectLoadingRefFromCache(ref, RefFormat.INTERNAL, resolvedHeaderParam); + new Expectations() { + { + resolvedHeaderParam.getSchema(); + result = null; + } + }; final List processedParameters = new ParameterProcessor(cache, openAPI) .processParameters(Arrays.asList(refParameter)); @@ -132,8 +146,6 @@ private void expectedModelProcessorCreation() { new SchemaProcessor(cache, openAPI); times = 1; result = modelProcessor; - - }}; } } diff --git a/modules/swagger-parser/src/test/java/io/swagger/parser/OpenAPIParserTest.java b/modules/swagger-parser/src/test/java/io/swagger/parser/OpenAPIParserTest.java index ca583b42b7..911755b0cb 100644 --- a/modules/swagger-parser/src/test/java/io/swagger/parser/OpenAPIParserTest.java +++ b/modules/swagger-parser/src/test/java/io/swagger/parser/OpenAPIParserTest.java @@ -1,15 +1,50 @@ package io.swagger.parser; +import io.swagger.v3.oas.models.Components; import io.swagger.v3.oas.models.OpenAPI; +import io.swagger.v3.oas.models.PathItem; +import io.swagger.v3.oas.models.media.Schema; +import io.swagger.v3.oas.models.parameters.Parameter; import io.swagger.v3.parser.core.models.ParseOptions; import io.swagger.v3.parser.core.models.SwaggerParseResult; import io.swagger.v3.core.util.Json; import org.junit.Test; +import java.util.List; +import java.util.Map; + import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertNotNull; public class OpenAPIParserTest { + @Test + public void testIssue749() { + ParseOptions options = new ParseOptions(); + options.setResolve(true); + SwaggerParseResult result = new OpenAPIParser().readLocation("issue749-main.yaml", null, options); + assertNotNull(result); + + OpenAPI openAPI = result.getOpenAPI(); + assertNotNull(openAPI); + + Components components = openAPI.getComponents(); + assertNotNull(components); + + PathItem pathItem = openAPI.getPaths().get("/some/ping"); + assertNotNull(pathItem); + List parameters = pathItem.getGet().getParameters(); + assertNotNull(parameters); + assertEquals(parameters.size(), 1); + assertEquals(parameters.get(0).getName(), "i"); + assertNotNull(parameters.get(0).getSchema()); + assertEquals(parameters.get(0).getSchema().get$ref(), "#/components/schemas/SomeId"); + + Map schemas = components.getSchemas(); + assertNotNull(schemas); + assertEquals(schemas.size(), 1); + assertNotNull(schemas.get("SomeId")); + } + @Test public void testSimple() { SwaggerParseResult result = new OpenAPIParser().readLocation("petstore.yaml", null, null); diff --git a/modules/swagger-parser/src/test/resources/issue749-main.yaml b/modules/swagger-parser/src/test/resources/issue749-main.yaml new file mode 100644 index 0000000000..0b907bc334 --- /dev/null +++ b/modules/swagger-parser/src/test/resources/issue749-main.yaml @@ -0,0 +1,22 @@ +openapi: 3.0.1 +info: + title: ping test + version: '1.0' +servers: + - url: 'http://localhost:8000/' +paths: + /some/ping: + get: + operationId: pingGet + parameters: + - name: i + in: query + description: Test + required: true + schema: + $ref: './issue749-reference.yaml#/SomeId' + responses: + '201': + description: OK +components: + schemas: {} \ No newline at end of file diff --git a/modules/swagger-parser/src/test/resources/issue749-reference.yaml b/modules/swagger-parser/src/test/resources/issue749-reference.yaml new file mode 100644 index 0000000000..8b9563818b --- /dev/null +++ b/modules/swagger-parser/src/test/resources/issue749-reference.yaml @@ -0,0 +1,5 @@ +SomeId: + type: integer + format: int32 + description: My value 123 + example: 123 \ No newline at end of file