Skip to content

Commit f54f20c

Browse files
authored
Merge pull request #854 from JehandadK/issue-853-OAS3
Issue #853 oas3
2 parents 0425433 + db35cb7 commit f54f20c

File tree

5 files changed

+67
-8
lines changed

5 files changed

+67
-8
lines changed

modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/processors/PathsProcessor.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import io.swagger.v3.oas.models.Operation;
77
import io.swagger.v3.oas.models.PathItem;
88
import io.swagger.v3.oas.models.callbacks.Callback;
9+
import io.swagger.v3.oas.models.examples.Example;
910
import io.swagger.v3.oas.models.media.ArraySchema;
1011
import io.swagger.v3.oas.models.media.ComposedSchema;
1112
import io.swagger.v3.oas.models.media.MediaType;
@@ -168,6 +169,20 @@ protected void updateLocalRefs(ApiResponse response, String pathRef) {
168169
if (mediaType.getSchema() != null) {
169170
updateLocalRefs(mediaType.getSchema(), pathRef);
170171
}
172+
Map<String, Example> examples = content.get(key).getExamples();
173+
if (examples != null) {
174+
for( Example example:examples.values()){
175+
updateLocalRefs(example, pathRef);
176+
}
177+
}
178+
}
179+
}
180+
}
181+
182+
protected void updateLocalRefs(Example example, String pathRef) {
183+
if(example.get$ref() != null) {
184+
if(isLocalRef(example.get$ref())) {
185+
example.set$ref(computeLocalRef(example.get$ref(), pathRef));
171186
}
172187
}
173188
}

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

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,7 @@
4444
import java.math.BigDecimal;
4545
import java.net.HttpURLConnection;
4646
import java.nio.charset.StandardCharsets;
47-
import java.util.ArrayList;
48-
import java.util.HashSet;
49-
import java.util.List;
50-
import java.util.Map;
51-
import java.util.Random;
52-
import java.util.Set;
47+
import java.util.*;
5348

5449
import static com.github.tomakehurst.wiremock.client.WireMock.*;
5550
import static org.testng.Assert.*;
@@ -60,11 +55,35 @@ public class OpenAPIV3ParserTest {
6055
protected WireMockServer wireMockServer;
6156

6257

58+
@Test
59+
public void testIssue853() {
60+
ParseOptions options = new ParseOptions();
61+
options.setResolve(true);
62+
options.setFlatten(true);
63+
final OpenAPI openAPI = new OpenAPIV3Parser().readLocation("issue-837-853/main.yaml", null, options).getOpenAPI();
64+
65+
Assert.assertNotNull(openAPI);
66+
67+
Operation post = openAPI.getPaths().get("/guests").getPost();
68+
Assert.assertNotNull(post);
69+
70+
Content content = post.getResponses().get("201").getContent();
71+
Assert.assertNotNull(content);
72+
73+
Map<String, Example> examples = content.get("application/json").getExamples();
74+
Assert.assertEquals(examples.size(), 1);
75+
assertNotNull(openAPI.getComponents());
76+
assertNotNull(openAPI.getComponents().getExamples());
77+
assertNotNull(openAPI.getComponents().getExamples().get("testExample"));
78+
assertEquals(((LinkedHashMap<String, Object>)openAPI.getComponents().getExamples().get("testExample").getValue()).get("test"),"value");
79+
80+
}
81+
6382
@Test
6483
public void testIssue837() {
6584
ParseOptions options = new ParseOptions();
6685
options.setResolve(true);
67-
final OpenAPI openAPI = new OpenAPIV3Parser().readLocation("./issue837/main.yaml", null, options).getOpenAPI();
86+
final OpenAPI openAPI = new OpenAPIV3Parser().readLocation("issue-837-853/main.yaml", null, options).getOpenAPI();
6887

6988
Assert.assertNotNull(openAPI);
7089

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
post:
2+
description: add a guest
3+
operationId: addGuest
4+
responses:
5+
'201':
6+
description: New guest added to event list
7+
content:
8+
application/json:
9+
schema:
10+
properties:
11+
test:
12+
type: string
13+
examples:
14+
testExample:
15+
$ref: '#/components/examples/testExample'
16+
components:
17+
examples:
18+
testExample:
19+
value:
20+
test: value
21+
22+

modules/swagger-parser-v3/src/test/resources/issue837/main.yaml renamed to modules/swagger-parser-v3/src/test/resources/issue-837-853/main.yaml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,10 @@ paths:
2929
local:
3030
$ref: '#/components/examples/LocalRef'
3131
external:
32-
$ref: './issue837/components.yaml#/components/examples/ExternalRef'
32+
$ref: './issue-837-853/components.yaml#/components/examples/ExternalRef'
33+
/guests:
34+
$ref: './issue-837-853/external-operation.yaml'
35+
3336
components:
3437
examples:
3538
LocalRef:

0 commit comments

Comments
 (0)