From 4ebc16d7aa1ab59b9f66395e36fb7666ce98a7a9 Mon Sep 17 00:00:00 2001 From: Kyle Shockey Date: Sun, 22 Apr 2018 23:23:36 -0700 Subject: [PATCH] fix: normalization regression --- src/helpers.js | 6 +-- test/bugs/ui-4466.js | 122 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 125 insertions(+), 3 deletions(-) create mode 100644 test/bugs/ui-4466.js diff --git a/src/helpers.js b/src/helpers.js index ad46f3d99..25df97400 100755 --- a/src/helpers.js +++ b/src/helpers.js @@ -202,9 +202,9 @@ export function normalizeSwagger(parsedSpec) { else if (inheritName === 'parameters') { for (const param of inherits[inheritName]) { const exists = operation[inheritName].some((opParam) => { - // check for `opParam.name` in case the parameter has - // no name, which is important for $ref'd parameters - return opParam.name && opParam.name === param.name + return (opParam.name && opParam.name === param.name) + || (opParam.$ref && opParam.$ref === param.$ref) + || (opParam.$$ref && opParam.$$ref === param.$$ref) }) if (!exists) { diff --git a/test/bugs/ui-4466.js b/test/bugs/ui-4466.js new file mode 100644 index 000000000..71919b943 --- /dev/null +++ b/test/bugs/ui-4466.js @@ -0,0 +1,122 @@ +// https://github.com/swagger-api/swagger-ui/issues/4466 +// https://github.com/swagger-api/swagger-ui/issues/4467 + +import expect, {createSpy, spyOn} from 'expect' +import resolveSubtree from '../../src/subtree-resolver' + +const spec = { + swagger: '2.0', + info: { + version: 'v1', + title: 'Foo' + }, + basePath: '/v1/foo', + produces: [ + 'application/json' + ], + parameters: { + testHeader: { + name: 'test-header', + description: 'some request header', + type: 'string', + in: 'header', + required: false + } + }, + paths: { + '/': { + parameters: [ + { + $ref: '#/parameters/testHeader' + } + ], + get: { + responses: { + 200: { + description: 'Successful response', + schema: { + type: 'object', + properties: { + bar: { + type: 'string' + } + } + } + } + } + } + } + } +} + + +it('should resolve test case from UI-4466 and UI-4467 correctly', async function () { + const res = await resolveSubtree(spec, []) + + expect(res).toEqual({ + errors: [], + spec: { + swagger: '2.0', + $$normalized: true, + basePath: '/v1/foo', + info: { + title: 'Foo', + version: 'v1', + }, + parameters: { + testHeader: { + description: 'some request header', + in: 'header', + name: 'test-header', + required: false, + type: 'string', + }, + }, + paths: { + '/': { + get: { + parameters: [ + { + $$ref: '#/parameters/testHeader', + description: 'some request header', + in: 'header', + name: 'test-header', + required: false, + type: 'string', + }, + ], + produces: [ + 'application/json', + ], + responses: { + 200: { + description: 'Successful response', + schema: { + properties: { + bar: { + type: 'string', + }, + }, + type: 'object', + }, + }, + }, + }, + parameters: [ + { + $$ref: '#/parameters/testHeader', + description: 'some request header', + in: 'header', + name: 'test-header', + required: false, + type: 'string', + }, + ], + }, + }, + produces: [ + 'application/json', + ] + } + }) +})