Skip to content

Commit 4d56743

Browse files
committed
add tests
1 parent 3e03257 commit 4d56743

File tree

6 files changed

+206
-14
lines changed

6 files changed

+206
-14
lines changed

modules/swagger-parser-v3/src/test/java/io/swagger/v3/parser/test/OpenAPIV3ParserTest.java

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import java.net.MalformedURLException;
3333
import java.net.URL;
3434
import java.util.*;
35+
import java.util.stream.Collectors;
3536

3637
import static java.util.Arrays.asList;
3738
import static java.util.Collections.emptyList;
@@ -3021,7 +3022,7 @@ public void testRelativePathIssue1543() {
30213022
ParseOptions options = new ParseOptions();
30223023
options.setResolveFully(true);
30233024
options.setResolve(true);
3024-
SwaggerParseResult readResult = parser.readLocation("src/test/resources/issue-1543/openapi.json", null, options);
3025+
SwaggerParseResult readResult = parser.readLocation("src/test/resources/issue-1543/openapi30.json", null, options);
30253026

30263027
if (readResult.getMessages().size() > 0) {
30273028
Assert.assertFalse(readResult.getMessages().get(0).contains("end -1"));
@@ -3437,17 +3438,4 @@ public void testVersion(){
34373438
SwaggerParseResult parseResult = openApiParser.readLocation("version-missing.yaml", null, options);
34383439
assertEquals(parseResult.getMessages().get(0), "attribute info.version is missing");
34393440
}
3440-
3441-
@Test(description = "Duplicated parameter name with different locations")
3442-
public void testDuplicatedParameterNameFromRef() {
3443-
OpenAPIV3Parser openApiParser = new OpenAPIV3Parser();
3444-
ParseOptions options = new ParseOptions();
3445-
options.setResolve(true);
3446-
options.setFlatten(true);
3447-
OpenAPI openAPI = openApiParser.read("issue-2102/openapi.json", null, options);
3448-
3449-
assertEquals(openAPI.getPaths().get("/myoperation").getGet().getParameters().size(), 2);
3450-
assertEquals((int) openAPI.getPaths().get("/myoperation").getGet().getParameters().stream().filter(param -> param.getName().equals("myParam")).count(), 2);
3451-
3452-
}
34533441
}
Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
package io.swagger.v3.parser.test;
2+
3+
import io.swagger.v3.oas.models.OpenAPI;
4+
import io.swagger.v3.oas.models.parameters.Parameter;
5+
import io.swagger.v3.parser.OpenAPIV3Parser;
6+
import io.swagger.v3.parser.core.models.ParseOptions;
7+
import org.testng.annotations.Test;
8+
9+
import java.util.List;
10+
import java.util.stream.Collectors;
11+
12+
import static org.testng.Assert.assertEquals;
13+
import static org.testng.Assert.assertTrue;
14+
15+
public class ParserDeduplicationTest {
16+
17+
@Test
18+
public void testIssue2102TwoRefsSameNameDifferentIn31() {
19+
ParseOptions options = new ParseOptions();
20+
options.setResolve(true);
21+
options.setResolveCombinators(true);
22+
options.setResolveFully(true);
23+
24+
OpenAPI openAPI = new OpenAPIV3Parser()
25+
.read("issue-2102/openapi31.json", null, options);
26+
27+
List<Parameter> params =
28+
openAPI.getPaths()
29+
.get("/myoperation")
30+
.getGet()
31+
.getParameters();
32+
33+
assertEquals(params.size(), 2);
34+
List<String> paramIns = params.stream().map(Parameter::getIn).collect(Collectors.toList());
35+
assertTrue(paramIns.contains("query"));
36+
assertTrue(paramIns.contains("header"));
37+
}
38+
39+
40+
@Test(description = "Duplicated parameter name with different locations")
41+
public void testDuplicatedParameterNameFromRef() {
42+
OpenAPIV3Parser openApiParser = new OpenAPIV3Parser();
43+
ParseOptions options = new ParseOptions();
44+
options.setResolve(true);
45+
options.setFlatten(true);
46+
OpenAPI openAPI = openApiParser.read("issue-2102/openapi30.json", null, options);
47+
48+
assertEquals(openAPI.getPaths().get("/myoperation").getGet().getParameters().size(), 2);
49+
assertEquals((int) openAPI.getPaths().get("/myoperation").getGet().getParameters().stream().filter(param -> param.getName().equals("myParam")).count(), 2);
50+
}
51+
52+
@Test(description = "Duplicated parameter name with different locations")
53+
public void testDuplicatedParameterNameFromRefResolveFullyResolveCombinators() {
54+
OpenAPIV3Parser openApiParser = new OpenAPIV3Parser();
55+
ParseOptions options = new ParseOptions();
56+
options.setResolve(true);
57+
options.setResolveCombinators(true);
58+
options.setResolveFully(true);
59+
OpenAPI openAPI = openApiParser.read("issue-2102/openapi30.json", null, options);
60+
61+
assertEquals(openAPI.getPaths().get("/myoperation").getGet().getParameters().size(), 2);
62+
assertEquals((int) openAPI.getPaths().get("/myoperation").getGet().getParameters().stream().filter(param -> param.getName().equals("myParam")).count(), 2);
63+
}
64+
65+
@Test
66+
public void testInlineAndRefSameNameDifferentIn() {
67+
ParseOptions options = new ParseOptions();
68+
options.setResolve(true);
69+
options.setResolveFully(true);
70+
71+
OpenAPI openAPI = new OpenAPIV3Parser()
72+
.read("issue-2102/openapi30mixedRef.yaml", null, options);
73+
74+
List<Parameter> params =
75+
openAPI.getPaths()
76+
.get("/mixed")
77+
.getGet()
78+
.getParameters();
79+
80+
assertEquals(params.size(), 2);
81+
List<String> paramDescriptions = params.stream()
82+
.map(p -> p.getIn() + ":" + p.getName())
83+
.collect(Collectors.toList());
84+
assertTrue(paramDescriptions.contains("query:myParam"));
85+
assertTrue(paramDescriptions.contains("header:myParam"));
86+
}
87+
88+
@Test
89+
public void testInlineAndRefSameNameSameIn() {
90+
ParseOptions options = new ParseOptions();
91+
options.setResolve(true);
92+
options.setResolveFully(true);
93+
94+
OpenAPI openAPI = new OpenAPIV3Parser()
95+
.read("issue-2102/openapi30mixedRef.yaml", null, options);
96+
97+
List<Parameter> params =
98+
openAPI.getPaths()
99+
.get("/mixed")
100+
.getGet()
101+
.getParameters();
102+
103+
assertEquals(params.size(), 2);
104+
List<String> paramDescriptions = params.stream()
105+
.map(p -> p.getIn() + ":" + p.getName())
106+
.collect(Collectors.toList());
107+
assertTrue(paramDescriptions.contains("query:myParam"));
108+
assertTrue(paramDescriptions.contains("header:myParam"));
109+
}
110+
111+
@Test
112+
public void testOperationLevel_sameNameSameIn_refOverridesInline() {
113+
ParseOptions options = new ParseOptions();
114+
options.setResolve(true);
115+
options.setResolveFully(true);
116+
117+
OpenAPI openAPI = new OpenAPIV3Parser()
118+
.read("issue-2102/openapi30sameNameSameLocation.yaml", null, options);
119+
120+
List<Parameter> params =
121+
openAPI.getPaths()
122+
.get("/duplicate")
123+
.getGet()
124+
.getParameters();
125+
126+
assertEquals(params.size(), 1);
127+
128+
Parameter p = params.get(0);
129+
assertEquals(p.getName(), "myParam");
130+
assertEquals(p.getIn(), "query");
131+
assertEquals(p.getSchema().getFormat(), "date-time");
132+
}
133+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
openapi: 3.0.0
2+
paths:
3+
/mixed:
4+
get:
5+
parameters:
6+
- in: query
7+
name: myParam
8+
schema: { type: string }
9+
- $ref: '#/components/parameters/headerMyParam'
10+
responses:
11+
'200':
12+
description: OK
13+
components:
14+
parameters:
15+
headerMyParam:
16+
in: header
17+
name: myParam
18+
schema: { type: string }
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
openapi: 3.0.0
2+
paths:
3+
/duplicate:
4+
get:
5+
parameters:
6+
- in: query
7+
name: myParam
8+
schema: { type: string, format: uuid }
9+
- $ref: '#/components/parameters/queryMyParam'
10+
responses:
11+
'200':
12+
description: OK
13+
components:
14+
parameters:
15+
queryMyParam:
16+
in: query
17+
name: myParam
18+
schema: { type: string, format: date-time }
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
{
2+
"openapi": "3.1.0",
3+
"paths": {
4+
"/myoperation": {
5+
"get": {
6+
"parameters": [
7+
{"$ref": "#/components/parameters/schemaParam1"},
8+
{"$ref": "#/components/parameters/schemaParam2"}
9+
],
10+
"responses": {
11+
"200": {
12+
"description": "OK",
13+
"content": {
14+
"text/plain": {
15+
"schema": {
16+
"type": "string"
17+
}
18+
}}}}}}},
19+
"components": {
20+
"parameters": {
21+
"schemaParam1": {
22+
"name": "myParam",
23+
"in": "query",
24+
"schema": {
25+
"type": "string"
26+
}
27+
},
28+
"schemaParam2": {
29+
"name": "myParam",
30+
"in": "header",
31+
"schema": {
32+
"type": "string"
33+
}
34+
}}}
35+
}

0 commit comments

Comments
 (0)