Skip to content

Commit 1a89e00

Browse files
committed
get response ref object
1 parent 9b4c60d commit 1a89e00

File tree

5 files changed

+56
-0
lines changed

5 files changed

+56
-0
lines changed

openapi-parser/src/main/java/io/openapiparser/model/v30/Response.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,10 @@ public String getRef () {
3838
return getStringOrThrow (REF);
3939
}
4040

41+
public Response getRefObject () {
42+
return getRefObjectOrThrow (Response.class);
43+
}
44+
4145
@Required
4246
public String getDescription () {
4347
return getStringOrThrow (DESCRIPTION);

openapi-parser/src/main/java/io/openapiparser/model/v31/Response.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,10 @@ public String getRef () {
3838
return getStringOrThrow (REF);
3939
}
4040

41+
public Response getRefObject () {
42+
return getRefObjectOrThrow (Response.class);
43+
}
44+
4145
@Override
4246
public @Nullable String getSummary () {
4347
return getStringOrNull (SUMMARY);

openapi-parser/src/test/kotlin/io/openapiparser/RefSpec.kt

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,12 @@
66
package io.openapiparser
77

88
import io.kotest.core.spec.style.StringSpec
9+
import io.kotest.matchers.booleans.shouldBeTrue
910
import io.kotest.matchers.shouldBe
1011
import io.openapiparser.support.ApiBuilder
1112
import io.openapiparser.support.getParameters
1213
import io.openapiparser.support.getResponseSchema
14+
import io.openapiparser.support.getResponses
1315
import io.openapiparser.model.v30.Schema as Schema30
1416

1517
class RefSpec: StringSpec({
@@ -124,6 +126,21 @@ class RefSpec: StringSpec({
124126
parameterRef.name shouldBe "bar"
125127
}
126128

129+
"parses ref in response" {
130+
val api = ApiBuilder()
131+
.buildOpenApi30("/v30/ref-response/openapi.yaml")
132+
133+
val responses = api.getResponses("/foo")
134+
val responseRef = responses.getResponse("200")!!
135+
136+
responseRef.isRef.shouldBeTrue()
137+
val response = responseRef.refObject
138+
139+
val content = response.content
140+
content.size shouldBe 1
141+
content.containsKey("plain/text") shouldBe true
142+
}
143+
127144
"parses ref relative to current file" {
128145
val api = ApiBuilder()
129146
.buildOpenApi30("/v30/ref-is-relative-to-current-file/openapi.yaml")

openapi-parser/src/test/kotlin/io/openapiparser/support/OpenApi.kt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
package io.openapiparser.support
77

88
import io.kotest.matchers.nulls.shouldNotBeNull
9+
import io.openapiparser.model.v30.Responses as Responses30
910
import io.openapiparser.model.v30.OpenApi as OpenApi30
1011
import io.openapiparser.model.v30.Parameter as Parameter30
1112
import io.openapiparser.model.v30.Schema as Schema30
@@ -39,3 +40,13 @@ fun OpenApi30.getParameters(path: String): Collection<Parameter30> {
3940
return operation.parameters
4041
}
4142

43+
fun OpenApi30.getResponses(path: String): Responses30 {
44+
val pathItem = paths.getPathItem(path)
45+
pathItem.shouldNotBeNull()
46+
47+
val operation = pathItem.get
48+
operation.shouldNotBeNull()
49+
50+
return operation.responses
51+
}
52+
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
openapi: 3.0.3
2+
info:
3+
title: ref responses
4+
version: 1.0.0
5+
6+
paths:
7+
/foo:
8+
get:
9+
responses:
10+
'200':
11+
$ref: '#/components/responses/Bar'
12+
13+
components:
14+
responses:
15+
Bar:
16+
description: plain text response
17+
content:
18+
plain/text:
19+
schema:
20+
type: string

0 commit comments

Comments
 (0)