From 3711715932c76dea7b9141f68c844edcbf98f8aa Mon Sep 17 00:00:00 2001 From: Ferdi Koomen Date: Sat, 13 Mar 2021 16:19:13 +0100 Subject: [PATCH] - Fixed issue #607 --- src/openApi/v2/parser/getOperationResults.ts | 10 ++-- .../v3/parser/getOperationResponses.ts | 3 +- src/openApi/v3/parser/getOperationResults.ts | 10 ++-- test/__snapshots__/index.spec.js.snap | 50 +++++++++++++++++++ test/spec/v2.json | 13 +++++ test/spec/v3.json | 13 +++++ 6 files changed, 90 insertions(+), 9 deletions(-) diff --git a/src/openApi/v2/parser/getOperationResults.ts b/src/openApi/v2/parser/getOperationResults.ts index 03f54b02..5d4ad2d0 100644 --- a/src/openApi/v2/parser/getOperationResults.ts +++ b/src/openApi/v2/parser/getOperationResults.ts @@ -12,8 +12,10 @@ function areEqual(a: Model, b: Model): boolean { export function getOperationResults(operationResponses: OperationResponse[]): OperationResponse[] { const operationResults: OperationResponse[] = []; + // Filter out success response codes, but skip "204 No Content" operationResponses.forEach(operationResponse => { - if (operationResponse.code && operationResponse.code >= 200 && operationResponse.code < 300) { + const { code } = operationResponse; + if (code && code !== 204 && code >= 200 && code < 300) { operationResults.push(operationResponse); } }); @@ -24,9 +26,9 @@ export function getOperationResults(operationResponses: OperationResponse[]): Op name: '', code: 200, description: '', - export: 'interface', - type: 'any', - base: 'any', + export: 'generic', + type: 'void', + base: 'void', template: null, link: null, isDefinition: false, diff --git a/src/openApi/v3/parser/getOperationResponses.ts b/src/openApi/v3/parser/getOperationResponses.ts index 17fa505b..2ed23f14 100644 --- a/src/openApi/v3/parser/getOperationResponses.ts +++ b/src/openApi/v3/parser/getOperationResponses.ts @@ -18,7 +18,8 @@ export function getOperationResponses(openApi: OpenApi, responses: OpenApiRespon const responseCode = getOperationResponseCode(code); if (responseCode) { - operationResponses.push(getOperationResponse(openApi, response, responseCode)); + const operationResponse = getOperationResponse(openApi, response, responseCode); + operationResponses.push(operationResponse); } } } diff --git a/src/openApi/v3/parser/getOperationResults.ts b/src/openApi/v3/parser/getOperationResults.ts index 03f54b02..5d4ad2d0 100644 --- a/src/openApi/v3/parser/getOperationResults.ts +++ b/src/openApi/v3/parser/getOperationResults.ts @@ -12,8 +12,10 @@ function areEqual(a: Model, b: Model): boolean { export function getOperationResults(operationResponses: OperationResponse[]): OperationResponse[] { const operationResults: OperationResponse[] = []; + // Filter out success response codes, but skip "204 No Content" operationResponses.forEach(operationResponse => { - if (operationResponse.code && operationResponse.code >= 200 && operationResponse.code < 300) { + const { code } = operationResponse; + if (code && code !== 204 && code >= 200 && code < 300) { operationResults.push(operationResponse); } }); @@ -24,9 +26,9 @@ export function getOperationResults(operationResponses: OperationResponse[]): Op name: '', code: 200, description: '', - export: 'interface', - type: 'any', - base: 'any', + export: 'generic', + type: 'void', + base: 'void', template: null, link: null, isDefinition: false, diff --git a/test/__snapshots__/index.spec.js.snap b/test/__snapshots__/index.spec.js.snap index d60d4d87..5efa6447 100644 --- a/test/__snapshots__/index.spec.js.snap +++ b/test/__snapshots__/index.spec.js.snap @@ -389,6 +389,7 @@ export { ComplexService } from './services/ComplexService'; export { DefaultsService } from './services/DefaultsService'; export { DuplicateService } from './services/DuplicateService'; export { HeaderService } from './services/HeaderService'; +export { NoContentService } from './services/NoContentService'; export { ParametersService } from './services/ParametersService'; export { ResponseService } from './services/ResponseService'; export { SimpleService } from './services/SimpleService'; @@ -2024,6 +2025,30 @@ export class HeaderService { }" `; +exports[`v2 should generate: ./test/generated/v2/services/NoContentService.ts 1`] = ` +"/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import { request as __request } from '../core/request'; +import { OpenAPI } from '../core/OpenAPI'; + +export class NoContentService { + + /** + * @returns void + * @throws ApiError + */ + public static async callWithNoContentResponse(): Promise { + const result = await __request({ + method: 'GET', + path: \`/api/v\${OpenAPI.VERSION}/no-content\`, + }); + return result.body; + } + +}" +`; + exports[`v2 should generate: ./test/generated/v2/services/ParametersService.ts 1`] = ` "/* istanbul ignore file */ /* tslint:disable */ @@ -2717,6 +2742,7 @@ export { DefaultsService } from './services/DefaultsService'; export { DuplicateService } from './services/DuplicateService'; export { HeaderService } from './services/HeaderService'; export { MultipartService } from './services/MultipartService'; +export { NoContentService } from './services/NoContentService'; export { ParametersService } from './services/ParametersService'; export { RequestBodyService } from './services/RequestBodyService'; export { ResponseService } from './services/ResponseService'; @@ -4672,6 +4698,30 @@ export class MultipartService { }" `; +exports[`v3 should generate: ./test/generated/v3/services/NoContentService.ts 1`] = ` +"/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import { request as __request } from '../core/request'; +import { OpenAPI } from '../core/OpenAPI'; + +export class NoContentService { + + /** + * @returns void + * @throws ApiError + */ + public static async callWithNoContentResponse(): Promise { + const result = await __request({ + method: 'GET', + path: \`/api/v\${OpenAPI.VERSION}/no-content\`, + }); + return result.body; + } + +}" +`; + exports[`v3 should generate: ./test/generated/v3/services/ParametersService.ts 1`] = ` "/* istanbul ignore file */ /* tslint:disable */ diff --git a/test/spec/v2.json b/test/spec/v2.json index ab7748cc..c55db591 100644 --- a/test/spec/v2.json +++ b/test/spec/v2.json @@ -370,6 +370,19 @@ "operationId": "DuplicateName" } }, + "/api/v{api-version}/no-content": { + "get": { + "tags": [ + "NoContent" + ], + "operationId": "CallWithNoContentResponse", + "responses": { + "204": { + "description": "Success" + } + } + } + }, "/api/v{api-version}/response": { "get": { "tags": [ diff --git a/test/spec/v3.json b/test/spec/v3.json index a4b7ca0c..4ae3aa1f 100644 --- a/test/spec/v3.json +++ b/test/spec/v3.json @@ -539,6 +539,19 @@ "operationId": "DuplicateName" } }, + "/api/v{api-version}/no-content": { + "get": { + "tags": [ + "NoContent" + ], + "operationId": "CallWithNoContentResponse", + "responses": { + "204": { + "description": "Success" + } + } + } + }, "/api/v{api-version}/response": { "get": { "tags": [