Skip to content

Commit 0246615

Browse files
author
Scott Russell
committed
2 parents 8fa7861 + 81d0a1d commit 0246615

File tree

5 files changed

+212
-4
lines changed

5 files changed

+212
-4
lines changed

modules/swagger-parser-core/src/main/java/io/swagger/v3/parser/core/models/ParseOptions.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ public class ParseOptions {
55
private boolean resolveCombinators = true;
66
private boolean resolveFully;
77
private boolean flatten;
8+
private boolean skipMatches;
89

910
public boolean isResolve() {
1011
return resolve;
@@ -33,4 +34,12 @@ public void setResolveFully(boolean resolveFully) {
3334
public boolean isFlatten() { return flatten; }
3435

3536
public void setFlatten(boolean flatten) { this.flatten = flatten; }
37+
38+
public boolean isSkipMatches() {
39+
return skipMatches;
40+
}
41+
42+
public void setSkipMatches(boolean skipMatches) {
43+
this.skipMatches = skipMatches;
44+
}
3645
}

modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/OpenAPIV3Parser.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -68,9 +68,10 @@ public SwaggerParseResult readLocation(String url, List<AuthorizationValue> auth
6868
if (options.isResolveFully()) {
6969
result.setOpenAPI(resolver.resolve());
7070
new ResolverFully(options.isResolveCombinators()).resolveFully(result.getOpenAPI());
71-
}else if (options.isFlatten()){
72-
InlineModelResolver inlineResolver = new InlineModelResolver();
73-
inlineResolver.flatten(result.getOpenAPI());
71+
} else if (options.isFlatten()) {
72+
InlineModelResolver inlineModelResolver = new InlineModelResolver();
73+
inlineModelResolver.setSkipMatches(options.isSkipMatches());
74+
inlineModelResolver.flatten(result.getOpenAPI());
7475
}
7576
}
7677
}
@@ -194,7 +195,9 @@ public SwaggerParseResult readContents(String swaggerAsString, List<Authorizatio
194195
result.setOpenAPI(new OpenAPIResolver(result.getOpenAPI(), auth, null).resolve());
195196
new ResolverFully(options.isResolveCombinators()).resolveFully(result.getOpenAPI());
196197
} else if (options.isFlatten()) {
197-
new InlineModelResolver().flatten(result.getOpenAPI());
198+
InlineModelResolver inlineModelResolver = new InlineModelResolver();
199+
inlineModelResolver.setSkipMatches(options.isSkipMatches());
200+
inlineModelResolver.flatten(result.getOpenAPI());
198201
}
199202
}else{
200203
JsonNode rootNode = mapper.readTree(swaggerAsString.getBytes());

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

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2051,6 +2051,48 @@ public void testResolveFullyMap() {
20512051
assertFalse(yaml.contains("$ref"));
20522052
}
20532053

2054+
@Test
2055+
public void testParseOptionsSkipMatchesFalse() {
2056+
final String location = "src/test/resources/skipMatches.yaml";
2057+
2058+
final ParseOptions options = new ParseOptions();
2059+
options.setResolve(true);
2060+
options.setFlatten(true);
2061+
options.setSkipMatches(false);
2062+
2063+
final OpenAPIV3Parser parserUnderTest = new OpenAPIV3Parser();
2064+
2065+
final SwaggerParseResult result = parserUnderTest.readLocation(location, null, options);
2066+
2067+
final OpenAPI openAPI = result.getOpenAPI();
2068+
2069+
assertNotNull(openAPI);
2070+
assertNotNull(openAPI.getComponents());
2071+
assertNotNull(openAPI.getComponents().getSchemas());
2072+
assertEquals(4, openAPI.getComponents().getSchemas().size());
2073+
}
2074+
2075+
@Test
2076+
public void testParseOptionsSkipMatchesTrue() {
2077+
final String location = "src/test/resources/skipMatches.yaml";
2078+
2079+
final ParseOptions options = new ParseOptions();
2080+
options.setResolve(true);
2081+
options.setFlatten(true);
2082+
options.setSkipMatches(true);
2083+
2084+
final OpenAPIV3Parser parserUnderTest = new OpenAPIV3Parser();
2085+
2086+
final SwaggerParseResult result = parserUnderTest.readLocation(location, null, options);
2087+
2088+
final OpenAPI openAPI = result.getOpenAPI();
2089+
2090+
assertNotNull(openAPI);
2091+
assertNotNull(openAPI.getComponents());
2092+
assertNotNull(openAPI.getComponents().getSchemas());
2093+
assertEquals(6, openAPI.getComponents().getSchemas().size());
2094+
}
2095+
20542096
private static int getDynamicPort() {
20552097
return new Random().ints(10000, 20000).findFirst().getAsInt();
20562098
}

modules/swagger-parser-v3/src/test/java/io/swagger/v3/parser/util/InlineModelResolverTest.java

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import io.swagger.v3.oas.models.PathItem;
1010
import io.swagger.v3.oas.models.media.ArraySchema;
1111
import io.swagger.v3.oas.models.media.Content;
12+
import io.swagger.v3.oas.models.media.IntegerSchema;
1213
import io.swagger.v3.oas.models.media.MediaType;
1314
import io.swagger.v3.oas.models.media.ObjectSchema;
1415
import io.swagger.v3.oas.models.media.Schema;
@@ -426,6 +427,111 @@ public void testInlineResponseModelWithTitle() throws Exception {
426427
assertTrue(model.getProperties().get("name") instanceof StringSchema);
427428
}
428429

430+
@Test
431+
public void testSkipInlineMatchesFalse() {
432+
final OpenAPI openAPI = new OpenAPI();
433+
434+
final InlineModelResolver inlineModelResolver = new InlineModelResolver();
435+
inlineModelResolver.setSkipMatches(false);
436+
437+
final Schema operationAlphaInAsset = new ObjectSchema();
438+
operationAlphaInAsset.setTitle("operationAlphaInAsset");
439+
operationAlphaInAsset.addProperties("id1", new IntegerSchema());
440+
operationAlphaInAsset.addProperties("id2", new IntegerSchema());
441+
442+
final Schema operationAlphaIn = new ObjectSchema();
443+
operationAlphaIn.setTitle("operationAlphaIn");
444+
operationAlphaIn.addProperties("asset", operationAlphaInAsset);
445+
446+
final Schema operationAlphaRequest = new ObjectSchema();
447+
operationAlphaRequest.setTitle("operationAlphaRequest");
448+
operationAlphaRequest.addProperties("in", operationAlphaIn);
449+
450+
final Schema operationBetaInAsset = new ObjectSchema();
451+
operationBetaInAsset.setTitle("operationBetaInAsset");
452+
operationBetaInAsset.addProperties("id1", new IntegerSchema());
453+
operationBetaInAsset.addProperties("id2", new IntegerSchema());
454+
455+
final Schema operationBetaIn = new ObjectSchema();
456+
operationBetaIn.setTitle("operationBetaIn");
457+
operationBetaIn.addProperties("asset", operationBetaInAsset);
458+
459+
final Schema operationBetaRequest = new ObjectSchema();
460+
operationBetaRequest.setTitle("operationBetaRequest");
461+
operationBetaRequest.addProperties("in", operationBetaIn);
462+
463+
openAPI.path("/operationAlpha", new PathItem()
464+
.get(new Operation()
465+
.requestBody(new RequestBody()
466+
.content(new Content().addMediaType("*/*", new MediaType()
467+
.schema(operationAlphaRequest))))));
468+
469+
openAPI.path("/operationBeta", new PathItem()
470+
.get(new Operation()
471+
.requestBody(new RequestBody()
472+
.content(new Content().addMediaType("*/*", new MediaType()
473+
.schema(operationBetaRequest))))));
474+
475+
inlineModelResolver.flatten(openAPI);
476+
477+
assertNotNull(openAPI);
478+
assertNotNull(openAPI.getComponents());
479+
assertNotNull(openAPI.getComponents().getSchemas());
480+
assertEquals(4, openAPI.getComponents().getSchemas().size());
481+
}
482+
483+
@Test
484+
public void testSkipInlineMatchesTrue() {
485+
final OpenAPI openAPI = new OpenAPI();
486+
487+
final InlineModelResolver inlineModelResolver = new InlineModelResolver();
488+
inlineModelResolver.setSkipMatches(true);
489+
490+
final Schema operationAlphaInAsset = new ObjectSchema();
491+
operationAlphaInAsset.setTitle("operationAlphaInAsset");
492+
operationAlphaInAsset.addProperties("id1", new IntegerSchema());
493+
operationAlphaInAsset.addProperties("id2", new IntegerSchema());
494+
495+
final Schema operationAlphaIn = new ObjectSchema();
496+
operationAlphaIn.setTitle("operationAlphaIn");
497+
operationAlphaIn.addProperties("asset", operationAlphaInAsset);
498+
499+
final Schema operationAlphaRequest = new ObjectSchema();
500+
operationAlphaRequest.setTitle("operationAlphaRequest");
501+
operationAlphaRequest.addProperties("in", operationAlphaIn);
502+
503+
final Schema operationBetaInAsset = new ObjectSchema();
504+
operationBetaInAsset.setTitle("operationBetaInAsset");
505+
operationBetaInAsset.addProperties("id1", new IntegerSchema());
506+
operationBetaInAsset.addProperties("id2", new IntegerSchema());
507+
508+
final Schema operationBetaIn = new ObjectSchema();
509+
operationBetaIn.setTitle("operationBetaIn");
510+
operationBetaIn.addProperties("asset", operationBetaInAsset);
511+
512+
final Schema operationBetaRequest = new ObjectSchema();
513+
operationBetaRequest.setTitle("operationBetaRequest");
514+
operationBetaRequest.addProperties("in", operationBetaIn);
515+
516+
openAPI.path("/operationAlpha", new PathItem()
517+
.get(new Operation()
518+
.requestBody(new RequestBody()
519+
.content(new Content().addMediaType("*/*", new MediaType()
520+
.schema(operationAlphaRequest))))));
521+
522+
openAPI.path("/operationBeta", new PathItem()
523+
.get(new Operation()
524+
.requestBody(new RequestBody()
525+
.content(new Content().addMediaType("*/*", new MediaType()
526+
.schema(operationBetaRequest))))));
527+
528+
inlineModelResolver.flatten(openAPI);
529+
530+
assertNotNull(openAPI);
531+
assertNotNull(openAPI.getComponents());
532+
assertNotNull(openAPI.getComponents().getSchemas());
533+
assertEquals(6, openAPI.getComponents().getSchemas().size());
534+
}
429535

430536
@Test
431537
public void resolveInlineArrayModelWithTitle() throws Exception {
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
openapi: "3.0.0"
2+
paths:
3+
/operationAlpha:
4+
get:
5+
requestBody:
6+
content:
7+
application/json:
8+
schema:
9+
type: "object"
10+
title: "operationAlphaRequest"
11+
properties:
12+
in:
13+
type: "object"
14+
title: "operationAlphaIn"
15+
properties:
16+
asset:
17+
type: "object"
18+
title: "operationAlphaInAsset"
19+
properties:
20+
id1:
21+
type: "integer"
22+
format: "int32"
23+
id2:
24+
type: "integer"
25+
format: "int32"
26+
/operationBeta:
27+
get:
28+
requestBody:
29+
content:
30+
application/json:
31+
schema:
32+
type: "object"
33+
title: "operationBetaRequest"
34+
properties:
35+
in:
36+
type: "object"
37+
title: "operationBetaIn"
38+
properties:
39+
asset:
40+
type: "object"
41+
title: "operationBetaInAsset"
42+
properties:
43+
id1:
44+
type: "integer"
45+
format: "int32"
46+
id2:
47+
type: "integer"
48+
format: "int32"

0 commit comments

Comments
 (0)