Skip to content

Commit

Permalink
Merge pull request #1482 from volkodava/fix-nested-defs-in-subfolder
Browse files Browse the repository at this point in the history
fixed bug related to nested definitions within subfolder
  • Loading branch information
gracekarina committed Nov 6, 2020
2 parents 33f6b4f + a92a760 commit 8e6a1b3
Show file tree
Hide file tree
Showing 14 changed files with 158 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package io.swagger.v3.parser.processors;


import java.io.File;
import java.net.URI;
import java.nio.file.Paths;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.List;
Expand Down Expand Up @@ -111,7 +113,12 @@ public String processRefToExternalSchema(String $ref, RefFormat refFormat) {
if (schema.get$ref() != null) {
RefFormat ref = computeRefFormat(schema.get$ref());
if (isAnExternalRefFormat(ref)) {
schema.set$ref(processRefToExternalSchema(schema.get$ref(), ref));
String schemaFullRef = schema.get$ref();
String parent = file.substring(0, file.lastIndexOf(File.separatorChar));
if (!parent.isEmpty()) {
schemaFullRef = Paths.get(parent, schemaFullRef).normalize().toString();
}
schema.set$ref(processRefToExternalSchema(schemaFullRef, ref));
} else {
processRefToExternalSchema(file + schema.get$ref(), RefFormat.RELATIVE);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1296,6 +1296,69 @@ public void testLoadExternalNestedDefinitions() throws Exception {
assertEquals( definitions.get("k").getTitle(), "k-definition");
}

@Test
public void testLoadExternalNestedDefinitionsWithReferenceWithinSubfolder() throws Exception {
OpenAPIV3Parser parser = new OpenAPIV3Parser();
final OpenAPI openAPI = parser.read("src/test/resources/nested-references-2/main.yaml");

Map<String, Schema> definitions = openAPI.getComponents().getSchemas();
assertTrue(definitions.containsKey("GreetingResponse"));
assertTrue(definitions.containsKey("GreetingMessage"));
assertTrue(definitions.containsKey("greeting-message"));

String greetingMessageRef = ((Schema) definitions.get("GreetingResponse")
.getProperties().get("GreetingMessage")).get$ref();

assertEquals(greetingMessageRef,"#/components/schemas/GreetingMessage");
assertEquals(definitions.get("GreetingMessage").get$ref(),"#/components/schemas/greeting-message");

String description = ((Schema)definitions.get("greeting-message")
.getProperties().get("Text")).getDescription();
assertEquals(description,"Text message");
}

@Test
public void testLoadExternalNestedDefinitionsWithReferenceWithinSameFolder() throws Exception {
OpenAPIV3Parser parser = new OpenAPIV3Parser();
final OpenAPI openAPI = parser.read("src/test/resources/nested-references-3/main.yaml");

Map<String, Schema> definitions = openAPI.getComponents().getSchemas();
assertTrue(definitions.containsKey("GreetingResponse"));
assertTrue(definitions.containsKey("GreetingMessage"));
assertTrue(definitions.containsKey("greeting-message"));

String greetingMessageRef = ((Schema) definitions.get("GreetingResponse")
.getProperties().get("GreetingMessage")).get$ref();

assertEquals(greetingMessageRef,"#/components/schemas/GreetingMessage");
assertEquals(definitions.get("GreetingMessage").get$ref(),"#/components/schemas/greeting-message");

String description = ((Schema)definitions.get("greeting-message")
.getProperties().get("Text")).getDescription();
assertEquals(description,"Text message");
}

@Test
public void testLoadExternalNestedDefinitionsWithReferenceOnDifferentFolderLevels() throws Exception {
OpenAPIV3Parser parser = new OpenAPIV3Parser();
final OpenAPI openAPI = parser.read("src/test/resources/nested-references-4/main.yaml");

Map<String, Schema> definitions = openAPI.getComponents().getSchemas();
assertTrue(definitions.containsKey("GreetingResponse"));
assertTrue(definitions.containsKey("GreetingMessage"));
assertTrue(definitions.containsKey("greeting-message"));

String greetingMessageRef = ((Schema) definitions.get("GreetingResponse")
.getProperties().get("GreetingMessage")).get$ref();

assertEquals(greetingMessageRef,"#/components/schemas/GreetingMessage");
assertEquals(definitions.get("GreetingMessage").get$ref(),"#/components/schemas/greeting-message");

String description = ((Schema)definitions.get("greeting-message")
.getProperties().get("Text")).getDescription();
assertEquals(description,"Text message");
}

@Test
public void testPetstore() throws Exception {
OpenAPIV3Parser parser = new OpenAPIV3Parser();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
---
openapi: "3.0.0"
info:
title: test
version: '0.0.0'
paths: {}
components:
schemas:
GreetingResponse:
$ref: "./schemas/greeting-response.yaml"
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
type: object
properties:
Text:
description: Text message
type: string
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
type: object
properties:
GreetingMessage:
$ref: ./shared-defs.yaml#/components/schemas/GreetingMessage
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
---
openapi: "3.0.0"
info:
title: shared test
version: '0.0.0'
paths: { }
components:
schemas:
GreetingMessage:
$ref: ./greeting-message.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
type: object
properties:
Text:
description: Text message
type: string
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
type: object
properties:
GreetingMessage:
$ref: ./shared-defs.yaml#/components/schemas/GreetingMessage
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
---
openapi: "3.0.0"
info:
title: test
version: '0.0.0'
paths: {}
components:
schemas:
GreetingResponse:
$ref: "./greeting-response.yaml"
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
---
openapi: "3.0.0"
info:
title: shared test
version: '0.0.0'
paths: { }
components:
schemas:
GreetingMessage:
$ref: ./greeting-message.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
---
openapi: "3.0.0"
info:
title: test
version: '0.0.0'
paths: {}
components:
schemas:
GreetingResponse:
$ref: "./schemas/sub/greeting-response.yaml"
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
---
openapi: "3.0.0"
info:
title: shared test
version: '0.0.0'
paths: { }
components:
schemas:
GreetingMessage:
$ref: ./sub/greeting-message.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
type: object
properties:
Text:
description: Text message
type: string
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
type: object
properties:
GreetingMessage:
$ref: ../shared-defs.yaml#/components/schemas/GreetingMessage

0 comments on commit 8e6a1b3

Please sign in to comment.