@@ -262,3 +262,101 @@ func TestComponents_Build_HashEmpty(t *testing.T) {
262262 assert .Equal (t , "e45605d7361dbc9d4b9723257701bef1d283f8fe9566b9edda127fc66a6b8fdd" ,
263263 low .GenerateHashString (& n ))
264264}
265+
266+ func TestComponents_IsReference (t * testing.T ) {
267+ var yml = `
268+ schemas:
269+ one:
270+ description: one of many
271+ two:
272+ $ref: "#/schemas/one"
273+ responses:
274+ three:
275+ description: three of many
276+ four:
277+ $ref: "#/responses/three"
278+ parameters:
279+ five:
280+ description: five of many
281+ six:
282+ $ref: "#/parameters/five"
283+ examples:
284+ seven:
285+ description: seven of many
286+ eight:
287+ $ref: "#/examples/seven"
288+ requestBodies:
289+ nine:
290+ description: nine of many
291+ ten:
292+ $ref: "#/requestBodies/nine"
293+ headers:
294+ eleven:
295+ description: eleven of many
296+ twelve:
297+ $ref: "#/headers/eleven"
298+ securitySchemes:
299+ thirteen:
300+ description: thirteen of many
301+ fourteen:
302+ $ref: "#/securitySchemes/thirteen"
303+ links:
304+ fifteen:
305+ description: fifteen of many
306+ sixteen:
307+ $ref: "#/links/fifteen"
308+ callbacks:
309+ seventeen:
310+ '{reference}':
311+ post:
312+ description: seventeen of many
313+ eighteen:
314+ $ref: "#/callbacks/seventeen"
315+ `
316+
317+ var idxNode yaml.Node
318+ mErr := yaml .Unmarshal ([]byte (yml ), & idxNode )
319+ assert .NoError (t , mErr )
320+ idx := index .NewSpecIndex (& idxNode )
321+
322+ var n Components
323+ err := low .BuildModel (idxNode .Content [0 ], & n )
324+ assert .NoError (t , err )
325+
326+ err = n .Build (context .Background (), idxNode .Content [0 ], idx )
327+ assert .NoError (t , err )
328+
329+ assert .Equal (t , "#/schemas/one" , n .FindSchema ("two" ).Value .GetReference ())
330+ assert .Equal (t , "#/responses/three" , n .FindResponse ("four" ).Value .GetReference ())
331+ assert .Equal (t , "#/parameters/five" , n .FindParameter ("six" ).Value .GetReference ())
332+ assert .Equal (t , "#/examples/seven" , n .FindExample ("eight" ).Value .GetReference ())
333+ assert .Equal (t , "#/requestBodies/nine" , n .FindRequestBody ("ten" ).Value .GetReference ())
334+ assert .Equal (t , "#/headers/eleven" , n .FindHeader ("twelve" ).Value .GetReference ())
335+ assert .Equal (t , "#/securitySchemes/thirteen" , n .FindSecurityScheme ("fourteen" ).Value .GetReference ())
336+ assert .Equal (t , "#/links/fifteen" , n .FindLink ("sixteen" ).Value .GetReference ())
337+ assert .Equal (t , "#/callbacks/seventeen" , n .FindCallback ("eighteen" ).Value .GetReference ())
338+ }
339+
340+ func TestComponents_IsReference_OutOfSpecification_PathItem (t * testing.T ) {
341+ var yml = `
342+ pathItems:
343+ one:
344+ description: one of many
345+ two:
346+ $ref: "#/pathItems/one"
347+ `
348+
349+ var idxNode yaml.Node
350+ mErr := yaml .Unmarshal ([]byte (yml ), & idxNode )
351+ assert .NoError (t , mErr )
352+ idx := index .NewSpecIndex (& idxNode )
353+
354+ var n Components
355+ err := low .BuildModel (idxNode .Content [0 ], & n )
356+ assert .NoError (t , err )
357+
358+ err = n .Build (context .Background (), idxNode .Content [0 ], idx )
359+ assert .NoError (t , err )
360+
361+ assert .Equal (t , "#/pathItems/one" , n .FindPathItem ("two" ).Value .GetReference ())
362+ }
0 commit comments