From 18888f0f2aabbfbd80a540f253a4743b0c3eed6c Mon Sep 17 00:00:00 2001 From: ostridm Date: Wed, 20 Sep 2023 14:18:07 +0300 Subject: [PATCH] fix(editor): retrieve parameter default value from dereferenced spec (#213) closes #212 --- .../oas/BaseOasParameterObjectsParser.ts | 2 +- .../oas/v2/OasV2ParameterObjectsParser.ts | 2 +- .../oas2-default-param-value.result.json | 36 +++++++++++++++++ .../fixtures/oas2-default-param-value.yaml | 39 +++++++++++++++++++ packages/editor/tests/oas2.spec.ts | 19 +++++++++ 5 files changed, 96 insertions(+), 2 deletions(-) create mode 100644 packages/editor/tests/fixtures/oas2-default-param-value.result.json create mode 100644 packages/editor/tests/fixtures/oas2-default-param-value.yaml diff --git a/packages/editor/src/editor/oas/BaseOasParameterObjectsParser.ts b/packages/editor/src/editor/oas/BaseOasParameterObjectsParser.ts index 682196f1..2edcc4a1 100644 --- a/packages/editor/src/editor/oas/BaseOasParameterObjectsParser.ts +++ b/packages/editor/src/editor/oas/BaseOasParameterObjectsParser.ts @@ -18,7 +18,7 @@ export abstract class BaseOasParameterObjectsParser< { protected constructor( protected readonly doc: D, - private readonly dereferencedDoc: D + protected readonly dereferencedDoc: D ) {} protected abstract getParameterValue( diff --git a/packages/editor/src/editor/oas/v2/OasV2ParameterObjectsParser.ts b/packages/editor/src/editor/oas/v2/OasV2ParameterObjectsParser.ts index 54e12408..f40a0759 100644 --- a/packages/editor/src/editor/oas/v2/OasV2ParameterObjectsParser.ts +++ b/packages/editor/src/editor/oas/v2/OasV2ParameterObjectsParser.ts @@ -70,7 +70,7 @@ export class OasV2ParameterObjectsParser extends BaseOasParameterObjectsParser< parameter: OpenAPIV2.Parameter ): SpecTreeRequestBodyParam[] { const operationObject: OpenAPIV2.OperationObject = jsonPointer.get( - this.doc, + this.dereferencedDoc, jsonPointer.compile(jsonPointer.parse(pointer).slice(0, -2)) ); const mimeTypes = operationObject.consumes || ['application/json']; diff --git a/packages/editor/tests/fixtures/oas2-default-param-value.result.json b/packages/editor/tests/fixtures/oas2-default-param-value.result.json new file mode 100644 index 00000000..70360883 --- /dev/null +++ b/packages/editor/tests/fixtures/oas2-default-param-value.result.json @@ -0,0 +1,36 @@ +{ + "children": [ + { + "children": [ + { + "jsonPointer": "/paths/~1pet/post", + "method": "POST", + "parameters": [ + { + "bodyType": "application/json", + "paramType": "requestBody", + "value": { + "name": "Jack" + }, + "valueJsonPointer": "/paths/~1pet/post/parameters/0/schema/default" + } + ], + "path": "/pet" + } + ], + "jsonPointer": "/paths/~1pet", + "path": "/pet" + } + ], + "jsonPointer": "/", + "name": "Swagger Petstore", + "parameters": [ + { + "name": "host", + "paramType": "variable", + "value": "petstore.swagger.io", + "valueJsonPointer": "/host" + } + ], + "path": "/" +} diff --git a/packages/editor/tests/fixtures/oas2-default-param-value.yaml b/packages/editor/tests/fixtures/oas2-default-param-value.yaml new file mode 100644 index 00000000..b239c50e --- /dev/null +++ b/packages/editor/tests/fixtures/oas2-default-param-value.yaml @@ -0,0 +1,39 @@ +swagger: '2.0' +info: + title: Swagger Petstore + version: 1.0.0 +host: petstore.swagger.io +basePath: /v2 +schemes: + - https +paths: + /pet: + post: + consumes: + - application/json + parameters: + - $ref: '#/parameters/ReferencedPostBodyParam' + responses: + 200: + description: successful operation +parameters: + ReferencedPostBodyParam: + description: A JSON object containing pet information + in: body + name: body + required: true + schema: + $ref: '#/definitions/Pet' +definitions: + Pet: + properties: + name: + example: doggie + type: string + required: + - name + type: object + xml: + name: Pet + default: + name: Jack diff --git a/packages/editor/tests/oas2.spec.ts b/packages/editor/tests/oas2.spec.ts index d91c6a52..73f267ea 100644 --- a/packages/editor/tests/oas2.spec.ts +++ b/packages/editor/tests/oas2.spec.ts @@ -73,6 +73,25 @@ describe('OasV2Editor', () => { expect(result).toEqual(expected); }); + it('should retrieve default parameter value', async () => { + const sourceYaml = readFileSync( + resolve(__dirname, './fixtures/oas2-default-param-value.yaml'), + 'utf-8' + ); + await openApiParser.setup(sourceYaml); + + const expected = JSON.parse( + readFileSync( + resolve(__dirname, './fixtures/oas2-default-param-value.result.json'), + 'utf-8' + ) + ); + + const result = openApiParser.parse(); + + expect(result).toEqual(expected); + }); + it('should be exception on call "parse" before "setup"', () => expect(() => openApiParser.parse()).toThrowError( 'You have to call "setup" to initialize the document'