From 3062b9f7820661d3e388de6e39d292cac995cda1 Mon Sep 17 00:00:00 2001 From: gracekarina Date: Fri, 12 Jan 2018 07:49:51 -0500 Subject: [PATCH] fix resolve combinators and test to fix PR#233 --- .../swagger/v3/parser/util/ResolverFully.java | 3 +- .../v3/parser/test/OpenAPIV3ParserTest.java | 14 ++++++++ .../src/test/resources/allOfAndRef.yaml | 35 +++++++++++++++++++ 3 files changed, 50 insertions(+), 2 deletions(-) create mode 100644 modules/swagger-parser-v3/src/test/resources/allOfAndRef.yaml diff --git a/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/util/ResolverFully.java b/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/util/ResolverFully.java index 00c7dfd4a7..7b2b35b1c3 100644 --- a/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/util/ResolverFully.java +++ b/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/util/ResolverFully.java @@ -223,9 +223,8 @@ public Schema resolveSchema(Schema schema) { model.addExtension(key, composedSchema.getExtensions().get(key)); } } - return model; } - + return model; } else if (composedSchema.getOneOf() != null) { Schema resolved; List list = new ArrayList<>(); diff --git a/modules/swagger-parser-v3/src/test/java/io/swagger/v3/parser/test/OpenAPIV3ParserTest.java b/modules/swagger-parser-v3/src/test/java/io/swagger/v3/parser/test/OpenAPIV3ParserTest.java index c073793bd5..eb23d07c69 100644 --- a/modules/swagger-parser-v3/src/test/java/io/swagger/v3/parser/test/OpenAPIV3ParserTest.java +++ b/modules/swagger-parser-v3/src/test/java/io/swagger/v3/parser/test/OpenAPIV3ParserTest.java @@ -314,6 +314,20 @@ public void testRefAdditionalProperties() throws Exception { Assert.assertNotNull(openAPI.getComponents().getSchemas().get("result")); } + @Test + public void testRefAndInlineAllOf(@Injectable final List auths) throws Exception { + ParseOptions options = new ParseOptions(); + options.setResolve(true); + options.setResolveFully(true); + OpenAPI openAPI = new OpenAPIV3Parser().read("src/test/resources/allOfAndRef.yaml",auths,options); + + Assert.assertNotNull(openAPI); + Assert.assertTrue(openAPI.getComponents().getSchemas().size() == 2); + Assert.assertNotNull(openAPI.getComponents().getSchemas().get("UserEx")); + Assert.assertNotNull(openAPI.getComponents().getSchemas().get("User")); + Assert.assertTrue(openAPI.getPaths().get("/refToAllOf").getGet().getResponses().get("200").getContent().get("application/json").getSchema().getProperties().size() == 2); + } + private static int getDynamicPort() { return new Random().ints(10000, 20000).findFirst().getAsInt(); diff --git a/modules/swagger-parser-v3/src/test/resources/allOfAndRef.yaml b/modules/swagger-parser-v3/src/test/resources/allOfAndRef.yaml new file mode 100644 index 0000000000..9e7540ab97 --- /dev/null +++ b/modules/swagger-parser-v3/src/test/resources/allOfAndRef.yaml @@ -0,0 +1,35 @@ +openapi: 3.0.0 +servers: [] +info: + version: 0.1.1 + title: 'VirtServer, allOf and $ref' +paths: + /refToAllOf: + get: + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/UserEx' +components: + schemas: + User: + type: object + properties: + username: + type: string + example: trillian + required: + - username + UserEx: + allOf: + - $ref: '#/components/schemas/User' + - type: object + properties: + id: + type: integer + example: 4 + required: + - id \ No newline at end of file