Skip to content

Commit 6f2723d

Browse files
authored
Merge pull request #577 from swagger-api/feature/issues-tests
Feature/issues tests
2 parents a857ac7 + 4d1c71d commit 6f2723d

File tree

4 files changed

+84
-50
lines changed

4 files changed

+84
-50
lines changed

modules/swagger-parser-v2-converter/src/main/java/io/swagger/v3/parser/converter/SwaggerConverter.java

Lines changed: 50 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,35 @@
11
package io.swagger.v3.parser.converter;
22

3+
import io.swagger.models.ArrayModel;
4+
import io.swagger.models.ComposedModel;
5+
import io.swagger.models.ExternalDocs;
6+
import io.swagger.models.Model;
7+
import io.swagger.models.ModelImpl;
8+
import io.swagger.models.Path;
9+
import io.swagger.models.RefModel;
10+
import io.swagger.models.RefPath;
11+
import io.swagger.models.RefResponse;
12+
import io.swagger.models.Response;
13+
import io.swagger.models.Scheme;
14+
import io.swagger.models.SecurityRequirement;
15+
import io.swagger.models.Swagger;
16+
import io.swagger.models.auth.ApiKeyAuthDefinition;
17+
import io.swagger.models.auth.OAuth2Definition;
18+
import io.swagger.models.auth.SecuritySchemeDefinition;
19+
import io.swagger.models.parameters.AbstractSerializableParameter;
20+
import io.swagger.models.parameters.BodyParameter;
21+
import io.swagger.models.parameters.RefParameter;
22+
import io.swagger.models.parameters.SerializableParameter;
23+
import io.swagger.models.properties.AbstractNumericProperty;
24+
import io.swagger.models.properties.ArrayProperty;
25+
import io.swagger.models.properties.MapProperty;
26+
import io.swagger.models.properties.ObjectProperty;
27+
import io.swagger.models.properties.Property;
28+
import io.swagger.models.properties.RefProperty;
29+
import io.swagger.parser.SwaggerParser;
30+
import io.swagger.parser.SwaggerResolver;
31+
import io.swagger.parser.util.SwaggerDeserializationResult;
32+
import io.swagger.util.Json;
333
import io.swagger.v3.oas.models.Components;
434
import io.swagger.v3.oas.models.ExternalDocumentation;
535
import io.swagger.v3.oas.models.OpenAPI;
@@ -32,36 +62,7 @@
3262
import io.swagger.v3.parser.core.models.ParseOptions;
3363
import io.swagger.v3.parser.core.models.SwaggerParseResult;
3464
import org.apache.commons.lang3.StringUtils;
35-
import io.swagger.models.ArrayModel;
36-
import io.swagger.models.ComposedModel;
37-
import io.swagger.models.ExternalDocs;
38-
import io.swagger.models.Model;
39-
import io.swagger.models.ModelImpl;
40-
import io.swagger.models.Path;
41-
import io.swagger.models.RefModel;
42-
import io.swagger.models.RefPath;
43-
import io.swagger.models.RefResponse;
44-
import io.swagger.models.Response;
45-
import io.swagger.models.Scheme;
46-
import io.swagger.models.SecurityRequirement;
47-
import io.swagger.models.Swagger;
48-
import io.swagger.models.auth.ApiKeyAuthDefinition;
49-
import io.swagger.models.auth.OAuth2Definition;
50-
import io.swagger.models.auth.SecuritySchemeDefinition;
51-
import io.swagger.models.parameters.AbstractSerializableParameter;
52-
import io.swagger.models.parameters.BodyParameter;
53-
import io.swagger.models.parameters.RefParameter;
54-
import io.swagger.models.parameters.SerializableParameter;
55-
import io.swagger.models.properties.AbstractNumericProperty;
56-
import io.swagger.models.properties.ArrayProperty;
57-
import io.swagger.models.properties.MapProperty;
58-
import io.swagger.models.properties.ObjectProperty;
59-
import io.swagger.models.properties.Property;
60-
import io.swagger.models.properties.RefProperty;
61-
import io.swagger.parser.SwaggerParser;
62-
import io.swagger.parser.SwaggerResolver;
63-
import io.swagger.parser.util.SwaggerDeserializationResult;
64-
import io.swagger.util.Json;
65+
6566
import java.math.BigDecimal;
6667
import java.util.ArrayList;
6768
import java.util.Arrays;
@@ -73,6 +74,7 @@
7374
public class SwaggerConverter implements SwaggerParserExtension {
7475
private List<String> globalConsumes = new ArrayList<>();
7576
private List<String> globalProduces = new ArrayList<>();
77+
private Components components = new Components();
7678

7779
@Override
7880
public SwaggerParseResult readLocation(String url, List<AuthorizationValue> auths, ParseOptions options) {
@@ -88,7 +90,8 @@ public SwaggerParseResult readLocation(String url, List<AuthorizationValue> auth
8890

8991
@Override
9092
public SwaggerParseResult readContents(String swaggerAsString, List<AuthorizationValue> auth, ParseOptions options) {
91-
SwaggerDeserializationResult result = new SwaggerParser().readWithInfo(swaggerAsString);
93+
SwaggerDeserializationResult result = new SwaggerParser().readWithInfo(swaggerAsString, options == null ?
94+
true : options.isResolve());
9295

9396
if (options != null) {
9497
if (options.isResolve()) {
@@ -177,16 +180,6 @@ public SwaggerParseResult convert(SwaggerDeserializationResult parse) {
177180
}
178181
}
179182

180-
Paths v3Paths = new Paths();
181-
for (String pathname : swagger.getPaths().keySet()) {
182-
io.swagger.models.Path v2Path = swagger.getPath(pathname);
183-
PathItem v3Path = convert(v2Path);
184-
v3Paths.put(pathname, v3Path);
185-
}
186-
openAPI.setPaths(v3Paths);
187-
188-
Components components = new Components();
189-
190183
if (swagger.getParameters() != null) {
191184
swagger.getParameters().forEach((k, v) -> {
192185
if ("body".equals(v.getIn())) {
@@ -199,6 +192,14 @@ public SwaggerParseResult convert(SwaggerDeserializationResult parse) {
199192
});
200193
}
201194

195+
Paths v3Paths = new Paths();
196+
for (String pathname : swagger.getPaths().keySet()) {
197+
io.swagger.models.Path v2Path = swagger.getPath(pathname);
198+
PathItem v3Path = convert(v2Path);
199+
v3Paths.put(pathname, v3Path);
200+
}
201+
openAPI.setPaths(v3Paths);
202+
202203
if (swagger.getResponses() != null) {
203204
swagger.getResponses().forEach((k, v) -> components.addResponses(k, convert(v)));
204205
}
@@ -863,8 +864,14 @@ public Parameter convert(io.swagger.models.parameters.Parameter v2Parameter) {
863864

864865
RefParameter ref = (RefParameter) v2Parameter;
865866
if (ref.get$ref().indexOf("#/parameters") == 0) {
866-
867-
String updatedRef = "#/components/parameters" + ref.get$ref().substring("#/parameters".length());
867+
String updatedRef = "#/components/";
868+
if (components.getRequestBodies() != null &&
869+
components.getRequestBodies().get(ref.getSimpleRef()) != null) {
870+
updatedRef += "requestBodies";
871+
} else {
872+
updatedRef += "parameters";
873+
}
874+
updatedRef += ref.get$ref().substring("#/parameters".length());
868875
ref.set$ref(updatedRef);
869876
}
870877

modules/swagger-parser-v2-converter/src/test/java/io/swagger/parser/test/V2ConverterTest.java

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,9 @@
1414
import io.swagger.v3.oas.models.security.OAuthFlow;
1515
import io.swagger.v3.oas.models.security.SecurityScheme;
1616
import io.swagger.v3.oas.models.tags.Tag;
17-
import io.swagger.v3.parser.core.models.SwaggerParseResult;
1817
import io.swagger.v3.parser.converter.SwaggerConverter;
18+
import io.swagger.v3.parser.core.models.ParseOptions;
19+
import io.swagger.v3.parser.core.models.SwaggerParseResult;
1920
import org.testng.annotations.Test;
2021

2122
import java.io.IOException;
@@ -135,6 +136,7 @@ public class V2ConverterTest {
135136
private static final long DEFAULT_VALUE = 11L;
136137
private static final long EXAMPLE_8_NUMBER = 8L;
137138
private static final long EXAMPLE_42_NUMBER = 42L;
139+
public static final String REQUEST_BODY_FORMEMAIL = "#/components/requestBodies/formEmail";
138140

139141
@Test
140142
public void testConvertPetstore() throws Exception {
@@ -170,7 +172,7 @@ public void testIssue1() throws Exception {
170172
assertEquals(ENUM_SIZE, arraySchema.getItems().getEnum().size());
171173
}
172174

173-
@Test(description = "Response Codes")
175+
@Test(description = "Response Code")
174176
public void testIssue2() throws Exception {
175177
OpenAPI oas = getConvertedOpenAPIFromJsonFile(ISSUE_2_JSON);
176178
assertEquals(REQUIRED_SIZE, oas.getPaths().get(API_BATCH_PATH).getGet().getResponses().size());
@@ -292,7 +294,14 @@ public void testIssue16() throws Exception {
292294
@Test(description = "Referenced parameters are converted incorrectly")
293295
public void testIssue17() throws Exception {
294296
OpenAPI oas = getConvertedOpenAPIFromJsonFile(ISSUE_17_JSON);
295-
assertNotNull(oas);
297+
Map<String, RequestBody> requestBodies = oas.getComponents().getRequestBodies();
298+
assertNotNull(requestBodies.get("formEmail").getContent().get("multipart/form-data"));
299+
assertNotNull(requestBodies.get("formPassword").getContent().get("multipart/form-data"));
300+
assertNotNull(requestBodies.get("bodyParam").getContent().get("*/*"));
301+
assertEquals(oas.getPaths().get("/formPost").getPost().getParameters().get(0).get$ref(),
302+
REQUEST_BODY_FORMEMAIL);
303+
assertNotNull(oas.getPaths().get("/report/{userId}").getGet().getRequestBody().
304+
getContent().get("multipart/form-data").getSchema().getProperties().get("limitForm"));
296305
}
297306

298307
@Test(description = "External Docs in Operations")
@@ -364,7 +373,8 @@ public void testIssue23() throws Exception {
364373
@Test(description = "Covert path item $refs")
365374
public void testIssue25() throws Exception {
366375
OpenAPI oas = getConvertedOpenAPIFromJsonFile(ISSUE_25_JSON);
367-
assertNull(oas);
376+
assertNotNull(oas);
377+
assertEquals(oas.getPaths().get("/foo2").get$ref(), "#/paths/~1foo");
368378
}
369379

370380
@Test(description = "Convert allOff")
@@ -468,8 +478,9 @@ public void testIssue36() throws Exception {
468478
private OpenAPI getConvertedOpenAPIFromJsonFile(String file) throws IOException, URISyntaxException {
469479
SwaggerConverter converter = new SwaggerConverter();
470480
String swaggerAsString = new String(Files.readAllBytes(Paths.get(getClass().getClassLoader().getResource(file).toURI())));
471-
472-
SwaggerParseResult result = converter.readContents(swaggerAsString, null, null);
481+
ParseOptions parseOptions = new ParseOptions();
482+
parseOptions.setResolve(false);
483+
SwaggerParseResult result = converter.readContents(swaggerAsString, null, parseOptions);
473484
assertNotNull(result);
474485
return result.getOpenAPI();
475486
}

modules/swagger-parser-v2-converter/src/test/resources/issue-17.json

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,22 @@
1313
},
1414
{
1515
"$ref": "#/parameters/dateRangeParam"
16+
},
17+
{
18+
"name": "limit",
19+
"in": "query",
20+
"description": "number of pets to return",
21+
"type": "string",
22+
"x-example": "value"
23+
},
24+
{
25+
26+
"name": "limitForm",
27+
"in": "formData",
28+
"type": "string",
29+
"format": "email",
30+
"required": true
31+
1632
}
1733
],
1834
"responses": {

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,7 @@
249249
</repository>
250250
</repositories>
251251
<properties>
252-
<swagger-parser-v2-version>1.0.28</swagger-parser-v2-version>
252+
<swagger-parser-v2-version>1.0.33-SNAPSHOT</swagger-parser-v2-version>
253253
<commons-io-version>2.4</commons-io-version>
254254
<slf4j-version>1.6.3</slf4j-version>
255255
<swagger-core-version>2.0.0-SNAPSHOT</swagger-core-version>

0 commit comments

Comments
 (0)