[typescript-fetch] Convert dates only if target type is a Date (#11685)

This commit is contained in:
Tristan Lins
2022-07-23 05:45:36 +02:00
committed by GitHub
parent ea7a319a65
commit 2e6cdb5196
4 changed files with 111 additions and 17 deletions

View File

@@ -973,6 +973,14 @@ public class TypeScriptFetchClientCodegen extends AbstractTypeScriptClientCodege
return TypeScriptFetchClientCodegen.getItemsDataType(this.items);
}
public boolean isDateType() {
return isDate && "Date".equals(dataType);
}
public boolean isDateTimeType() {
return isDateTime && "Date".equals(dataType);
}
public ExtendedCodegenParameter(CodegenParameter cp) {
super();
@@ -1110,6 +1118,14 @@ public class TypeScriptFetchClientCodegen extends AbstractTypeScriptClientCodege
return TypeScriptFetchClientCodegen.getItemsDataType(this.items);
}
public boolean isDateType() {
return isDate && "Date".equals(dataType);
}
public boolean isDateTimeType() {
return isDateTime && "Date".equals(dataType);
}
public ExtendedCodegenProperty(CodegenProperty cp) {
super();
@@ -1361,6 +1377,14 @@ public class TypeScriptFetchClientCodegen extends AbstractTypeScriptClientCodege
public String returnPassthrough;
public boolean hasReturnPassthroughVoid;
public boolean isDateType() {
return isDate && "Date".equals(dataType);
}
public boolean isDateTimeType() {
return isDateTime && "Date".equals(dataType);
}
public ExtendedCodegenModel(CodegenModel cm) {
super();

View File

@@ -123,17 +123,17 @@ export class {{classname}} extends runtime.BaseAPI {
{{/isArray}}
{{^isArray}}
if (requestParameters.{{paramName}} !== undefined) {
{{#isDateTime}}
{{#isDateTimeType}}
queryParameters['{{baseName}}'] = (requestParameters.{{paramName}} as any).toISOString();
{{/isDateTime}}
{{^isDateTime}}
{{#isDate}}
{{/isDateTimeType}}
{{^isDateTimeType}}
{{#isDateType}}
queryParameters['{{baseName}}'] = (requestParameters.{{paramName}} as any).toISOString().substr(0,10);
{{/isDate}}
{{^isDate}}
{{/isDateType}}
{{^isDateType}}
queryParameters['{{baseName}}'] = requestParameters.{{paramName}};
{{/isDate}}
{{/isDateTime}}
{{/isDateType}}
{{/isDateTimeType}}
}
{{/isArray}}

View File

@@ -59,17 +59,17 @@ export function {{classname}}FromJSONTyped(json: any, ignoreDiscriminator: boole
{{/additionalPropertiesType}}
{{#vars}}
{{#isPrimitiveType}}
{{#isDate}}
{{#isDateType}}
'{{name}}': {{^required}}!exists(json, '{{baseName}}') ? undefined : {{/required}}({{#isNullable}}json['{{baseName}}'] === null ? null : {{/isNullable}}new Date(json['{{baseName}}'])),
{{/isDate}}
{{#isDateTime}}
{{/isDateType}}
{{#isDateTimeType}}
'{{name}}': {{^required}}!exists(json, '{{baseName}}') ? undefined : {{/required}}({{#isNullable}}json['{{baseName}}'] === null ? null : {{/isNullable}}new Date(json['{{baseName}}'])),
{{/isDateTime}}
{{^isDate}}
{{^isDateTime}}
{{/isDateTimeType}}
{{^isDateType}}
{{^isDateTimeType}}
'{{name}}': {{^required}}!exists(json, '{{baseName}}') ? undefined : {{/required}}json['{{baseName}}'],
{{/isDateTime}}
{{/isDate}}
{{/isDateTimeType}}
{{/isDateType}}
{{/isPrimitiveType}}
{{^isPrimitiveType}}
{{#isArray}}
@@ -118,7 +118,7 @@ export function {{classname}}ToJSON(value?: {{classname}} | null): any {
{{#vars}}
{{^isReadOnly}}
{{#isPrimitiveType}}
'{{baseName}}': {{#isDate}}{{^required}}value.{{name}} === undefined ? undefined : {{/required}}({{#isNullable}}value.{{name}} === null ? null : {{/isNullable}}value.{{name}}.toISOString().substr(0,10)){{/isDate}}{{#isDateTime}}{{^required}}value.{{name}} === undefined ? undefined : {{/required}}({{#isNullable}}value.{{name}} === null ? null : {{/isNullable}}value.{{name}}.toISOString()){{/isDateTime}}{{^isDate}}{{^isDateTime}}value.{{name}}{{/isDateTime}}{{/isDate}},
'{{baseName}}': {{#isDateType}}{{^required}}value.{{name}} === undefined ? undefined : {{/required}}({{#isNullable}}value.{{name}} === null ? null : {{/isNullable}}value.{{name}}.toISOString().substr(0,10)){{/isDateType}}{{#isDateTimeType}}{{^required}}value.{{name}} === undefined ? undefined : {{/required}}({{#isNullable}}value.{{name}} === null ? null : {{/isNullable}}value.{{name}}.toISOString()){{/isDateTimeType}}{{^isDateType}}{{^isDateTimeType}}value.{{name}}{{/isDateTimeType}}{{/isDateType}},
{{/isPrimitiveType}}
{{^isPrimitiveType}}
{{#isArray}}

View File

@@ -117,6 +117,76 @@ public class TypeScriptFetchModelTest {
Assert.assertFalse(property5.isContainer);
}
@Test(description = "convert a simple TypeScript Angular model; overwrite date/DateTime type mapping")
public void simpleModelWithStringDateTest() {
final Schema model = new Schema()
.description("a sample model")
.addProperties("id", new IntegerSchema().format(SchemaTypeUtil.INTEGER64_FORMAT))
.addProperties("name", new StringSchema())
.addProperties("createdAt", new DateTimeSchema())
.addProperties("birthDate", new DateSchema())
.addProperties("active", new BooleanSchema())
.addRequiredItem("id")
.addRequiredItem("name");
final DefaultCodegen codegen = new TypeScriptFetchClientCodegen();
OpenAPI openAPI = TestUtils.createOpenAPIWithOneSchema("sample", model);
codegen.setOpenAPI(openAPI);
codegen.typeMapping().put("date", "string");
codegen.typeMapping().put("DateTime", "string");
final CodegenModel cm = codegen.fromModel("sample", model);
Assert.assertEquals(cm.name, "sample");
Assert.assertEquals(cm.classname, "Sample");
Assert.assertEquals(cm.description, "a sample model");
Assert.assertEquals(cm.vars.size(), 5);
final CodegenProperty property1 = cm.vars.get(0);
Assert.assertEquals(property1.baseName, "id");
Assert.assertEquals(property1.dataType, "number");
Assert.assertEquals(property1.name, "id");
Assert.assertEquals(property1.defaultValue, "undefined");
Assert.assertEquals(property1.baseType, "number");
Assert.assertTrue(property1.required);
Assert.assertFalse(property1.isContainer);
final CodegenProperty property2 = cm.vars.get(1);
Assert.assertEquals(property2.baseName, "name");
Assert.assertEquals(property2.dataType, "string");
Assert.assertEquals(property2.name, "name");
Assert.assertEquals(property2.defaultValue, "undefined");
Assert.assertEquals(property2.baseType, "string");
Assert.assertTrue(property2.required);
Assert.assertFalse(property2.isContainer);
final CodegenProperty property3 = cm.vars.get(2);
Assert.assertEquals(property3.baseName, "createdAt");
Assert.assertEquals(property3.complexType, null);
Assert.assertEquals(property3.dataType, "string");
Assert.assertEquals(property3.name, "createdAt");
Assert.assertEquals(property3.defaultValue, "undefined");
Assert.assertFalse(property3.required);
Assert.assertFalse(property3.isContainer);
final CodegenProperty property4 = cm.vars.get(3);
Assert.assertEquals(property4.baseName, "birthDate");
Assert.assertEquals(property4.complexType, null);
Assert.assertEquals(property4.dataType, "string");
Assert.assertEquals(property4.name, "birthDate");
Assert.assertEquals(property4.defaultValue, "undefined");
Assert.assertFalse(property4.required);
Assert.assertFalse(property4.isContainer);
final CodegenProperty property5 = cm.vars.get(4);
Assert.assertEquals(property5.baseName, "active");
Assert.assertEquals(property5.complexType, null);
Assert.assertEquals(property5.dataType, "boolean");
Assert.assertEquals(property5.name, "active");
Assert.assertEquals(property5.defaultValue, "undefined");
Assert.assertFalse(property5.required);
Assert.assertFalse(property5.isContainer);
}
@Test(description = "convert and check default values for a simple TypeScript Angular model")
public void simpleModelDefaultValuesTest() throws ParseException {
IntegerSchema integerSchema = new IntegerSchema().format(SchemaTypeUtil.INTEGER64_FORMAT);