From 22b1f4310d98ade6174b67eda7147e903a806121 Mon Sep 17 00:00:00 2001 From: Mohammed Rizwan Date: Fri, 6 Jul 2018 18:49:32 +0530 Subject: [PATCH 1/4] Fix for 749 $ref in external file in parameter with resolve option true --- .../swagger/v3/parser/processors/ParameterProcessor.java | 7 +++++++ 1 file changed, 7 insertions(+) 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 From f26048161cc49f645f6695c4667c6248e0b40764 Mon Sep 17 00:00:00 2001 From: Mohammed Rizwan Date: Sat, 7 Jul 2018 02:49:23 +0530 Subject: [PATCH 2/4] Adapt tests for issue 749 --- .../processors/ParameterProcessorTest.java | 25 +++++++++++++------ 1 file changed, 18 insertions(+), 7 deletions(-) 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..4c27544f4f 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,17 @@ public void testProcessParameters_TypesThatAreNotRefOrBody(@Injectable final Hea @Injectable final CookieParameter cookieParameter, @Injectable final PathParameter pathParameter) throws Exception { expectedModelProcessorCreation(); - + new Expectations() { + { + headerParameter.getSchema(); + 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 +85,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 +145,6 @@ private void expectedModelProcessorCreation() { new SchemaProcessor(cache, openAPI); times = 1; result = modelProcessor; - - }}; } } From 94910e5a3bb2d2fe988c6d1b495c154b207f597e Mon Sep 17 00:00:00 2001 From: Mohammed Rizwan Date: Sat, 7 Jul 2018 02:59:43 +0530 Subject: [PATCH 3/4] Adapt test for issue 749 --- .../io/swagger/v3/parser/processors/ParameterProcessorTest.java | 1 + 1 file changed, 1 insertion(+) 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 4c27544f4f..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 @@ -44,6 +44,7 @@ public void testProcessParameters_TypesThatAreNotRefOrBody(@Injectable final Hea new Expectations() { { headerParameter.getSchema(); + result = null; queryParameter.getSchema(); result = null; cookieParameter.getSchema(); From 4365211d1ec084a1ea8faab928e0bd3f1cb06198 Mon Sep 17 00:00:00 2001 From: Mohammed Rizwan Date: Fri, 13 Jul 2018 21:27:49 +0530 Subject: [PATCH 4/4] Adding junits for issue 749 --- .../io/swagger/parser/OpenAPIParserTest.java | 35 +++++++++++++++++++ .../src/test/resources/issue749-main.yaml | 22 ++++++++++++ .../test/resources/issue749-reference.yaml | 5 +++ 3 files changed, 62 insertions(+) create mode 100644 modules/swagger-parser/src/test/resources/issue749-main.yaml create mode 100644 modules/swagger-parser/src/test/resources/issue749-reference.yaml 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