forked from loafle/openapi-generator-original
Array fixes (#102)
* Fix for arrays in requestBody * Map description from RequestBody in CodegenParameter * Fix missing import of model class with nested arrays in response * Fix imports, consistent 'baseType' * Add tests for enum
This commit is contained in:
@@ -1160,6 +1160,8 @@ public class DefaultCodegen implements CodegenConfig {
|
||||
}
|
||||
} else if (ModelUtils.isMapSchema(schema)) {
|
||||
datatype = "map";
|
||||
} else if (ModelUtils.isArraySchema(schema)) {
|
||||
datatype = "array";
|
||||
} else if (ModelUtils.isUUIDSchema(schema)) {
|
||||
datatype = "UUID";
|
||||
} else if (ModelUtils.isStringSchema(schema)) {
|
||||
@@ -2344,7 +2346,11 @@ public class DefaultCodegen implements CodegenConfig {
|
||||
if (ModelUtils.isArraySchema(responseSchema)) {
|
||||
ArraySchema as = (ArraySchema) responseSchema;
|
||||
CodegenProperty innerProperty = fromProperty("response", as.getItems());
|
||||
r.baseType = innerProperty.baseType;
|
||||
CodegenProperty innerCp = innerProperty;
|
||||
while(innerCp != null) {
|
||||
r.baseType = innerCp.baseType;
|
||||
innerCp = innerCp.items;
|
||||
}
|
||||
} else {
|
||||
if (cp.complexType != null) {
|
||||
r.baseType = cp.complexType;
|
||||
@@ -4051,7 +4057,7 @@ public class DefaultCodegen implements CodegenConfig {
|
||||
Map<String, Schema> properties = schema.getProperties();
|
||||
for (Map.Entry<String, Schema> entry : properties.entrySet()) {
|
||||
CodegenParameter codegenParameter = CodegenModelFactory.newInstance(CodegenModelType.PARAMETER);
|
||||
// key => property anme
|
||||
// key => property name
|
||||
// value => property schema
|
||||
codegenParameter = fromFormProperty(entry.getKey(), entry.getValue(), imports);
|
||||
|
||||
@@ -4151,6 +4157,7 @@ public class DefaultCodegen implements CodegenConfig {
|
||||
CodegenParameter codegenParameter = CodegenModelFactory.newInstance(CodegenModelType.PARAMETER);
|
||||
codegenParameter.baseName = "UNKNOWN_BASE_NAME";
|
||||
codegenParameter.paramName = "UNKNOWN_PARAM_NAME";
|
||||
codegenParameter.description = body.getDescription();
|
||||
codegenParameter.required = body.getRequired() != null ? body.getRequired() : Boolean.FALSE;
|
||||
codegenParameter.isBodyParam = Boolean.TRUE;
|
||||
|
||||
@@ -4207,10 +4214,7 @@ public class DefaultCodegen implements CodegenConfig {
|
||||
inner = new StringSchema().description("//TODO automatically added by swagger-codegen");
|
||||
arraySchema.setItems(inner);
|
||||
}
|
||||
CodegenProperty codegenProperty = fromProperty("inner", inner);
|
||||
if (codegenProperty.complexType != null) {
|
||||
imports.add(codegenProperty.complexType);
|
||||
}
|
||||
CodegenProperty codegenProperty = fromProperty("property", schema);
|
||||
imports.add(codegenProperty.baseType);
|
||||
CodegenProperty innerCp = codegenProperty;
|
||||
while (innerCp != null) {
|
||||
@@ -4221,12 +4225,11 @@ public class DefaultCodegen implements CodegenConfig {
|
||||
}
|
||||
codegenParameter.baseName = codegenProperty.baseType;
|
||||
codegenParameter.paramName = toParamName(codegenProperty.baseType);
|
||||
codegenParameter.items = codegenProperty;
|
||||
codegenParameter.items = codegenProperty.items;
|
||||
codegenParameter.dataType = getTypeDeclaration(arraySchema);
|
||||
codegenParameter.baseType = codegenProperty.complexType;
|
||||
codegenParameter.baseType = getSchemaType(arraySchema);
|
||||
codegenParameter.isContainer = Boolean.TRUE;
|
||||
codegenParameter.isListContainer = Boolean.TRUE;
|
||||
codegenParameter.description = codegenProperty.description;
|
||||
|
||||
setParameterBooleanFlagWithCodegenProperty(codegenParameter, codegenProperty);
|
||||
|
||||
|
||||
@@ -41,6 +41,9 @@ public class BashTest {
|
||||
op.vendorExtensions.get("x-bash-codegen-description"),
|
||||
"Multiple status 'values' can be provided with comma separated strings");
|
||||
|
||||
Assert.assertEquals(op.allParams.size(), 1);
|
||||
CodegenParameter p = op.allParams.get(0);
|
||||
Assert.assertEquals(p.description, "Status values that need to be considered for filter");
|
||||
}
|
||||
|
||||
@Test(description = "test basic petstore operation with example body")
|
||||
@@ -63,10 +66,11 @@ public class BashTest {
|
||||
|
||||
Assert.assertEquals(op.bodyParams.size(), 1);
|
||||
|
||||
CodegenParameter pet = op.bodyParams.get(0);
|
||||
CodegenParameter p = op.bodyParams.get(0);
|
||||
|
||||
Assert.assertTrue(pet.vendorExtensions
|
||||
Assert.assertTrue(p.vendorExtensions
|
||||
.containsKey("x-codegen-body-example"));
|
||||
Assert.assertEquals(p.description, "Pet object that needs to be added to the store");
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -147,12 +147,18 @@ public class JavaClientCodegenTest {
|
||||
body1.setDescription("A list of ids");
|
||||
body1.setContent(new Content().addMediaType("application/json", new MediaType().schema(new ArraySchema().items(new StringSchema()))));
|
||||
CodegenParameter codegenParameter1 = codegen.fromRequestBody(body1 , new HashMap<String, Schema>(), new HashSet<String>());
|
||||
Assert.assertEquals(codegenParameter1.description, "A list of ids");
|
||||
Assert.assertEquals(codegenParameter1.dataType, "List<String>");
|
||||
Assert.assertEquals(codegenParameter1.baseType, "List");
|
||||
|
||||
RequestBody body2 = new RequestBody();
|
||||
body2.setDescription("A list of list of values");
|
||||
body2.setContent(new Content().addMediaType("application/json", new MediaType().schema(new ArraySchema().items(new ArraySchema().items(new IntegerSchema())))));
|
||||
CodegenParameter codegenParameter2 = codegen.fromRequestBody(body2 , new HashMap<String, Schema>(), new HashSet<String>());
|
||||
|
||||
Assert.assertEquals(codegenParameter2.description, "A list of list of values");
|
||||
Assert.assertEquals(codegenParameter2.dataType, "List<List<Integer>>");
|
||||
Assert.assertEquals(codegenParameter2.baseType, "List");
|
||||
|
||||
RequestBody body3 = new RequestBody();
|
||||
body3.setDescription("A list of points");
|
||||
body3.setContent(new Content().addMediaType("application/json", new MediaType().schema(new ArraySchema().items(new ObjectSchema().$ref("#/components/schemas/Point")))));
|
||||
@@ -161,6 +167,9 @@ public class JavaClientCodegenTest {
|
||||
point.addProperties("x", new IntegerSchema().format(SchemaTypeUtil.INTEGER32_FORMAT));
|
||||
point.addProperties("y", new IntegerSchema().format(SchemaTypeUtil.INTEGER32_FORMAT));
|
||||
CodegenParameter codegenParameter3 = codegen.fromRequestBody(body3 , Collections.<String, Schema>singletonMap("Point", point), new HashSet<String>());
|
||||
Assert.assertEquals(codegenParameter3.description, "A list of points");
|
||||
Assert.assertEquals(codegenParameter3.dataType, "List<Point>");
|
||||
Assert.assertEquals(codegenParameter3.baseType, "List");
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
package org.openapitools.codegen.java;
|
||||
|
||||
import io.swagger.v3.oas.models.media.ArraySchema;
|
||||
import io.swagger.v3.oas.models.media.ComposedSchema;
|
||||
import io.swagger.v3.oas.models.media.Schema;
|
||||
import io.swagger.v3.oas.models.media.StringSchema;
|
||||
|
||||
import org.openapitools.codegen.CodegenModel;
|
||||
import org.openapitools.codegen.CodegenProperty;
|
||||
import org.openapitools.codegen.DefaultCodegen;
|
||||
import org.openapitools.codegen.languages.JavaClientCodegen;
|
||||
import org.testng.Assert;
|
||||
import org.testng.annotations.Test;
|
||||
@@ -36,6 +38,63 @@ public class JavaModelEnumTest {
|
||||
Assert.assertTrue(enumVar.isEnum);
|
||||
}
|
||||
|
||||
@Test(description = "convert a java model with an enum inside a list")
|
||||
public void converterInArrayTest() {
|
||||
final ArraySchema enumSchema = new ArraySchema().items(
|
||||
new StringSchema().addEnumItem("Aaaa").addEnumItem("Bbbb"));
|
||||
final Schema model = new Schema().type("object").addProperties("name", enumSchema);
|
||||
|
||||
final DefaultCodegen codegen = new JavaClientCodegen();
|
||||
final CodegenModel cm = codegen.fromModel("sample", model);
|
||||
|
||||
Assert.assertEquals(cm.vars.size(), 1);
|
||||
|
||||
final CodegenProperty enumVar = cm.vars.get(0);
|
||||
Assert.assertEquals(enumVar.baseName, "name");
|
||||
Assert.assertEquals(enumVar.datatype, "List<String>");
|
||||
Assert.assertEquals(enumVar.datatypeWithEnum, "List<NameEnum>");
|
||||
Assert.assertEquals(enumVar.name, "name");
|
||||
Assert.assertEquals(enumVar.defaultValue, "new ArrayList<NameEnum>()");
|
||||
Assert.assertEquals(enumVar.baseType, "List");
|
||||
Assert.assertTrue(enumVar.isEnum);
|
||||
|
||||
Assert.assertEquals(enumVar.items.baseName, "name");
|
||||
Assert.assertEquals(enumVar.items.datatype, "String");
|
||||
Assert.assertEquals(enumVar.items.datatypeWithEnum, "NameEnum");
|
||||
Assert.assertEquals(enumVar.items.name, "name");
|
||||
Assert.assertEquals(enumVar.items.defaultValue, "null");
|
||||
Assert.assertEquals(enumVar.items.baseType, "String");
|
||||
}
|
||||
|
||||
@Test(description = "convert a java model with an enum inside a list")
|
||||
public void converterInArrayInArrayTest() {
|
||||
final ArraySchema enumSchema = new ArraySchema().items(
|
||||
new ArraySchema().items(
|
||||
new StringSchema().addEnumItem("Aaaa").addEnumItem("Bbbb")));
|
||||
final Schema model = new Schema().type("object").addProperties("name", enumSchema);
|
||||
|
||||
final DefaultCodegen codegen = new JavaClientCodegen();
|
||||
final CodegenModel cm = codegen.fromModel("sample", model);
|
||||
|
||||
Assert.assertEquals(cm.vars.size(), 1);
|
||||
|
||||
final CodegenProperty enumVar = cm.vars.get(0);
|
||||
Assert.assertEquals(enumVar.baseName, "name");
|
||||
Assert.assertEquals(enumVar.datatype, "List<List<String>>");
|
||||
Assert.assertEquals(enumVar.datatypeWithEnum, "List<List<NameEnum>>");
|
||||
Assert.assertEquals(enumVar.name, "name");
|
||||
Assert.assertEquals(enumVar.defaultValue, "new ArrayList<List<NameEnum>>()");
|
||||
Assert.assertEquals(enumVar.baseType, "List");
|
||||
Assert.assertTrue(enumVar.isEnum);
|
||||
|
||||
Assert.assertEquals(enumVar.items.items.baseName, "name");
|
||||
Assert.assertEquals(enumVar.items.items.datatype, "String");
|
||||
Assert.assertEquals(enumVar.items.items.datatypeWithEnum, "NameEnum");
|
||||
Assert.assertEquals(enumVar.items.items.name, "name");
|
||||
Assert.assertEquals(enumVar.items.items.defaultValue, "null");
|
||||
Assert.assertEquals(enumVar.items.items.baseType, "String");
|
||||
}
|
||||
|
||||
@Test(description = "not override identical parent enums")
|
||||
public void overrideEnumTest() {
|
||||
final StringSchema identicalEnumProperty = new StringSchema();
|
||||
|
||||
@@ -17,6 +17,7 @@ import io.swagger.v3.oas.models.media.StringSchema;
|
||||
import io.swagger.v3.oas.models.media.XML;
|
||||
import io.swagger.v3.oas.models.parameters.Parameter;
|
||||
import io.swagger.v3.oas.models.parameters.QueryParameter;
|
||||
import io.swagger.v3.oas.models.parameters.RequestBody;
|
||||
import io.swagger.v3.oas.models.responses.ApiResponse;
|
||||
import io.swagger.v3.oas.models.responses.ApiResponses;
|
||||
import io.swagger.v3.parser.util.SchemaTypeUtil;
|
||||
@@ -538,12 +539,14 @@ public class JavaModelTest {
|
||||
@Test(description = "convert a parameter")
|
||||
public void convertParameterTest() {
|
||||
final Parameter parameter = new QueryParameter()
|
||||
.description("this is a description")
|
||||
.name("limit")
|
||||
.required(true);
|
||||
final DefaultCodegen codegen = new JavaClientCodegen();
|
||||
final CodegenParameter cm = codegen.fromParameter(parameter, null);
|
||||
|
||||
Assert.assertNull(cm.allowableValues);
|
||||
Assert.assertEquals(cm.description, "this is a description");
|
||||
}
|
||||
|
||||
@Test(description = "types used by inner properties should be imported")
|
||||
@@ -805,39 +808,47 @@ public class JavaModelTest {
|
||||
Assert.assertEquals(cp1.datatype, "List<Pet>");
|
||||
Assert.assertEquals(cp1.name, "pets");
|
||||
Assert.assertEquals(cp1.baseType, "List");
|
||||
Assert.assertTrue(cp1.isContainer);
|
||||
Assert.assertTrue(cp1.isListContainer);
|
||||
Assert.assertFalse(cp1.isMapContainer);
|
||||
Assert.assertEquals(cp1.getter, "getPets");
|
||||
Assert.assertEquals(cp1.items.baseType, "Pet");
|
||||
|
||||
Assert.assertTrue(cm.imports.contains("List"));
|
||||
Assert.assertTrue(cm.imports.contains("Pet"));
|
||||
}
|
||||
|
||||
// @Test(description = "convert an array schema in a RequestBody")
|
||||
// public void arraySchemaTestInRequestBody() {
|
||||
// final Schema testSchema = new ArraySchema()
|
||||
// .items(new Schema<>().$ref("#/components/schemas/Pet"));
|
||||
// Operation operation = new Operation()
|
||||
// .requestBody(new RequestBody()
|
||||
// .content(new Content().addMediaType("application/json",
|
||||
// new MediaType().schema(testSchema))))
|
||||
// .responses(
|
||||
// new ApiResponses().addApiResponse("204", new ApiResponse()
|
||||
// .description("Ok response")));
|
||||
// final Map<String, Schema> allDefinitions = Collections.<String, Schema> singletonMap("Pet", new ObjectSchema());
|
||||
// final DefaultCodegen codegen = new JavaClientCodegen();
|
||||
// final CodegenOperation co = codegen.fromOperation("testSchema", "GET", operation, allDefinitions);
|
||||
//
|
||||
// Assert.assertEquals(co.bodyParams.size(), 1);
|
||||
// CodegenParameter cp1 = co.bodyParams.get(0);
|
||||
// Assert.assertEquals(cp1.baseType, "Pet");
|
||||
// Assert.assertEquals(cp1.dataType, "List<Pet>");
|
||||
// Assert.assertEquals(cp1.items.baseType, "Pet");
|
||||
// Assert.assertEquals(cp1.items.complexType, "Pet");
|
||||
// Assert.assertEquals(cp1.items.datatype, "List<Pet>");
|
||||
//
|
||||
// Assert.assertEquals(co.responses.size(), 1);
|
||||
//
|
||||
// Assert.assertTrue(co.imports.contains("Pet"));
|
||||
// }
|
||||
@Test(description = "convert an array schema in a RequestBody")
|
||||
public void arraySchemaTestInRequestBody() {
|
||||
final Schema testSchema = new ArraySchema()
|
||||
.items(new Schema<>().$ref("#/components/schemas/Pet"));
|
||||
Operation operation = new Operation()
|
||||
.requestBody(new RequestBody()
|
||||
.content(new Content().addMediaType("application/json",
|
||||
new MediaType().schema(testSchema))))
|
||||
.responses(
|
||||
new ApiResponses().addApiResponse("204", new ApiResponse()
|
||||
.description("Ok response")));
|
||||
final Map<String, Schema> allDefinitions = Collections.<String, Schema> singletonMap("Pet", new ObjectSchema());
|
||||
final DefaultCodegen codegen = new JavaClientCodegen();
|
||||
final CodegenOperation co = codegen.fromOperation("testSchema", "GET", operation, allDefinitions);
|
||||
|
||||
Assert.assertEquals(co.bodyParams.size(), 1);
|
||||
CodegenParameter cp1 = co.bodyParams.get(0);
|
||||
Assert.assertEquals(cp1.baseType, "List");
|
||||
Assert.assertEquals(cp1.dataType, "List<Pet>");
|
||||
Assert.assertTrue(cp1.isContainer);
|
||||
Assert.assertTrue(cp1.isListContainer);
|
||||
Assert.assertFalse(cp1.isMapContainer);
|
||||
Assert.assertEquals(cp1.items.baseType, "Pet");
|
||||
Assert.assertEquals(cp1.items.complexType, "Pet");
|
||||
Assert.assertEquals(cp1.items.datatype, "Pet");
|
||||
|
||||
Assert.assertEquals(co.responses.size(), 1);
|
||||
|
||||
Assert.assertTrue(co.imports.contains("List"));
|
||||
Assert.assertTrue(co.imports.contains("Pet"));
|
||||
}
|
||||
|
||||
@Test(description = "convert an array schema in a ApiResponse")
|
||||
public void arraySchemaTestInOperationResponse() {
|
||||
@@ -883,6 +894,65 @@ public class JavaModelTest {
|
||||
Assert.assertTrue(cm.imports.contains("Pet"));
|
||||
}
|
||||
|
||||
@Test(description = "convert an array of array schema in a RequestBody")
|
||||
public void arrayOfArraySchemaTestInRequestBody() {
|
||||
final Schema testSchema = new ArraySchema()
|
||||
.items(new ArraySchema()
|
||||
.items(new Schema<>().$ref("#/components/schemas/Pet")));
|
||||
Operation operation = new Operation()
|
||||
.requestBody(new RequestBody()
|
||||
.content(new Content().addMediaType("application/json",
|
||||
new MediaType().schema(testSchema))))
|
||||
.responses(
|
||||
new ApiResponses().addApiResponse("204", new ApiResponse()
|
||||
.description("Ok response")));
|
||||
final Map<String, Schema> allDefinitions = Collections.<String, Schema> singletonMap("Pet", new ObjectSchema());
|
||||
final DefaultCodegen codegen = new JavaClientCodegen();
|
||||
final CodegenOperation co = codegen.fromOperation("testSchema", "GET", operation, allDefinitions);
|
||||
|
||||
Assert.assertEquals(co.bodyParams.size(), 1);
|
||||
CodegenParameter cp1 = co.bodyParams.get(0);
|
||||
Assert.assertEquals(cp1.baseType, "List");
|
||||
Assert.assertEquals(cp1.dataType, "List<List<Pet>>");
|
||||
Assert.assertTrue(cp1.isContainer);
|
||||
Assert.assertTrue(cp1.isListContainer);
|
||||
Assert.assertFalse(cp1.isMapContainer);
|
||||
Assert.assertEquals(cp1.items.baseType, "List");
|
||||
Assert.assertEquals(cp1.items.complexType, "Pet");
|
||||
Assert.assertEquals(cp1.items.datatype, "List<Pet>");
|
||||
Assert.assertEquals(cp1.items.items.baseType, "Pet");
|
||||
Assert.assertEquals(cp1.items.items.complexType, "Pet");
|
||||
Assert.assertEquals(cp1.items.items.datatype, "Pet");
|
||||
|
||||
Assert.assertEquals(co.responses.size(), 1);
|
||||
|
||||
Assert.assertTrue(co.imports.contains("Pet"));
|
||||
Assert.assertTrue(co.imports.contains("List"));
|
||||
}
|
||||
|
||||
@Test(description = "convert a array schema in a ApiResponse")
|
||||
public void arrayOfArraySchemaTestInOperationResponse() {
|
||||
final Schema testSchema = new ArraySchema()
|
||||
.items(new ArraySchema()
|
||||
.items(new Schema<>().$ref("#/components/schemas/Pet")));
|
||||
Operation operation = new Operation().responses(
|
||||
new ApiResponses().addApiResponse("200", new ApiResponse()
|
||||
.description("Ok response")
|
||||
.content(new Content().addMediaType("application/json",
|
||||
new MediaType().schema(testSchema)))));
|
||||
final Map<String, Schema> allDefinitions = Collections.<String, Schema> singletonMap("Pet", new ObjectSchema());
|
||||
final DefaultCodegen codegen = new JavaClientCodegen();
|
||||
final CodegenOperation co = codegen.fromOperation("testSchema", "GET", operation, allDefinitions);
|
||||
|
||||
Assert.assertEquals(co.responses.size(), 1);
|
||||
CodegenResponse cr = co.responses.get(0);
|
||||
Assert.assertEquals(cr.baseType, "Pet");
|
||||
Assert.assertEquals(cr.dataType, "List<List<Pet>>");
|
||||
Assert.assertEquals(cr.containerType, "array");
|
||||
|
||||
Assert.assertTrue(co.imports.contains("Pet"));
|
||||
}
|
||||
|
||||
@Test(enabled = false, description = "disabled since templates have been moved.")
|
||||
public void generateModel() throws Exception {
|
||||
folder.create();
|
||||
|
||||
Reference in New Issue
Block a user