From 4386867d908eae2aed2b9fd86e9f5476aadce52b Mon Sep 17 00:00:00 2001 From: Alex Varchuk Date: Tue, 11 Jul 2023 15:33:36 +0300 Subject: [PATCH] fix: schema oneOf title with const (#2350) --- src/services/__tests__/models/Schema.test.ts | 54 ++++++++++++++++++++ src/services/models/Schema.ts | 5 +- 2 files changed, 57 insertions(+), 2 deletions(-) diff --git a/src/services/__tests__/models/Schema.test.ts b/src/services/__tests__/models/Schema.test.ts index 558c2c1bb0..9dab8a1b4a 100644 --- a/src/services/__tests__/models/Schema.test.ts +++ b/src/services/__tests__/models/Schema.test.ts @@ -562,5 +562,59 @@ describe('Models', () => { `"testAttr: (Refed description)"`, ); }); + + test('should correct get title from in oneOf ->const', () => { + const spec = parseYaml(outdent` + openapi: 3.0.0 + paths: + /test: + get: + operationId: test + responses: + '200': + content: + application/json: + schema: + type: object + properties: + data: + type: object + properties: + response_code: + type: integer + description: A numeric response code + oneOf: + - const: 0 + description: > + Description for const 0 + - const: 1 + description: > + Description for const 1 + - const: 2 + description: > + Description for const 2 + `) as any; + + parser = new OpenAPIParser(spec, undefined, opts); + const name = 'application/json'; + const mediaType = new MediaTypeModel( + parser, + name, + true, + spec.paths['/test'].get.responses['200'].content[name], + opts, + ); + + expect(printSchema(mediaType?.schema as any)).toMatchInlineSnapshot(` + "data: + response_code: oneOf + 0 -> (Description for const 0 + ) + 1 -> (Description for const 1 + ) + 2 -> (Description for const 2 + )" + `); + }); }); }); diff --git a/src/services/models/Schema.ts b/src/services/models/Schema.ts index 42a6b6336d..44b04279e0 100644 --- a/src/services/models/Schema.ts +++ b/src/services/models/Schema.ts @@ -243,8 +243,9 @@ export class SchemaModel { const title = isNamedDefinition(variant.$ref) && !merged.title ? JsonPointer.baseName(variant.$ref) - : `${merged.title || ''}${(merged.const && JSON.stringify(merged.const)) || ''}`; - + : `${merged.title || ''}${ + (typeof merged.const !== 'undefined' && JSON.stringify(merged.const)) || '' + }`; const schema = new SchemaModel( parser, // merge base schema into each of oneOf's subschemas