|
17 | 17 | package org.openapitools.codegen.protobuf; |
18 | 18 |
|
19 | 19 | import io.swagger.v3.oas.models.OpenAPI; |
| 20 | +import io.swagger.v3.oas.models.media.IntegerSchema; |
| 21 | +import io.swagger.v3.oas.models.media.Schema; |
| 22 | +import io.swagger.v3.oas.models.media.StringSchema; |
20 | 23 | import org.openapitools.codegen.ClientOptInput; |
21 | 24 | import org.openapitools.codegen.CodegenModel; |
| 25 | +import org.openapitools.codegen.CodegenProperty; |
22 | 26 | import org.openapitools.codegen.DefaultGenerator; |
23 | 27 | import org.openapitools.codegen.TestUtils; |
24 | 28 | import org.openapitools.codegen.config.CodegenConfigurator; |
|
34 | 38 | import java.nio.file.Files; |
35 | 39 | import java.nio.file.Path; |
36 | 40 | import java.nio.file.Paths; |
| 41 | +import java.util.Arrays; |
37 | 42 | import java.util.List; |
| 43 | +import java.util.Map; |
38 | 44 |
|
| 45 | +import static org.openapitools.codegen.TestUtils.createCodegenModelWrapper; |
| 46 | +import static org.openapitools.codegen.languages.ProtobufSchemaCodegen.USE_SIMPLIFIED_ENUM_NAMES; |
39 | 47 | import static org.testng.Assert.assertEquals; |
40 | 48 |
|
41 | 49 | public class ProtobufSchemaCodegenTest { |
@@ -141,4 +149,68 @@ public void modelTest() { |
141 | 149 | Assert.assertEquals(simpleName.classname, "DollarModel"); |
142 | 150 | Assert.assertEquals(simpleName.classVarName, "dollar_model"); |
143 | 151 | } |
| 152 | + |
| 153 | + @Test(description = "support complex enum values") |
| 154 | + public void supportComplexEnumValues() { |
| 155 | + testEnumValues(false); |
| 156 | + } |
| 157 | + |
| 158 | + @Test(description = "support simple enum values") |
| 159 | + public void supportSimpleEnumValues() { |
| 160 | + testEnumValues(true); |
| 161 | + } |
| 162 | + |
| 163 | + private void testEnumValues(boolean simpleEnumValue) { |
| 164 | + final Schema model = new Schema() |
| 165 | + .description("a sample model") |
| 166 | + .addProperties("testStringEnum", new StringSchema()._enum(Arrays.asList("foo", "bar"))) |
| 167 | + .addProperties("testIntEnum", new IntegerSchema().addEnumItem(1).addEnumItem(2)); |
| 168 | + final ProtobufSchemaCodegen codegen = new ProtobufSchemaCodegen(); |
| 169 | + OpenAPI openAPI = TestUtils.createOpenAPIWithOneSchema("sample", model); |
| 170 | + codegen.setOpenAPI(openAPI); |
| 171 | + final CodegenModel cm = codegen.fromModel("sample", model); |
| 172 | + codegen.additionalProperties().put(USE_SIMPLIFIED_ENUM_NAMES, simpleEnumValue); |
| 173 | + codegen.processOpts(); |
| 174 | + codegen.postProcessModels(createCodegenModelWrapper(cm)); |
| 175 | + |
| 176 | + final CodegenProperty property1 = cm.vars.get(0); |
| 177 | + Assert.assertEquals(property1.baseName, "testStringEnum"); |
| 178 | + Assert.assertEquals(property1.dataType, "string"); |
| 179 | + Assert.assertEquals(property1.baseType, "string"); |
| 180 | + Assert.assertEquals(property1.datatypeWithEnum, "Test_string_enum"); |
| 181 | + Assert.assertEquals(property1.name, "test_string_enum"); |
| 182 | + Assert.assertTrue(property1.isEnum); |
| 183 | + Assert.assertEquals(property1.allowableValues.size(), 2); |
| 184 | + Assert.assertEquals(((List<String>) property1.allowableValues.get("values")).size(), 2); |
| 185 | + List<Map<String, Object>> enumVars1 = (List<Map<String, Object>>) property1.allowableValues.get("enumVars"); |
| 186 | + Assert.assertEquals(enumVars1.size(), 2); |
| 187 | + |
| 188 | + Assert.assertEquals(enumVars1.get(0).get("name"), simpleEnumValue ? "FOO" : "TEST_STRING_ENUM_FOO"); |
| 189 | + Assert.assertEquals(enumVars1.get(0).get("value"), simpleEnumValue ? "FOO" : "\"TEST_STRING_ENUM_FOO\""); |
| 190 | + Assert.assertEquals(enumVars1.get(0).get("isString"), false); |
| 191 | + |
| 192 | + Assert.assertEquals(enumVars1.get(1).get("name"), simpleEnumValue ? "BAR" : "TEST_STRING_ENUM_BAR"); |
| 193 | + Assert.assertEquals(enumVars1.get(1).get("value"), simpleEnumValue ? "BAR" : "\"TEST_STRING_ENUM_BAR\""); |
| 194 | + Assert.assertEquals(enumVars1.get(1).get("isString"), false); |
| 195 | + |
| 196 | + final CodegenProperty property2 = cm.vars.get(1); |
| 197 | + Assert.assertEquals(property2.baseName, "testIntEnum"); |
| 198 | + Assert.assertEquals(property2.dataType, "int32"); |
| 199 | + Assert.assertEquals(property2.baseType, "int32"); |
| 200 | + Assert.assertEquals(property2.datatypeWithEnum, "Test_int_enum"); |
| 201 | + Assert.assertEquals(property2.name, "test_int_enum"); |
| 202 | + Assert.assertTrue(property2.isEnum); |
| 203 | + Assert.assertEquals(property2.allowableValues.size(), 2); |
| 204 | + Assert.assertEquals(((List<String>) property2.allowableValues.get("values")).size(), 2); |
| 205 | + List<Map<String, Object>> enumVars2 = (List<Map<String, Object>>) property2.allowableValues.get("enumVars"); |
| 206 | + Assert.assertEquals(enumVars2.size(), 2); |
| 207 | + |
| 208 | + Assert.assertEquals(enumVars2.get(0).get("name"), simpleEnumValue ? "_1" : "TEST_INT_ENUM__1"); |
| 209 | + Assert.assertEquals(enumVars2.get(0).get("value"), simpleEnumValue ? "_1" : "\"TEST_INT_ENUM__1\""); |
| 210 | + Assert.assertEquals(enumVars2.get(0).get("isString"), false); |
| 211 | + |
| 212 | + Assert.assertEquals(enumVars2.get(1).get("name"), simpleEnumValue ? "_2" : "TEST_INT_ENUM__2"); |
| 213 | + Assert.assertEquals(enumVars2.get(1).get("value"), simpleEnumValue ? "_2" : "\"TEST_INT_ENUM__2\""); |
| 214 | + Assert.assertEquals(enumVars2.get(1).get("isString"), false); |
| 215 | + } |
144 | 216 | } |
0 commit comments