@@ -75,9 +75,9 @@ public void ParseBasicCallbackShouldSucceed()
7575 }
7676
7777 [ Fact ]
78- public void ParseAdvancedCallbackWithReferenceShouldSucceed ( )
78+ public void ParseCallbackWithReferenceShouldSucceed ( )
7979 {
80- using ( var stream = Resources . GetStream ( Path . Combine ( SampleFolderPath , "advancedCallbackWithReference .yaml" ) ) )
80+ using ( var stream = Resources . GetStream ( Path . Combine ( SampleFolderPath , "callbackWithReference .yaml" ) ) )
8181 {
8282 // Act
8383 var openApiDoc = new OpenApiStreamReader ( ) . Read ( stream , out var diagnostic ) ;
@@ -131,5 +131,142 @@ public void ParseAdvancedCallbackWithReferenceShouldSucceed()
131131 } ) ;
132132 }
133133 }
134+
135+ [ Fact ]
136+ public void ParseMultipleCallbacksWithReferenceShouldSucceed ( )
137+ {
138+ using ( var stream = Resources . GetStream ( Path . Combine ( SampleFolderPath , "multipleCallbacksWithReference.yaml" ) ) )
139+ {
140+ // Act
141+ var openApiDoc = new OpenApiStreamReader ( ) . Read ( stream , out var diagnostic ) ;
142+
143+ // Assert
144+ var path = openApiDoc . Paths . First ( ) . Value ;
145+ var subscribeOperation = path . Operations [ OperationType . Post ] ;
146+
147+ diagnostic . ShouldBeEquivalentTo (
148+ new OpenApiDiagnostic ( ) { SpecificationVersion = OpenApiSpecVersion . OpenApi3_0 } ) ;
149+
150+ var callback1 = subscribeOperation . Callbacks [ "simpleHook" ] ;
151+
152+ callback1 . ShouldBeEquivalentTo (
153+ new OpenApiCallback
154+ {
155+ PathItems =
156+ {
157+ [ RuntimeExpression . Build ( "$request.body#/url" ) ] = new OpenApiPathItem {
158+ Operations = {
159+ [ OperationType . Post ] = new OpenApiOperation ( )
160+ {
161+ RequestBody = new OpenApiRequestBody
162+ {
163+ Content =
164+ {
165+ [ "application/json" ] = new OpenApiMediaType
166+ {
167+ Schema = new OpenApiSchema ( )
168+ {
169+ Type = "object"
170+ }
171+ }
172+ }
173+ } ,
174+ Responses = {
175+ [ "200" ] = new OpenApiResponse
176+ {
177+ Description = "Success"
178+ }
179+ }
180+ }
181+ }
182+ }
183+ } ,
184+ Reference = new OpenApiReference
185+ {
186+ Type = ReferenceType . Callback ,
187+ Id = "simpleHook" ,
188+ }
189+ } ) ;
190+
191+ var callback2 = subscribeOperation . Callbacks [ "callback2" ] ;
192+ callback2 . ShouldBeEquivalentTo (
193+ new OpenApiCallback
194+ {
195+ PathItems =
196+ {
197+ [ RuntimeExpression . Build ( "/simplePath" ) ] = new OpenApiPathItem {
198+ Operations = {
199+ [ OperationType . Post ] = new OpenApiOperation ( )
200+ {
201+ RequestBody = new OpenApiRequestBody
202+ {
203+ Description = "Callback 2" ,
204+ Content =
205+ {
206+ [ "application/json" ] = new OpenApiMediaType
207+ {
208+ Schema = new OpenApiSchema ( )
209+ {
210+ Type = "string"
211+ }
212+ }
213+ }
214+ } ,
215+ Responses = {
216+ [ "400" ] = new OpenApiResponse
217+ {
218+ Description = "Callback Response"
219+ }
220+ }
221+ }
222+ } ,
223+ }
224+ }
225+ } ) ;
226+
227+ var callback3 = subscribeOperation . Callbacks [ "callback3" ] ;
228+ callback3 . ShouldBeEquivalentTo (
229+ new OpenApiCallback
230+ {
231+ PathItems =
232+ {
233+ [ RuntimeExpression . Build ( @"http://example.com?transactionId={$request.body#/id}&email={$request.body#/email}" ) ] = new OpenApiPathItem {
234+ Operations = {
235+ [ OperationType . Post ] = new OpenApiOperation ( )
236+ {
237+ RequestBody = new OpenApiRequestBody
238+ {
239+ Content =
240+ {
241+ [ "application/xml" ] = new OpenApiMediaType
242+ {
243+ Schema = new OpenApiSchema ( )
244+ {
245+ Type = "object"
246+ }
247+ }
248+ }
249+ } ,
250+ Responses = {
251+ [ "200" ] = new OpenApiResponse
252+ {
253+ Description = "Success"
254+ } ,
255+ [ "401" ] = new OpenApiResponse
256+ {
257+ Description = "Unauthorized"
258+ } ,
259+ [ "404" ] = new OpenApiResponse
260+ {
261+ Description = "Not Found"
262+ }
263+ }
264+ }
265+ }
266+ }
267+ }
268+ } ) ;
269+ }
270+ }
134271 }
135272}
0 commit comments