From 3229727c4270445ae215903b6f11f544f88fc617 Mon Sep 17 00:00:00 2001 From: Philzen Date: Wed, 29 May 2024 09:25:19 +0200 Subject: [PATCH] Add test for form parameter handling based on requestType --- .../codegen/DefaultCodegenTest.java | 58 ++++++++++++++- .../languages/RustAxumServerCodegenTest.java | 71 +++++++++++++++++++ 2 files changed, 126 insertions(+), 3 deletions(-) create mode 100644 modules/openapi-generator/src/test/java/org/openapitools/codegen/languages/RustAxumServerCodegenTest.java 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 a1d066ded67f8..ae9421985624b 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 @@ -53,7 +53,6 @@ import org.testng.annotations.Test; import org.junit.jupiter.api.Assertions; - import java.io.File; import java.io.IOException; import java.nio.file.Files; @@ -4945,7 +4944,13 @@ public static class fromParameter { DefaultCodegen codegen = new DefaultCodegen(); @BeforeTest void setOpenAPI() { - codegen.setOpenAPI(new OpenAPI().components(new Components().addSchemas("SampleRequestInput", new ObjectSchema().addProperty("FormProp1", new StringSchema())))); + codegen.setOpenAPI(new OpenAPI().components(new Components().addSchemas( + "SampleRequestInput", + new ObjectSchema().addProperty( + "FormProp1", + new StringSchema() + ) + ))); } @Test public void resolvesReferencedSchema() { @@ -4960,11 +4965,58 @@ public static class fromParameter { .returns("Object", CodegenProperty::getDataType) .returns(null, CodegenProperty::getRef) .returns(true, CodegenProperty::getHasVars) - + .extracting(CodegenProperty::getVars).asList().hasSize(1) .first(type(CodegenProperty.class)) .returns("FormProp1", CodegenProperty::getName) .returns("String", CodegenProperty::getDataType); } } + + @SuppressWarnings("NewClassNamingConvention") + public static class fromOperation { + + DefaultCodegen codegen = new DefaultCodegen(); + + @BeforeTest void setOpenAPI() { + codegen.setOpenAPI(new OpenAPI().components(new Components().addSchemas("SampleRequestInput", new ObjectSchema().addProperty("FormProp1", new StringSchema())))); + } + + + @Test public void addsFormParametersFromRequestProperties_forFormContentType() { + var operation = new Operation() + .parameters(List.of()) + .operationId("foobar") + .requestBody(new RequestBody().content(new Content().addMediaType( + "application/x-www-form-urlencoded", + new MediaType().schema(new Schema<>().$ref("SampleRequestInput")) + ))); + + CodegenOperation result = codegen.fromOperation("/", "GET", operation, List.of()); + + assertThat(result.bodyParams).isEmpty(); + assertThat(result.formParams).hasSize(1).first() + .hasFieldOrPropertyWithValue("baseName", "FormProp1") + .hasFieldOrPropertyWithValue("dataType", "String") + .hasFieldOrPropertyWithValue("paramName", "formProp1"); + } + + @Test public void doesNotAddFormParametersFromRequestProperties_forJsonContentType() { + var operation = new Operation() + .parameters(List.of()) + .operationId("foobar") + .requestBody(new RequestBody().content(new Content().addMediaType( + "application/json", + new MediaType().schema(new Schema<>().$ref("SampleRequestInput")) + ))); + + CodegenOperation result = codegen.fromOperation("", "GET", operation, List.of()); + + assertThat(result.formParams).isEmpty(); + assertThat(result.bodyParams).hasSize(1).first() + .hasFieldOrPropertyWithValue("baseName", "SampleRequestInput") + .hasFieldOrPropertyWithValue("dataType", "SampleRequestInput") + .hasFieldOrPropertyWithValue("paramName", "sampleRequestInput"); + } + } } diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/languages/RustAxumServerCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/languages/RustAxumServerCodegenTest.java new file mode 100644 index 0000000000000..a883d867e404b --- /dev/null +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/languages/RustAxumServerCodegenTest.java @@ -0,0 +1,71 @@ +package org.openapitools.codegen.languages; + +import io.swagger.v3.oas.models.Components; +import io.swagger.v3.oas.models.OpenAPI; +import io.swagger.v3.oas.models.Operation; +import io.swagger.v3.oas.models.media.*; +import io.swagger.v3.oas.models.parameters.RequestBody; +import org.assertj.core.api.Assertions; +import org.openapitools.codegen.CodegenOperation; +import org.openapitools.codegen.GeneratorLanguage; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +public class RustAxumServerCodegenTest { + + @Test public void generatorLanguageIsRust() { + Assertions.assertThat(new RustAxumServerCodegen().generatorLanguage()) + .isSameAs(GeneratorLanguage.RUST); + } + + @SuppressWarnings("NewClassNamingConvention") + public static class fromOperation { + + RustAxumServerCodegen codegen = new RustAxumServerCodegen(); + + @BeforeTest void setOpenAPI() { + codegen.setOpenAPI(new OpenAPI().components(new Components().addSchemas("SampleRequestInput", new ObjectSchema().addProperty("FormProp1", new StringSchema())))); + } + + + @Test public void addsFormParametersFromRequestProperties_forFormContentType() { + var operation = new Operation() + .parameters(List.of()) + .operationId("foobar") + .requestBody(new RequestBody().content(new Content().addMediaType( + "application/x-www-form-urlencoded", + new MediaType().schema(new Schema<>().$ref("SampleRequestInput")) + ))); + + CodegenOperation result = codegen.fromOperation("/", "GET", operation, List.of()); + + assertThat(result.formParams).isEmpty(); + assertThat(result.bodyParams).hasSize(1).first() + .hasFieldOrPropertyWithValue("baseName", "SampleRequestInput") + .hasFieldOrPropertyWithValue("dataType", "models::SampleRequestInput") + .hasFieldOrPropertyWithValue("paramName", "sample_request_input"); + } + + @Test public void doesNotAddFormParametersFromRequestProperties_forJsonContentType() { + var operation = new Operation() + .parameters(List.of()) + .operationId("foobar") + .requestBody(new RequestBody().content(new Content().addMediaType( + "application/json", + new MediaType().schema(new Schema<>().$ref("SampleRequestInput")) + ))); + + CodegenOperation result = codegen.fromOperation("", "GET", operation, List.of()); + + assertThat(result.formParams).isEmpty(); + assertThat(result.bodyParams).hasSize(1).first() + .hasFieldOrPropertyWithValue("baseName", "SampleRequestInput") + .hasFieldOrPropertyWithValue("dataType", "models::SampleRequestInput") + .hasFieldOrPropertyWithValue("paramName", "sample_request_input"); + } + } +} \ No newline at end of file