Skip to content

Commit aaabc39

Browse files
committed
[java] Return null for null in MicroProfile's nullable top-level enums
With enumUnknownDefaultCase, MicroProfile's template for top-level enums (enumOuterClass) returned the unknown default case for a null value as well. Return null for null when the enum is nullable, as the other templates now do. Run the test for every set of enum templates this changes: okhttp-gson, resttemplate (the base templates), native, and microprofile with Jackson (its inner enums only have fromValue with Jackson).
1 parent cc3856d commit aaabc39

2 files changed

Lines changed: 22 additions & 4 deletions

File tree

‎modules/openapi-generator/src/main/resources/Java/libraries/microprofile/enumOuterClass.mustache‎

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,9 @@ import java.net.URI;
6565
return b;
6666
}
6767
}
68-
{{#useNullForUnknownEnumValue}}return null;{{/useNullForUnknownEnumValue}}{{^useNullForUnknownEnumValue}}{{#enumUnknownDefaultCase}}{{#allowableValues}}{{#enumVars}}{{#-last}}return {{{name}}};{{/-last}}{{/enumVars}}{{/allowableValues}}{{/enumUnknownDefaultCase}}{{^enumUnknownDefaultCase}}throw new IllegalArgumentException("Unexpected value '" + text + "'");{{/enumUnknownDefaultCase}}{{/useNullForUnknownEnumValue}}
68+
{{#useNullForUnknownEnumValue}}return null;{{/useNullForUnknownEnumValue}}{{^useNullForUnknownEnumValue}}{{#enumUnknownDefaultCase}}{{#isNullable}}if (text == null) {
69+
return null;
70+
}
71+
{{/isNullable}}{{#allowableValues}}{{#enumVars}}{{#-last}}return {{{name}}};{{/-last}}{{/enumVars}}{{/allowableValues}}{{/enumUnknownDefaultCase}}{{^enumUnknownDefaultCase}}throw new IllegalArgumentException("Unexpected value '" + text + "'");{{/enumUnknownDefaultCase}}{{/useNullForUnknownEnumValue}}
6972
}
7073
}

‎modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java‎

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5778,8 +5778,20 @@ public void testRestTemplateGenerateClientAsBeanTrue() {
57785778
.contains("import org.springframework.stereotype.Component;");
57795779
}
57805780

5781-
@Test
5782-
public void testEnumUnknownDefaultCaseWithNullableEnums() {
5781+
@DataProvider
5782+
public static Object[][] librariesForEachEnumTemplate() {
5783+
return new Object[][]{
5784+
{JavaClientCodegen.OKHTTP_GSON, SERIALIZATION_LIBRARY_GSON},
5785+
// uses the base templates
5786+
{JavaClientCodegen.RESTTEMPLATE, SERIALIZATION_LIBRARY_JACKSON},
5787+
{JavaClientCodegen.NATIVE, SERIALIZATION_LIBRARY_JACKSON},
5788+
// generates fromValue for inner enums only with Jackson
5789+
{JavaClientCodegen.MICROPROFILE, SERIALIZATION_LIBRARY_JACKSON}
5790+
};
5791+
}
5792+
5793+
@Test(dataProvider = "librariesForEachEnumTemplate")
5794+
public void testEnumUnknownDefaultCaseWithNullableEnums(String library, String serialization) {
57835795
final OpenAPI openAPI = new OpenAPI().components(new Components()
57845796
.addSchemas("Mode", new StringSchema()._enum(List.of("auto", "manual")).nullable(true))
57855797
.addSchemas("Pet", new ObjectSchema()
@@ -5788,12 +5800,15 @@ public void testEnumUnknownDefaultCaseWithNullableEnums() {
57885800
final Path output = newTempFolder();
57895801
final JavaClientCodegen codegen = new JavaClientCodegen();
57905802
codegen.setOutputDir(output.toString());
5803+
codegen.setLibrary(library);
5804+
codegen.additionalProperties().put(CodegenConstants.SERIALIZATION_LIBRARY, serialization);
57915805
codegen.additionalProperties().put(CodegenConstants.ENUM_UNKNOWN_DEFAULT_CASE, "true");
57925806

57935807
new DefaultGenerator().opts(new ClientOptInput().openAPI(openAPI).config(codegen)).generate();
57945808

57955809
// an unknown value maps to the unknown default case; only null maps to null
5796-
final String fromValueEnd = "if (value == null) { return null; } return UNKNOWN_DEFAULT_OPEN_API; }";
5810+
// (microprofile's top-level enums name the parameter `text`, the others `value`)
5811+
final String fromValueEnd = "== null) { return null; } return UNKNOWN_DEFAULT_OPEN_API; }";
57975812
TestUtils.assertFileContains(output.resolve("src/main/java/org/openapitools/client/model/Pet.java"), fromValueEnd);
57985813
TestUtils.assertFileContains(output.resolve("src/main/java/org/openapitools/client/model/Mode.java"), fromValueEnd);
57995814
}

0 commit comments

Comments
 (0)