Skip to content

Commit d8e158d

Browse files
committed
added test for composed schemas in java generator
1 parent e7d01ed commit d8e158d

File tree

4 files changed

+277
-60
lines changed

4 files changed

+277
-60
lines changed

src/test/java/io/swagger/codegen/v3/generators/AbstractCodegenTest.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,19 @@
11
package io.swagger.codegen.v3.generators;
22

3+
import io.swagger.codegen.v3.CodegenConfig;
4+
import io.swagger.codegen.v3.CodegenModel;
5+
import io.swagger.codegen.v3.CodegenSchema;
36
import io.swagger.codegen.v3.CodegenType;
7+
import io.swagger.codegen.v3.ISchemaHandler;
48
import io.swagger.v3.oas.models.OpenAPI;
9+
import io.swagger.v3.oas.models.media.Schema;
510
import io.swagger.v3.parser.OpenAPIV3Parser;
611
import io.swagger.v3.parser.core.models.ParseOptions;
712
import io.swagger.v3.parser.core.models.SwaggerParseResult;
813

14+
import java.util.List;
15+
import java.util.Map;
16+
917
public abstract class AbstractCodegenTest {
1018

1119
protected OpenAPI getOpenAPI(String filePath) {
@@ -41,4 +49,28 @@ public String getHelp() {
4149
}
4250
};
4351
}
52+
53+
protected CodegenWrapper processSchemas(CodegenConfig codegenConfig, OpenAPI openAPI) {
54+
codegenConfig.preprocessOpenAPI(openAPI);
55+
final Map<String, Schema> schemaMap = openAPI.getComponents().getSchemas();
56+
57+
final CodegenWrapper codegenWrapper = new CodegenWrapper(codegenConfig.getSchemaHandler());
58+
for (String name : schemaMap.keySet()) {
59+
final Schema schema = schemaMap.get(name);
60+
final CodegenModel codegenModel = codegenConfig.fromModel(name, schema, schemaMap);
61+
codegenWrapper.addCodegenSchema(codegenModel, schema);
62+
}
63+
64+
generateComposedObjects(codegenWrapper.getSchemaHandler(),
65+
codegenWrapper.getCodegenSchemas(),
66+
codegenWrapper.getAllModels());
67+
68+
return codegenWrapper;
69+
}
70+
71+
protected void generateComposedObjects(ISchemaHandler schemaHandler, List<CodegenSchema> codegenSchemas, Map<String, CodegenModel> allModels) {
72+
for (CodegenSchema codegenSchema : codegenSchemas) {
73+
schemaHandler.processComposedSchemas(codegenSchema.getCodegenModel(), codegenSchema.getSchema(), allModels);
74+
}
75+
}
4476
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package io.swagger.codegen.v3.generators;
2+
3+
import io.swagger.codegen.v3.CodegenModel;
4+
import io.swagger.codegen.v3.CodegenSchema;
5+
import io.swagger.codegen.v3.ISchemaHandler;
6+
import io.swagger.v3.oas.models.media.Schema;
7+
8+
9+
import java.util.ArrayList;
10+
import java.util.HashMap;
11+
import java.util.List;
12+
import java.util.Map;
13+
14+
public class CodegenWrapper {
15+
16+
private ISchemaHandler schemaHandler;
17+
private List<CodegenSchema> codegenSchemas;
18+
private Map<String, CodegenModel> allModels;
19+
20+
public CodegenWrapper(){}
21+
22+
public CodegenWrapper(ISchemaHandler schemaHandler){
23+
this.schemaHandler = schemaHandler;
24+
}
25+
26+
public void addCodegenSchema(CodegenModel codegenModel, Schema schema) {
27+
if (codegenSchemas == null) {
28+
codegenSchemas = new ArrayList<>();
29+
}
30+
codegenSchemas.add(new CodegenSchema(codegenModel, schema));
31+
addModel(codegenModel);
32+
}
33+
34+
public void addModel(CodegenModel codegenModel) {
35+
if (allModels == null) {
36+
allModels = new HashMap<>();
37+
}
38+
allModels.put(codegenModel.classname, codegenModel);
39+
}
40+
41+
public ISchemaHandler getSchemaHandler() {
42+
return schemaHandler;
43+
}
44+
45+
public List<CodegenSchema> getCodegenSchemas() {
46+
return codegenSchemas;
47+
}
48+
49+
public Map<String, CodegenModel> getAllModels() {
50+
return allModels;
51+
}
52+
}

src/test/java/io/swagger/codegen/v3/generators/java/JavaClientCodegenTest.java

