Skip to content

Commit eff94da

Browse files
tasuwowing328
authored andcommitted
[Swift] Convert default value of enum with not string type to string (#4481)
* Convert not string enum default value to string by toString. * Add some test cases for enum's default value. * Convert string default value to enum var name format. * sync master, update samples
1 parent dc42968 commit eff94da

File tree

12 files changed

+163
-84
lines changed

12 files changed

+163
-84
lines changed

modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/Swift4Codegen.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -555,7 +555,11 @@ public String toModelFilename(String name) {
555555
public String toDefaultValue(Schema p) {
556556
if (p.getEnum() != null && !p.getEnum().isEmpty()) {
557557
if (p.getDefault() != null) {
558-
return "." + escapeText((String) p.getDefault());
558+
if (ModelUtils.isStringSchema(p)) {
559+
return "." + toEnumVarName(escapeText((String) p.getDefault()), p.getType());
560+
} else {
561+
return "." + toEnumVarName(escapeText(p.getDefault().toString()), p.getType());
562+
}
559563
}
560564
}
561565
if (ModelUtils.isIntegerSchema(p) || ModelUtils.isNumberSchema(p) || ModelUtils.isBooleanSchema(p)) {

modules/openapi-generator/src/test/java/org/openapitools/codegen/swift4/Swift4ModelEnumTest.java

Lines changed: 78 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
package org.openapitools.codegen.swift4;
1919

2020
import io.swagger.v3.oas.models.OpenAPI;
21+
import io.swagger.v3.oas.models.media.IntegerSchema;
22+
import io.swagger.v3.oas.models.media.NumberSchema;
2123
import io.swagger.v3.oas.models.media.Schema;
2224
import io.swagger.v3.oas.models.media.StringSchema;
2325
import org.openapitools.codegen.CodegenModel;
@@ -28,12 +30,13 @@
2830
import org.testng.Assert;
2931
import org.testng.annotations.Test;
3032

33+
import java.math.BigDecimal;
3134
import java.util.Arrays;
3235

3336
@SuppressWarnings("static-method")
3437
public class Swift4ModelEnumTest {
35-
@Test(description = "convert a java model with an enum and a default value")
36-
public void converterTest() {
38+
@Test(description = "convert a java model with an string enum and a default value")
39+
public void convertStringDefaultValueTest() {
3740
final StringSchema enumSchema = new StringSchema();
3841
enumSchema.setEnum(Arrays.asList("VALUE1", "VALUE2", "VALUE3"));
3942
enumSchema.setDefault("VALUE2");
@@ -51,8 +54,80 @@ public void converterTest() {
5154
Assert.assertEquals(enumVar.dataType, "String");
5255
Assert.assertEquals(enumVar.datatypeWithEnum, "Name");
5356
Assert.assertEquals(enumVar.name, "name");
54-
Assert.assertEquals(enumVar.defaultValue, ".VALUE2");
57+
Assert.assertEquals(enumVar.defaultValue, ".value2");
5558
Assert.assertEquals(enumVar.baseType, "String");
5659
Assert.assertTrue(enumVar.isEnum);
5760
}
61+
62+
@Test(description = "convert a java model with an reserved word string enum and a default value")
63+
public void convertReservedWordStringDefaultValueTest() {
64+
final StringSchema enumSchema = new StringSchema();
65+
enumSchema.setEnum(Arrays.asList("1st", "2nd", "3rd"));
66+
enumSchema.setDefault("2nd");
67+
final Schema model = new Schema().type("object").addProperties("name", enumSchema);
68+
69+
final DefaultCodegen codegen = new Swift4Codegen();
70+
OpenAPI openAPI = TestUtils.createOpenAPIWithOneSchema("sample", model);
71+
codegen.setOpenAPI(openAPI);
72+
final CodegenModel cm = codegen.fromModel("sample", model);
73+
74+
Assert.assertEquals(cm.vars.size(), 1);
75+
76+
final CodegenProperty enumVar = cm.vars.get(0);
77+
Assert.assertEquals(enumVar.baseName, "name");
78+
Assert.assertEquals(enumVar.dataType, "String");
79+
Assert.assertEquals(enumVar.datatypeWithEnum, "Name");
80+
Assert.assertEquals(enumVar.name, "name");
81+
Assert.assertEquals(enumVar.defaultValue, "._2nd");
82+
Assert.assertEquals(enumVar.baseType, "String");
83+
Assert.assertTrue(enumVar.isEnum);
84+
}
85+
86+
@Test(description = "convert a java model with an integer enum and a default value")
87+
public void convertIntegerDefaultValueTest() {
88+
final IntegerSchema enumSchema = new IntegerSchema();
89+
enumSchema.setEnum(Arrays.asList(1, 2, 3));
90+
enumSchema.setDefault(2);
91+
final Schema model = new Schema().type("object").addProperties("name", enumSchema);
92+
93+
final DefaultCodegen codegen = new Swift4Codegen();
94+
OpenAPI openAPI = TestUtils.createOpenAPIWithOneSchema("sample", model);
95+
codegen.setOpenAPI(openAPI);
96+
final CodegenModel cm = codegen.fromModel("sample", model);
97+
98+
Assert.assertEquals(cm.vars.size(), 1);
99+
100+
final CodegenProperty enumVar = cm.vars.get(0);
101+
Assert.assertEquals(enumVar.baseName, "name");
102+
Assert.assertEquals(enumVar.dataType, "Int");
103+
Assert.assertEquals(enumVar.datatypeWithEnum, "Name");
104+
Assert.assertEquals(enumVar.name, "name");
105+
Assert.assertEquals(enumVar.defaultValue, "._2");
106+
Assert.assertEquals(enumVar.baseType, "Int");
107+
Assert.assertTrue(enumVar.isEnum);
108+
}
109+
110+
@Test(description = "convert a java model with an number enum and a default value")
111+
public void convertNumberDefaultValueTest() {
112+
final NumberSchema enumSchema = new NumberSchema();
113+
enumSchema.setEnum(Arrays.asList(new BigDecimal(10), new BigDecimal(100), new BigDecimal(1000)));
114+
enumSchema.setDefault(new BigDecimal((100)));
115+
final Schema model = new Schema().type("object").addProperties("name", enumSchema);
116+
117+
final DefaultCodegen codegen = new Swift4Codegen();
118+
OpenAPI openAPI = TestUtils.createOpenAPIWithOneSchema("sample", model);
119+
codegen.setOpenAPI(openAPI);
120+
final CodegenModel cm = codegen.fromModel("sample", model);
121+
122+
Assert.assertEquals(cm.vars.size(), 1);
123+
124+
final CodegenProperty enumVar = cm.vars.get(0);
125+
Assert.assertEquals(enumVar.baseName, "name");
126+
Assert.assertEquals(enumVar.dataType, "Double");
127+
Assert.assertEquals(enumVar.datatypeWithEnum, "Name");
128+
Assert.assertEquals(enumVar.name, "name");
129+
Assert.assertEquals(enumVar.defaultValue, "._100");
130+
Assert.assertEquals(enumVar.baseType, "Double");
131+
Assert.assertTrue(enumVar.isEnum);
132+
}
58133
}

samples/client/petstore/swift4/default/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -379,13 +379,13 @@ open class FakeAPI {
379379
To test enum parameters
380380

381381
- parameter enumHeaderStringArray: (header) Header parameter enum test (string array) (optional)
382-
- parameter enumHeaderString: (header) Header parameter enum test (string) (optional, default to .-efg)
382+
- parameter enumHeaderString: (header) Header parameter enum test (string) (optional, default to .efg)
383383
- parameter enumQueryStringArray: (query) Query parameter enum test (string array) (optional)
384-
- parameter enumQueryString: (query) Query parameter enum test (string) (optional, default to .-efg)
384+
- parameter enumQueryString: (query) Query parameter enum test (string) (optional, default to .efg)
385385
- parameter enumQueryInteger: (query) Query parameter enum test (double) (optional)
386386
- parameter enumQueryDouble: (query) Query parameter enum test (double) (optional)
387-
- parameter enumFormStringArray: (form) Form parameter enum test (string array) (optional, default to .$)
388-
- parameter enumFormString: (form) Form parameter enum test (string) (optional, default to .-efg)
387+
- parameter enumFormStringArray: (form) Form parameter enum test (string array) (optional, default to .dollar)
388+
- parameter enumFormString: (form) Form parameter enum test (string) (optional, default to .efg)
389389
- parameter completion: completion handler to receive the data and the error objects
390390
*/
391391
open class func testEnumParameters(enumHeaderStringArray: [String]? = nil, enumHeaderString: EnumHeaderString_testEnumParameters? = nil, enumQueryStringArray: [String]? = nil, enumQueryString: EnumQueryString_testEnumParameters? = nil, enumQueryInteger: EnumQueryInteger_testEnumParameters? = nil, enumQueryDouble: EnumQueryDouble_testEnumParameters? = nil, enumFormStringArray: [String]? = nil, enumFormString: EnumFormString_testEnumParameters? = nil, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) {
@@ -403,13 +403,13 @@ open class FakeAPI {
403403
- GET /fake
404404
- To test enum parameters
405405
- parameter enumHeaderStringArray: (header) Header parameter enum test (string array) (optional)
406-
- parameter enumHeaderString: (header) Header parameter enum test (string) (optional, default to .-efg)
406+
- parameter enumHeaderString: (header) Header parameter enum test (string) (optional, default to .efg)
407407
- parameter enumQueryStringArray: (query) Query parameter enum test (string array) (optional)
408-
- parameter enumQueryString: (query) Query parameter enum test (string) (optional, default to .-efg)
408+
- parameter enumQueryString: (query) Query parameter enum test (string) (optional, default to .efg)
409409
- parameter enumQueryInteger: (query) Query parameter enum test (double) (optional)
410410
- parameter enumQueryDouble: (query) Query parameter enum test (double) (optional)
411-
- parameter enumFormStringArray: (form) Form parameter enum test (string array) (optional, default to .$)
412-
- parameter enumFormString: (form) Form parameter enum test (string) (optional, default to .-efg)
411+
- parameter enumFormStringArray: (form) Form parameter enum test (string array) (optional, default to .dollar)
412+
- parameter enumFormString: (form) Form parameter enum test (string) (optional, default to .efg)
413413
- returns: RequestBuilder<Void>
414414
*/
415415
open class func testEnumParametersWithRequestBuilder(enumHeaderStringArray: [String]? = nil, enumHeaderString: EnumHeaderString_testEnumParameters? = nil, enumQueryStringArray: [String]? = nil, enumQueryString: EnumQueryString_testEnumParameters? = nil, enumQueryInteger: EnumQueryInteger_testEnumParameters? = nil, enumQueryDouble: EnumQueryDouble_testEnumParameters? = nil, enumFormStringArray: [String]? = nil, enumFormString: EnumFormString_testEnumParameters? = nil) -> RequestBuilder<Void> {

samples/client/petstore/swift4/default/docs/FakeAPI.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -453,13 +453,13 @@ To test enum parameters
453453
import PetstoreClient
454454

455455
let enumHeaderStringArray = ["enumHeaderStringArray_example"] // [String] | Header parameter enum test (string array) (optional)
456-
let enumHeaderString = "enumHeaderString_example" // String | Header parameter enum test (string) (optional) (default to .-efg)
456+
let enumHeaderString = "enumHeaderString_example" // String | Header parameter enum test (string) (optional) (default to .efg)
457457
let enumQueryStringArray = ["enumQueryStringArray_example"] // [String] | Query parameter enum test (string array) (optional)
458-
let enumQueryString = "enumQueryString_example" // String | Query parameter enum test (string) (optional) (default to .-efg)
458+
let enumQueryString = "enumQueryString_example" // String | Query parameter enum test (string) (optional) (default to .efg)
459459
let enumQueryInteger = 987 // Int | Query parameter enum test (double) (optional)
460460
let enumQueryDouble = 987 // Double | Query parameter enum test (double) (optional)
461-
let enumFormStringArray = ["inner_example"] // [String] | Form parameter enum test (string array) (optional) (default to .$)
462-
let enumFormString = "enumFormString_example" // String | Form parameter enum test (string) (optional) (default to .-efg)
461+
let enumFormStringArray = ["inner_example"] // [String] | Form parameter enum test (string array) (optional) (default to .dollar)
462+
let enumFormString = "enumFormString_example" // String | Form parameter enum test (string) (optional) (default to .efg)
463463

464464
// To test enum parameters
465465
FakeAPI.testEnumParameters(enumHeaderStringArray: enumHeaderStringArray, enumHeaderString: enumHeaderString, enumQueryStringArray: enumQueryStringArray, enumQueryString: enumQueryString, enumQueryInteger: enumQueryInteger, enumQueryDouble: enumQueryDouble, enumFormStringArray: enumFormStringArray, enumFormString: enumFormString) { (response, error) in
@@ -479,13 +479,13 @@ FakeAPI.testEnumParameters(enumHeaderStringArray: enumHeaderStringArray, enumHea
479479
Name | Type | Description | Notes
480480
------------- | ------------- | ------------- | -------------
481481
**enumHeaderStringArray** | [**[String]**](String.md) | Header parameter enum test (string array) | [optional]
482-
**enumHeaderString** | **String** | Header parameter enum test (string) | [optional] [default to .-efg]
482+
**enumHeaderString** | **String** | Header parameter enum test (string) | [optional] [default to .efg]
483483
**enumQueryStringArray** | [**[String]**](String.md) | Query parameter enum test (string array) | [optional]
484-
**enumQueryString** | **String** | Query parameter enum test (string) | [optional] [default to .-efg]
484+
**enumQueryString** | **String** | Query parameter enum test (string) | [optional] [default to .efg]
485485
**enumQueryInteger** | **Int** | Query parameter enum test (double) | [optional]
486486
**enumQueryDouble** | **Double** | Query parameter enum test (double) | [optional]
487-
**enumFormStringArray** | [**[String]**](String.md) | Form parameter enum test (string array) | [optional] [default to .$]
488-
**enumFormString** | **String** | Form parameter enum test (string) | [optional] [default to .-efg]
487+
**enumFormStringArray** | [**[String]**](String.md) | Form parameter enum test (string array) | [optional] [default to .dollar]
488+
**enumFormString** | **String** | Form parameter enum test (string) | [optional] [default to .efg]
489489

490490
### Return type
491491

samples/client/petstore/swift4/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -379,13 +379,13 @@ open class FakeAPI {
379379
To test enum parameters
380380

381381
- parameter enumHeaderStringArray: (header) Header parameter enum test (string array) (optional)
382-
- parameter enumHeaderString: (header) Header parameter enum test (string) (optional, default to .-efg)
382+
- parameter enumHeaderString: (header) Header parameter enum test (string) (optional, default to .efg)
383383
- parameter enumQueryStringArray: (query) Query parameter enum test (string array) (optional)
384-
- parameter enumQueryString: (query) Query parameter enum test (string) (optional, default to .-efg)
384+
- parameter enumQueryString: (query) Query parameter enum test (string) (optional, default to .efg)
385385
- parameter enumQueryInteger: (query) Query parameter enum test (double) (optional)
386386
- parameter enumQueryDouble: (query) Query parameter enum test (double) (optional)
387-
- parameter enumFormStringArray: (form) Form parameter enum test (string array) (optional, default to .$)
388-
- parameter enumFormString: (form) Form parameter enum test (string) (optional, default to .-efg)
387+
- parameter enumFormStringArray: (form) Form parameter enum test (string array) (optional, default to .dollar)
388+
- parameter enumFormString: (form) Form parameter enum test (string) (optional, default to .efg)
389389
- parameter completion: completion handler to receive the data and the error objects
390390
*/
391391
open class func testEnumParameters(enumHeaderStringArray: [String]? = nil, enumHeaderString: EnumHeaderString_testEnumParameters? = nil, enumQueryStringArray: [String]? = nil, enumQueryString: EnumQueryString_testEnumParameters? = nil, enumQueryInteger: EnumQueryInteger_testEnumParameters? = nil, enumQueryDouble: EnumQueryDouble_testEnumParameters? = nil, enumFormStringArray: [String]? = nil, enumFormString: EnumFormString_testEnumParameters? = nil, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) {
@@ -403,13 +403,13 @@ open class FakeAPI {
403403
- GET /fake
404404
- To test enum parameters
405405
- parameter enumHeaderStringArray: (header) Header parameter enum test (string array) (optional)
406-
- parameter enumHeaderString: (header) Header parameter enum test (string) (optional, default to .-efg)
406+
- parameter enumHeaderString: (header) Header parameter enum test (string) (optional, default to .efg)
407407
- parameter enumQueryStringArray: (query) Query parameter enum test (string array) (optional)
408-
- parameter enumQueryString: (query) Query parameter enum test (string) (optional, default to .-efg)
408+
- parameter enumQueryString: (query) Query parameter enum test (string) (optional, default to .efg)
409409
- parameter enumQueryInteger: (query) Query parameter enum test (double) (optional)
410410
- parameter enumQueryDouble: (query) Query parameter enum test (double) (optional)
411-
- parameter enumFormStringArray: (form) Form parameter enum test (string array) (optional, default to .$)
412-
- parameter enumFormString: (form) Form parameter enum test (string) (optional, default to .-efg)
411+
- parameter enumFormStringArray: (form) Form parameter enum test (string array) (optional, default to .dollar)
412+
- parameter enumFormString: (form) Form parameter enum test (string) (optional, default to .efg)
413413
- returns: RequestBuilder<Void>
414414
*/
415415
open class func testEnumParametersWithRequestBuilder(enumHeaderStringArray: [String]? = nil, enumHeaderString: EnumHeaderString_testEnumParameters? = nil, enumQueryStringArray: [String]? = nil, enumQueryString: EnumQueryString_testEnumParameters? = nil, enumQueryInteger: EnumQueryInteger_testEnumParameters? = nil, enumQueryDouble: EnumQueryDouble_testEnumParameters? = nil, enumFormStringArray: [String]? = nil, enumFormString: EnumFormString_testEnumParameters? = nil) -> RequestBuilder<Void> {

samples/client/petstore/swift4/objcCompatible/docs/FakeAPI.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -453,13 +453,13 @@ To test enum parameters
453453
import PetstoreClient
454454

455455
let enumHeaderStringArray = ["enumHeaderStringArray_example"] // [String] | Header parameter enum test (string array) (optional)
456-
let enumHeaderString = "enumHeaderString_example" // String | Header parameter enum test (string) (optional) (default to .-efg)
456+
let enumHeaderString = "enumHeaderString_example" // String | Header parameter enum test (string) (optional) (default to .efg)
457457
let enumQueryStringArray = ["enumQueryStringArray_example"] // [String] | Query parameter enum test (string array) (optional)
458-
let enumQueryString = "enumQueryString_example" // String | Query parameter enum test (string) (optional) (default to .-efg)
458+
let enumQueryString = "enumQueryString_example" // String | Query parameter enum test (string) (optional) (default to .efg)
459459
let enumQueryInteger = 987 // Int | Query parameter enum test (double) (optional)
460460
let enumQueryDouble = 987 // Double | Query parameter enum test (double) (optional)
461-
let enumFormStringArray = ["inner_example"] // [String] | Form parameter enum test (string array) (optional) (default to .$)
462-
let enumFormString = "enumFormString_example" // String | Form parameter enum test (string) (optional) (default to .-efg)
461+
let enumFormStringArray = ["inner_example"] // [String] | Form parameter enum test (string array) (optional) (default to .dollar)
462+
let enumFormString = "enumFormString_example" // String | Form parameter enum test (string) (optional) (default to .efg)
463463

464464
// To test enum parameters
465465
FakeAPI.testEnumParameters(enumHeaderStringArray: enumHeaderStringArray, enumHeaderString: enumHeaderString, enumQueryStringArray: enumQueryStringArray, enumQueryString: enumQueryString, enumQueryInteger: enumQueryInteger, enumQueryDouble: enumQueryDouble, enumFormStringArray: enumFormStringArray, enumFormString: enumFormString) { (response, error) in
@@ -479,13 +479,13 @@ FakeAPI.testEnumParameters(enumHeaderStringArray: enumHeaderStringArray, enumHea
479479
Name | Type | Description | Notes
480480
------------- | ------------- | ------------- | -------------
481481
**enumHeaderStringArray** | [**[String]**](String.md) | Header parameter enum test (string array) | [optional]
482-
**enumHeaderString** | **String** | Header parameter enum test (string) | [optional] [default to .-efg]
482+
**enumHeaderString** | **String** | Header parameter enum test (string) | [optional] [default to .efg]
483483
**enumQueryStringArray** | [**[String]**](String.md) | Query parameter enum test (string array) | [optional]
484-
**enumQueryString** | **String** | Query parameter enum test (string) | [optional] [default to .-efg]
484+
**enumQueryString** | **String** | Query parameter enum test (string) | [optional] [default to .efg]
485485
**enumQueryInteger** | **Int** | Query parameter enum test (double) | [optional]
486486
**enumQueryDouble** | **Double** | Query parameter enum test (double) | [optional]
487-
**enumFormStringArray** | [**[String]**](String.md) | Form parameter enum test (string array) | [optional] [default to .$]
488-
**enumFormString** | **String** | Form parameter enum test (string) | [optional] [default to .-efg]
487+
**enumFormStringArray** | [**[String]**](String.md) | Form parameter enum test (string array) | [optional] [default to .dollar]
488+
**enumFormString** | **String** | Form parameter enum test (string) | [optional] [default to .efg]
489489

490490
### Return type
491491

0 commit comments

Comments
 (0)