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 01f69e1b0c..b8e5c4a7b8 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 @@ -569,6 +569,52 @@ public void testIssueSameRefsDifferentModelValid() { assertEquals(openAPI.getMessages().size(), 0); } + @Test + public void testSameComponentInRequestAndResponseHeaders() throws IOException { + String pathFile = FileUtils.readFileToString(new File("src/test/resources/same-header-different-place-domain.yaml"), "UTF-8"); + WireMock.stubFor(get(urlPathMatching("/issue-domain")) + .willReturn(aResponse() + .withStatus(HttpURLConnection.HTTP_OK) + .withHeader("Content-type", "application/json") + .withBody(pathFile + .getBytes(StandardCharsets.UTF_8)))); + + pathFile = FileUtils.readFileToString(new File("src/test/resources/same-header-different-place.yaml"), "UTF-8"); + pathFile = pathFile.replace("${dynamicPort}", String.valueOf(this.serverPort)); + + OpenAPIV3Parser parser = new OpenAPIV3Parser(); + ParseOptions options = new ParseOptions(); + options.setResolve(true); + options.setResolveFully(true); + final SwaggerParseResult openAPI = parser.readContents(pathFile, null, options); + Yaml.prettyPrint(openAPI); + + assertEquals(openAPI.getMessages().size(), 0); + } + + @Test + public void testSameComponentInRequestAndResponseHeadersValid() throws IOException { + String pathFile = FileUtils.readFileToString(new File("src/test/resources/same-header-different-place-domain.yaml"), "UTF-8"); + WireMock.stubFor(get(urlPathMatching("/issue-domain")) + .willReturn(aResponse() + .withStatus(HttpURLConnection.HTTP_OK) + .withHeader("Content-type", "application/json") + .withBody(pathFile + .getBytes(StandardCharsets.UTF_8)))); + + pathFile = FileUtils.readFileToString(new File("src/test/resources/same-header-different-place-valid.yaml"), "UTF-8"); + pathFile = pathFile.replace("${dynamicPort}", String.valueOf(this.serverPort)); + + OpenAPIV3Parser parser = new OpenAPIV3Parser(); + ParseOptions options = new ParseOptions(); + options.setResolve(true); + options.setResolveFully(true); + final SwaggerParseResult openAPI = parser.readContents(pathFile, null, options); + Yaml.prettyPrint(openAPI); + + assertEquals(openAPI.getMessages().size(), 0); + } + @Test public void testIssue1398() { ParseOptions options = new ParseOptions(); diff --git a/modules/swagger-parser-v3/src/test/resources/same-header-different-place-domain.yaml b/modules/swagger-parser-v3/src/test/resources/same-header-different-place-domain.yaml new file mode 100644 index 0000000000..cdc4356da0 --- /dev/null +++ b/modules/swagger-parser-v3/src/test/resources/same-header-different-place-domain.yaml @@ -0,0 +1,15 @@ +openapi: 3.0.0 + +components: + parameters: + testHeader: + name: testHeader + in: header + schema: + type: string + + anotherHeader: + name: testHeader + in: header + schema: + type: string \ No newline at end of file diff --git a/modules/swagger-parser-v3/src/test/resources/same-header-different-place-valid.yaml b/modules/swagger-parser-v3/src/test/resources/same-header-different-place-valid.yaml new file mode 100644 index 0000000000..550b144055 --- /dev/null +++ b/modules/swagger-parser-v3/src/test/resources/same-header-different-place-valid.yaml @@ -0,0 +1,25 @@ +openapi: 3.0.0 +info: + version: "1.0.0" + title: Simple Inventory API +paths: + /api: + get: + parameters: + - $ref: 'http://localhost:${dynamicPort}/issue-domain/#/components/parameters/testHeader' + responses: + '200': + description: yet another success + headers: + testHeader: + $ref: 'http://localhost:${dynamicPort}/issue-domain/#/components/parameters/anotherHeader' + /api2: + get: + parameters: + - $ref: 'http://localhost:${dynamicPort}/issue-domain/#/components/parameters/testHeader' + responses: + '200': + description: yet another success + headers: + testHeader: + $ref: 'http://localhost:${dynamicPort}/issue-domain/#/components/parameters/testHeader' \ No newline at end of file diff --git a/modules/swagger-parser-v3/src/test/resources/same-header-different-place.yaml b/modules/swagger-parser-v3/src/test/resources/same-header-different-place.yaml new file mode 100644 index 0000000000..0dc0860de6 --- /dev/null +++ b/modules/swagger-parser-v3/src/test/resources/same-header-different-place.yaml @@ -0,0 +1,25 @@ +openapi: 3.0.0 +info: + version: "1.0.0" + title: Simple Inventory API +paths: + /api: + get: + parameters: + - $ref: 'http://localhost:${dynamicPort}/issue-domain/#/components/parameters/testHeader' + responses: + '200': + description: yet another success + headers: + testHeader: + $ref: 'http://localhost:${dynamicPort}/issue-domain/#/components/parameters/testHeader' + /api2: + get: + parameters: + - $ref: 'http://localhost:${dynamicPort}/issue-domain/#/components/parameters/testHeader' + responses: + '200': + description: yet another success + headers: + testHeader: + $ref: 'http://localhost:${dynamicPort}/issue-domain/#/components/parameters/testHeader' \ No newline at end of file