Lines changed: 39 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,14 @@
77
import io.swagger.codegen.v3.CodegenModelType;
88
import io.swagger.codegen.v3.CodegenParameter;
99
import io.swagger.codegen.v3.CodegenProperty;
10+
import io.swagger.codegen.v3.CodegenSchema;
11+
import io.swagger.codegen.v3.ISchemaHandler;
12+
import io.swagger.codegen.v3.generators.AbstractCodegenTest;
13+
import io.swagger.codegen.v3.generators.CodegenWrapper;
1014
import io.swagger.codegen.v3.generators.DefaultCodegenConfig;
15+
import io.swagger.codegen.v3.generators.SchemaHandler;
1116
import io.swagger.util.Json;
17+
import io.swagger.util.Yaml;
1218
import io.swagger.v3.oas.models.OpenAPI;
1319
import io.swagger.v3.oas.models.media.ArraySchema;
1420
import io.swagger.v3.oas.models.media.ComposedSchema;
@@ -34,7 +40,7 @@
3440
import java.util.List;
3541
import java.util.Map;
3642

37-
public class JavaClientCodegenTest {
43+
public class JavaClientCodegenTest extends AbstractCodegenTest {
3844

3945
@Test
4046
public void modelInheritanceSupportInGson() throws Exception {
@@ -150,27 +156,26 @@ public void arraysInRequestBody() throws Exception {
150156
RequestBody body1 = new RequestBody();
151157
body1.setDescription("A list of ids");
152158
body1.setContent(new Content().addMediaType("application/json", new MediaType().schema(new ArraySchema().items(new StringSchema()))));
153-
CodegenParameter codegenParameter1 = codegen.fromRequestBody(body1 , null, null, new HashMap<String, Schema>(), new HashSet<String>());
159+
CodegenParameter codegenParameter1 = codegen.fromRequestBody(body1, null, null, new HashMap<String, Schema>(), new HashSet<String>());
154160
Assert.assertEquals(codegenParameter1.description, "A list of ids");
155161
Assert.assertEquals(codegenParameter1.dataType, "List<String>");
156162
Assert.assertEquals(codegenParameter1.baseType, "String");
157163

158164
RequestBody body2 = new RequestBody();
159165
body2.setDescription("A list of list of values");
160166
body2.setContent(new Content().addMediaType("application/json", new MediaType().schema(new ArraySchema().items(new ArraySchema().items(new IntegerSchema())))));
161-
CodegenParameter codegenParameter2 = codegen.fromRequestBody(body2 , null, null, new HashMap<String, Schema>(), new HashSet<String>());
167+
CodegenParameter codegenParameter2 = codegen.fromRequestBody(body2, null, null, new HashMap<String, Schema>(), new HashSet<String>());
162168
Assert.assertEquals(codegenParameter2.description, "A list of list of values");
163169
Assert.assertEquals(codegenParameter2.dataType, "List<List<Integer>>");
164170
Assert.assertEquals(codegenParameter2.baseType, "List");
165-
166171
RequestBody body3 = new RequestBody();
167172
body3.setDescription("A list of points");
168173
body3.setContent(new Content().addMediaType("application/json", new MediaType().schema(new ArraySchema().items(new ObjectSchema().$ref("#/components/schemas/Point")))));
169174
ObjectSchema point = new ObjectSchema();
170175
point.addProperties("message", new StringSchema());
171176
point.addProperties("x", new IntegerSchema().format(SchemaTypeUtil.INTEGER32_FORMAT));
172177
point.addProperties("y", new IntegerSchema().format(SchemaTypeUtil.INTEGER32_FORMAT));
173-
CodegenParameter codegenParameter3 = codegen.fromRequestBody(body3 , null, null, Collections.<String, Schema>singletonMap("Point", point), new HashSet<String>());
178+
CodegenParameter codegenParameter3 = codegen.fromRequestBody(body3, null, null, Collections.<String, Schema>singletonMap("Point", point), new HashSet<String>());
174179
Assert.assertEquals(codegenParameter3.description, "A list of points");
175180
Assert.assertEquals(codegenParameter3.dataType, "List<Point>");
176181
Assert.assertEquals(codegenParameter3.baseType, "Point");
@@ -180,7 +185,7 @@ public void arraysInRequestBody() throws Exception {
180185
public void nullValuesInComposedSchema() throws Exception {
181186
final JavaClientCodegen codegen = new JavaClientCodegen();
182187
CodegenModel result = codegen.fromModel("CompSche",
183-
new ComposedSchema());
188+
new ComposedSchema());
184189
Assert.assertEquals(result.name, "CompSche");
185190
}
186191

@@ -218,7 +223,7 @@ public void testPackageNamesSetWithAdditionalProperties() throws Exception {
218223
final JavaClientCodegen codegen = new JavaClientCodegen();
219224
codegen.additionalProperties().put(CodegenConstants.MODEL_PACKAGE, "xxx.yyyyy.zzzzzzz.mmmmm.model");
220225
codegen.additionalProperties().put(CodegenConstants.API_PACKAGE, "xxx.yyyyy.zzzzzzz.aaaaa.api");
221-
codegen.additionalProperties().put(CodegenConstants.INVOKER_PACKAGE,"xxx.yyyyy.zzzzzzz.iiii.invoker");
226+
codegen.additionalProperties().put(CodegenConstants.INVOKER_PACKAGE, "xxx.yyyyy.zzzzzzz.iiii.invoker");
222227
codegen.processOpts();
223228

224229
Assert.assertEquals(codegen.modelPackage(), "xxx.yyyyy.zzzzzzz.mmmmm.model");
@@ -262,11 +267,11 @@ public void testPackageNamesSetInvokerDerivedFromModel() throws Exception {
262267
public void customTemplates() throws Exception {
263268
final JavaClientCodegen codegen = new JavaClientCodegen();
264269
codegen.processOpts();
265-
Assert.assertEquals(codegen.templateDir(), "handlebars" + File.separator + "Java");
270+
Assert.assertEquals(codegen.templateDir(), "handlebars" + File.separator + "Java");
266271

267-
codegen.additionalProperties().put(CodegenConstants.TEMPLATE_DIR, String.join(File.separator,"user", "custom", "location"));
272+
codegen.additionalProperties().put(CodegenConstants.TEMPLATE_DIR, String.join(File.separator, "user", "custom", "location"));
268273
codegen.processOpts();
269-
Assert.assertEquals(codegen.templateDir(), String.join(File.separator,"user", "custom", "location"));
274+
Assert.assertEquals(codegen.templateDir(), String.join(File.separator, "user", "custom", "location"));
270275
}
271276

272277
@Test
@@ -304,64 +309,38 @@ public void testModelNamedFile() {
304309
Assert.assertFalse(codegenModelSetting.imports.stream().anyMatch(_import -> _import.equals("java.io.File")));
305310
}
306311

307-
private OpenAPI getOpenAPI(String filePath) {
308-
OpenAPIV3Parser openApiParser = new OpenAPIV3Parser();
309-
ParseOptions options = new ParseOptions();
310-
options.setResolve(true);
311-
options.setFlatten(true);
312-
SwaggerParseResult parseResult = openApiParser.readLocation(filePath, null, options);
313-
314-
return parseResult.getOpenAPI();
315-
}
316-
317-
318-
319-
320-
321-
322-
323-
324-
325-
326-
327-
328-
329-
330-
331-
332-
333-
334-
335-
336-
337-
338-
339-
340-
341-
342-
343-
344-
345-
346-
347-
348-
349-
350-
351-
352-
353-
354-
355-
356-
312+
@Test
313+
public void checkOneOfModelCreation() {
314+
final OpenAPI openAPI = getOpenAPI("3_0_0/composed_schemas.yaml");
315+
final CodegenConfig config = new JavaClientCodegen();
316+
final CodegenWrapper codegenWrapper = processSchemas(config, openAPI);
357317

318+
CodegenModel codegenModel = codegenWrapper.getAllModels().get("PartMaster");
358319

320+
boolean hasOneOfProperty = codegenModel.getVars()
321+
.stream()
322+
.anyMatch(codegenProperty -> codegenProperty.datatype.equals("OneOfPartMasterDestination"));
359323

324+
Assert.assertTrue(hasOneOfProperty);
360325

326+
hasOneOfProperty = codegenModel.getVars()
327+
.stream()
328+
.anyMatch(codegenProperty -> codegenProperty.datatype.equals("OneOfPartMasterOrigin"));
361329

330+
Assert.assertTrue(hasOneOfProperty);
362331

332+
final ISchemaHandler schemaHandler = codegenWrapper.getSchemaHandler();
363333

334+
boolean hasComposedModel = schemaHandler.getModels()
335+
.stream()
336+
.anyMatch(model -> model.name.equals("OneOfPartMasterDestination"));
364337

338+
Assert.assertTrue(hasComposedModel);
365339

340+
hasComposedModel = schemaHandler.getModels()
341+
.stream()
342+
.anyMatch(model -> model.name.equals("OneOfPartMasterOrigin"));
366343

344+
Assert.assertTrue(hasComposedModel);
345+
}
367346
}

0 commit comments

Comments
 (0)