File tree Expand file tree Collapse file tree 2 files changed +132
-1
lines changed Expand file tree Collapse file tree 2 files changed +132
-1
lines changed Original file line number Diff line number Diff line change @@ -202,7 +202,9 @@ export function normalizeSwagger(parsedSpec) {
202202 else if ( inheritName === 'parameters' ) {
203203 for ( const param of inherits [ inheritName ] ) {
204204 const exists = operation [ inheritName ] . some ( ( opParam ) => {
205- return opParam . name === param . name
205+ // check for `opParam.name` in case the parameter has
206+ // no name, which is important for $ref'd parameters
207+ return opParam . name && opParam . name === param . name
206208 } )
207209
208210 if ( ! exists ) {
Original file line number Diff line number Diff line change @@ -317,6 +317,135 @@ describe('subtree $ref resolver', function () {
317317 }
318318 } )
319319 } )
320+ it ( 'should normalize Swagger 2.0 that use multiple $refs' , async ( ) => {
321+ const input = {
322+ swagger : '2.0' ,
323+ paths : {
324+ '/' : {
325+ parameters : [
326+ {
327+ $ref : '#/parameters/One'
328+ } ,
329+ {
330+ $ref : '#/parameters/Two'
331+ }
332+ ] ,
333+ get : {
334+ summary : 'has no operation parameters'
335+ } ,
336+ delete : {
337+ summary : 'has own operation parameters' ,
338+ parameters : [
339+ {
340+ name : 'Three' ,
341+ in : 'query'
342+ } ,
343+ {
344+ name : 'Four' ,
345+ in : 'query'
346+ }
347+ ]
348+ }
349+ }
350+ } ,
351+ parameters : {
352+ One : {
353+ type : 'string' ,
354+ name : 'One' ,
355+ in : 'query'
356+ } ,
357+ Two : {
358+ type : 'string' ,
359+ name : 'Two' ,
360+ in : 'query'
361+ }
362+ }
363+ }
364+
365+ const res = await resolve ( input , [ 'paths' , '/' ] , {
366+ returnEntireTree : true
367+ } )
368+
369+ expect ( res ) . toEqual ( {
370+ errors : [ ] ,
371+ spec : {
372+ $$normalized : true ,
373+ swagger : '2.0' ,
374+ paths : {
375+ '/' : {
376+ parameters : [
377+ {
378+ type : 'string' ,
379+ name : 'One' ,
380+ in : 'query' ,
381+ $$ref : '#/parameters/One'
382+ } ,
383+ {
384+ type : 'string' ,
385+ name : 'Two' ,
386+ in : 'query' ,
387+ $$ref : '#/parameters/Two'
388+ }
389+ ] ,
390+ get : {
391+ summary : 'has no operation parameters' ,
392+ parameters : [
393+ {
394+ type : 'string' ,
395+ name : 'One' ,
396+ in : 'query' ,
397+ $$ref : '#/parameters/One'
398+ } ,
399+ {
400+ type : 'string' ,
401+ name : 'Two' ,
402+ in : 'query' ,
403+ $$ref : '#/parameters/Two'
404+ }
405+ ]
406+ } ,
407+ delete : {
408+ summary : 'has own operation parameters' ,
409+ parameters : [
410+ {
411+ name : 'Three' ,
412+ in : 'query'
413+ } ,
414+ {
415+ name : 'Four' ,
416+ in : 'query'
417+ } ,
418+ {
419+ type : 'string' ,
420+ name : 'One' ,
421+ in : 'query' ,
422+ $$ref : '#/parameters/One'
423+ } ,
424+ {
425+ type : 'string' ,
426+ name : 'Two' ,
427+ in : 'query' ,
428+ $$ref : '#/parameters/Two'
429+ }
430+ ]
431+ }
432+ }
433+ } ,
434+ parameters : {
435+ One : {
436+ type : 'string' ,
437+ name : 'One' ,
438+ in : 'query'
439+ } ,
440+ Two : {
441+ type : 'string' ,
442+ name : 'Two' ,
443+ in : 'query'
444+ }
445+ }
446+ }
447+ } )
448+ } )
320449 it ( 'should normalize idempotently' , async ( ) => {
321450 const input = {
322451 swagger : '2.0' ,
You can’t perform that action at this time.
0 commit comments