From a730fe504848db3f40a509310261eb817b521039 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sindre=20M=C3=B8gster=20Braaten?= Date: Wed, 17 Jan 2024 16:34:15 +0100 Subject: [PATCH] Added missing copied properties from CodegenOperation in TypeScriptFetchClientCodegen and ErlangClientCodegen to resolve issue #15457 (#17627) --- .../codegen/CodegenOperation.java | 2 +- .../languages/ErlangClientCodegen.java | 2 + .../TypeScriptFetchClientCodegen.java | 1 + .../codegen/DefaultCodegenTest.java | 10 ++++ .../TypeScriptFetchClientCodegenTest.java | 12 +++++ .../test/resources/3_0/optionalResponse.yaml | 48 +++++++++++++++++++ 6 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 modules/openapi-generator/src/test/resources/3_0/optionalResponse.yaml diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenOperation.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenOperation.java index 76b98ac0d77..bce79d0b61f 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenOperation.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenOperation.java @@ -347,7 +347,7 @@ public class CodegenOperation { sb.append(", isVoid=").append(isVoid); sb.append(", isResponseBinary=").append(isResponseBinary); sb.append(", isResponseFile=").append(isResponseFile); - sb.append(", isResponseFile=").append(isResponseOptional); + sb.append(", isResponseOptional=").append(isResponseOptional); sb.append(", hasReference=").append(hasReference); sb.append(", hasDefaultResponse=").append(hasDefaultResponse); sb.append(", hasErrorResponseObject=").append(hasErrorResponseObject); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ErlangClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ErlangClientCodegen.java index fc6806f1316..f5032301b73 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ErlangClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ErlangClientCodegen.java @@ -419,6 +419,8 @@ public class ErlangClientCodegen extends DefaultCodegen implements CodegenConfig this.isArray = o.isArray; this.isMultipart = o.isMultipart; this.isResponseBinary = o.isResponseBinary; + this.isResponseFile = o.isResponseFile; + this.isResponseOptional = o.isResponseOptional; this.hasReference = o.hasReference; this.isRestfulIndex = o.isRestfulIndex; this.isRestfulShow = o.isRestfulShow; diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptFetchClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptFetchClientCodegen.java index a5e6be37b78..40f766cf524 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptFetchClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptFetchClientCodegen.java @@ -1303,6 +1303,7 @@ public class TypeScriptFetchClientCodegen extends AbstractTypeScriptClientCodege this.isMultipart = o.isMultipart; this.isResponseBinary = o.isResponseBinary; this.isResponseFile = o.isResponseFile; + this.isResponseOptional = o.isResponseOptional; this.hasReference = o.hasReference; this.isRestfulIndex = o.isRestfulIndex; this.isRestfulShow = o.isRestfulShow; diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java index c750dbabed7..1d6a5978343 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java @@ -74,6 +74,16 @@ public class DefaultCodegenTest { Assert.assertEquals(Sets.intersection(operation.imports, Sets.newHashSet("Person")).size(), 1); } + @Test + public void testOptionalResponseImports() { + final DefaultCodegen codegen = new DefaultCodegen(); + final OpenAPI openApi = TestUtils.parseFlattenSpec("src/test/resources/3_0/optionalResponse.yaml"); + codegen.setOpenAPI(openApi); + PathItem path = openApi.getPaths().get("/api/Users/{userId}"); + CodegenOperation operation = codegen.fromOperation("/api/Users/{userId}", "get", path.getGet(), path.getServers()); + Assert.assertEquals(operation.isResponseOptional, true); + } + @Test public void testEnumImports() { final DefaultCodegen codegen = new DefaultCodegen(); diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/typescript/fetch/TypeScriptFetchClientCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/typescript/fetch/TypeScriptFetchClientCodegenTest.java index a6bccbff1ac..31a67ed6190 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/typescript/fetch/TypeScriptFetchClientCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/typescript/fetch/TypeScriptFetchClientCodegenTest.java @@ -1,11 +1,13 @@ package org.openapitools.codegen.typescript.fetch; import io.swagger.v3.oas.models.OpenAPI; +import io.swagger.v3.oas.models.PathItem; import io.swagger.v3.oas.models.media.ArraySchema; import io.swagger.v3.oas.models.media.MapSchema; import io.swagger.v3.oas.models.media.Schema; import io.swagger.v3.oas.models.media.StringSchema; import org.openapitools.codegen.CodegenConstants; +import org.openapitools.codegen.CodegenOperation; import org.openapitools.codegen.SupportingFile; import org.openapitools.codegen.TestUtils; import org.openapitools.codegen.languages.AbstractTypeScriptClientCodegen; @@ -43,6 +45,16 @@ public class TypeScriptFetchClientCodegenTest { } + @Test + public void testOptionalResponseImports() { + TypeScriptFetchClientCodegen codegen = new TypeScriptFetchClientCodegen(); + final OpenAPI openApi = TestUtils.parseFlattenSpec("src/test/resources/3_0/optionalResponse.yaml"); + codegen.setOpenAPI(openApi); + PathItem path = openApi.getPaths().get("/api/Users/{userId}"); + CodegenOperation operation = codegen.fromOperation("/api/Users/{userId}", "get", path.getGet(), path.getServers()); + Assert.assertEquals(operation.isResponseOptional, true); + } + @Test public void testWithoutSnapshotVersion() { OpenAPI api = TestUtils.createOpenAPI(); diff --git a/modules/openapi-generator/src/test/resources/3_0/optionalResponse.yaml b/modules/openapi-generator/src/test/resources/3_0/optionalResponse.yaml new file mode 100644 index 00000000000..650f7016795 --- /dev/null +++ b/modules/openapi-generator/src/test/resources/3_0/optionalResponse.yaml @@ -0,0 +1,48 @@ +openapi: 3.0.1 +info: + title: My Sample User API + version: '1.0' +paths: + /api/Users/{userId}: + get: + tags: + - Users + summary: Get a specific user + operationId: GetUserById + parameters: + - name: userId + in: path + description: ID of the user + required: true + schema: + type: string + format: uuid + responses: + '200': + description: Success + content: + text/plain: + schema: + $ref: '#/components/schemas/UserDto' + application/json: + schema: + $ref: '#/components/schemas/UserDto' + text/json: + schema: + $ref: '#/components/schemas/UserDto' + '204': + description: No Content +components: + schemas: + UserDto: + required: + - id + type: object + properties: + id: + type: string + format: uuid + name: + type: string + nullable: true + additionalProperties: false