From 60ed4a3367684f2168d43071436744174cc0d7bf Mon Sep 17 00:00:00 2001 From: HugoMario Date: Sat, 11 Jan 2020 06:31:52 -0500 Subject: [PATCH 1/6] allow models named file and other utils default java classes. --- .../v3/generators/DefaultCodegenConfig.java | 23 ++++ .../generators/java/AbstractJavaCodegen.java | 11 +- .../java/JavaClientCodegenTest.java | 104 +++++++++++++++++- .../resources/3_0_0/model_named_file.yaml | 62 +++++++++++ 4 files changed, 193 insertions(+), 7 deletions(-) create mode 100644 src/test/resources/3_0_0/model_named_file.yaml diff --git a/src/main/java/io/swagger/codegen/v3/generators/DefaultCodegenConfig.java b/src/main/java/io/swagger/codegen/v3/generators/DefaultCodegenConfig.java index 67840a7763..81ea7f6c59 100644 --- a/src/main/java/io/swagger/codegen/v3/generators/DefaultCodegenConfig.java +++ b/src/main/java/io/swagger/codegen/v3/generators/DefaultCodegenConfig.java @@ -1717,6 +1717,9 @@ public CodegenProperty fromProperty(String name, Schema propertySchema) { CodegenProperty cp = fromProperty("inner", new ObjectSchema()); updatePropertyForMap(codegenProperty, cp); } else { + if (isObjectSchema(propertySchema)) { + codegenProperty.getVendorExtensions().put("x-is-object", Boolean.TRUE); + } setNonArrayMapProperty(codegenProperty, type); } return codegenProperty; @@ -3147,6 +3150,26 @@ private void addVars(CodegenModel codegenModel, List vars, Map< codegenModel.readWriteVars.add(codegenProperty); } } + // check if one of the property is a object and has import mapping. + List modelProperties = vars.stream() + .filter(codegenProperty -> getBooleanValue(codegenProperty, "x-is-object") && importMapping.containsKey(codegenProperty.baseType)) + .collect(Collectors.toList()); + + for (CodegenProperty modelProperty : modelProperties) { + List codegenProperties = vars.stream() + .filter(codegenProperty -> !getBooleanValue(codegenProperty, "x-is-object") + && importMapping.containsKey(codegenProperty.baseType) + && codegenProperty.baseType.equals(modelProperty.baseType)) + .collect(Collectors.toList()); + if (codegenProperties == null || codegenProperties.isEmpty()) { + continue; + } + for (CodegenProperty codegenProperty : codegenProperties) { + codegenModel.imports.remove(codegenProperty.baseType); + codegenProperty.datatype = importMapping.get(codegenProperty.baseType); + codegenProperty.datatypeWithEnum = codegenProperty.datatype; + } + } } /** diff --git a/src/main/java/io/swagger/codegen/v3/generators/java/AbstractJavaCodegen.java b/src/main/java/io/swagger/codegen/v3/generators/java/AbstractJavaCodegen.java index 6cc4fb1d0e..b0a0050d8a 100644 --- a/src/main/java/io/swagger/codegen/v3/generators/java/AbstractJavaCodegen.java +++ b/src/main/java/io/swagger/codegen/v3/generators/java/AbstractJavaCodegen.java @@ -598,12 +598,6 @@ public String toParamName(String name) { @Override public String toModelName(final String name) { - // We need to check if import-mapping has a different model for this class, so we use it - // instead of the auto-generated one. - if (importMapping.containsKey(name)) { - return importMapping.get(name); - } - final String sanitizedName = sanitizeName(name); String nameWithPrefixSuffix = sanitizedName; @@ -1449,4 +1443,9 @@ public void setLanguageArguments(List languageArguments) { super.setLanguageArguments(languageArguments); } + + @Override + public boolean ignoreImportMapping() { + return true; + } } diff --git a/src/test/java/io/swagger/codegen/v3/generators/java/JavaClientCodegenTest.java b/src/test/java/io/swagger/codegen/v3/generators/java/JavaClientCodegenTest.java index ef89567049..5d65350fd4 100644 --- a/src/test/java/io/swagger/codegen/v3/generators/java/JavaClientCodegenTest.java +++ b/src/test/java/io/swagger/codegen/v3/generators/java/JavaClientCodegenTest.java @@ -1,10 +1,14 @@ package io.swagger.codegen.v3.generators.java; +import io.swagger.codegen.v3.CodegenConfig; import io.swagger.codegen.v3.CodegenConstants; import io.swagger.codegen.v3.CodegenModel; import io.swagger.codegen.v3.CodegenModelFactory; import io.swagger.codegen.v3.CodegenModelType; import io.swagger.codegen.v3.CodegenParameter; +import io.swagger.codegen.v3.CodegenProperty; +import io.swagger.util.Json; +import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.media.ArraySchema; import io.swagger.v3.oas.models.media.ComposedSchema; import io.swagger.v3.oas.models.media.Content; @@ -14,6 +18,9 @@ import io.swagger.v3.oas.models.media.Schema; import io.swagger.v3.oas.models.media.StringSchema; import io.swagger.v3.oas.models.parameters.RequestBody; +import io.swagger.v3.parser.OpenAPIV3Parser; +import io.swagger.v3.parser.core.models.ParseOptions; +import io.swagger.v3.parser.core.models.SwaggerParseResult; import io.swagger.v3.parser.util.SchemaTypeUtil; import org.testng.Assert; import org.testng.annotations.Test; @@ -154,7 +161,7 @@ public void arraysInRequestBody() throws Exception { Assert.assertEquals(codegenParameter2.description, "A list of list of values"); Assert.assertEquals(codegenParameter2.dataType, "List>"); 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"))))); @@ -260,4 +267,99 @@ public void customTemplates() throws Exception { codegen.processOpts(); Assert.assertEquals(codegen.templateDir(), String.join(File.separator,"user", "custom", "location")); } + + @Test + public void testModelNamedFile() { + final OpenAPI openAPI = getOpenAPI("3_0_0/model_named_file.yaml"); + final CodegenConfig config = new JavaClientCodegen(); + config.preprocessOpenAPI(openAPI); + + final Schema modelFile = openAPI.getComponents().getSchemas().get("File"); + final Schema modelSetting = openAPI.getComponents().getSchemas().get("Setting"); + + final CodegenModel codegenModelFile = config.fromModel("File", modelFile, openAPI.getComponents().getSchemas()); + final CodegenModel codegenModelSetting = config.fromModel("Setting", modelSetting, openAPI.getComponents().getSchemas()); + + Assert.assertEquals(codegenModelFile.name, "File"); + Assert.assertEquals(codegenModelSetting.name, "Setting"); + + final List codegenProperties = codegenModelSetting.getVars(); + + Assert.assertEquals(codegenProperties.size(), 2); + + CodegenProperty fileProperty = codegenProperties.stream().filter(property -> property.name.equals("file")).findAny().get(); + + Assert.assertEquals(fileProperty.name, "file"); + Assert.assertEquals(fileProperty.baseType, "File"); + Assert.assertEquals(fileProperty.datatype, "File"); + + CodegenProperty documentProperty = codegenProperties.stream().filter(property -> property.name.equals("document")).findAny().get(); + + Assert.assertEquals(documentProperty.name, "document"); + Assert.assertEquals(documentProperty.baseType, "File"); + Assert.assertEquals(documentProperty.datatype, "java.io.File"); + + Assert.assertFalse(codegenModelSetting.imports.stream().anyMatch(_import -> _import.equals("java.io.File"))); + } + + private OpenAPI getOpenAPI(String filePath) { + OpenAPIV3Parser openApiParser = new OpenAPIV3Parser(); + ParseOptions options = new ParseOptions(); + options.setResolve(true); + options.setFlatten(true); + SwaggerParseResult parseResult = openApiParser.readLocation(filePath, null, options); + + return parseResult.getOpenAPI(); + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + } diff --git a/src/test/resources/3_0_0/model_named_file.yaml b/src/test/resources/3_0_0/model_named_file.yaml new file mode 100644 index 0000000000..274d7274e7 --- /dev/null +++ b/src/test/resources/3_0_0/model_named_file.yaml @@ -0,0 +1,62 @@ +openapi: 3.0.0 +servers: + - description: SwaggerHub API Auto Mocking + url: / +info: + description: This is a simple API + version: "1.0.0" + title: Simple Inventory API + +paths: + /inventory: + post: + tags: + - Inventory + summary: adds an inventory item + operationId: addInventory + description: Adds an item to the system + responses: + '201': + description: item created + '400': + description: 'invalid input, object invalid' + '409': + description: an existing item already exists + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/Setting' + description: Inventory item to add +components: + schemas: + Archive: + type: string + format: binary + + File: + description: File. + type: object + properties: + prop1: + type: string + + Date: + type: object + properties: + place: + type: string + + Setting: + description: Setting. + properties: + file: + $ref: '#/components/schemas/File' + date: + $ref: '#/components/schemas/Date' + document: + type: string + format: binary + time: + type: string + format: date-time From c488f4b7267367f4221acd69ea2f97c1a685c6ed Mon Sep 17 00:00:00 2001 From: HugoMario Date: Sun, 12 Jan 2020 01:27:50 -0500 Subject: [PATCH 2/6] use ignore import mapping as an option, default true for java generators --- .../v3/generators/DefaultCodegenConfig.java | 17 ++++++++++++++++- .../v3/generators/java/AbstractJavaCodegen.java | 9 ++++++++- .../generators/java/JavaClientCodegenTest.java | 3 ++- 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/swagger/codegen/v3/generators/DefaultCodegenConfig.java b/src/main/java/io/swagger/codegen/v3/generators/DefaultCodegenConfig.java index 81ea7f6c59..c023154418 100644 --- a/src/main/java/io/swagger/codegen/v3/generators/DefaultCodegenConfig.java +++ b/src/main/java/io/swagger/codegen/v3/generators/DefaultCodegenConfig.java @@ -171,6 +171,7 @@ public abstract class DefaultCodegenConfig implements CodegenConfig { protected String ignoreFilePathOverride; protected boolean useOas2 = false; protected boolean copyFistAllOfProperties = false; + protected boolean ignoreImportMapping; public List cliOptions() { return cliOptions; @@ -181,6 +182,12 @@ public void processOpts() { this.setTemplateDir((String) additionalProperties.get(CodegenConstants.TEMPLATE_DIR)); } + if (additionalProperties.get(CodegenConstants.IGNORE_IMPORT_MAPPING_OPTION) != null) { + setIgnoreImportMapping(Boolean.parseBoolean( additionalProperties.get(CodegenConstants.IGNORE_IMPORT_MAPPING_OPTION).toString())); + } else { + setIgnoreImportMapping(defaultIgnoreImportMappingOption()); + } + if (additionalProperties.containsKey(CodegenConstants.TEMPLATE_VERSION)) { this.setTemplateVersion((String) additionalProperties.get(CodegenConstants.TEMPLATE_VERSION)); } @@ -4264,7 +4271,15 @@ public void setUnflattenedOpenAPI(OpenAPI unflattenedOpenAPI) { this.unflattenedOpenAPI = unflattenedOpenAPI; } - public boolean ignoreImportMapping() { + public boolean getIgnoreImportMapping() { + return ignoreImportMapping; + } + + public void setIgnoreImportMapping(boolean ignoreImportMapping) { + this.ignoreImportMapping = ignoreImportMapping; + } + + public boolean defaultIgnoreImportMappingOption() { return false; } } diff --git a/src/main/java/io/swagger/codegen/v3/generators/java/AbstractJavaCodegen.java b/src/main/java/io/swagger/codegen/v3/generators/java/AbstractJavaCodegen.java index b0a0050d8a..196102373d 100644 --- a/src/main/java/io/swagger/codegen/v3/generators/java/AbstractJavaCodegen.java +++ b/src/main/java/io/swagger/codegen/v3/generators/java/AbstractJavaCodegen.java @@ -598,6 +598,13 @@ public String toParamName(String name) { @Override public String toModelName(final String name) { + // We need to check if import-mapping has a different model for this class, so we use it + // instead of the auto-generated one. + System.out.println("getIgnoreImportMapping() => " + getIgnoreImportMapping()); + + if (!getIgnoreImportMapping() && importMapping.containsKey(name)) { + return importMapping.get(name); + } final String sanitizedName = sanitizeName(name); String nameWithPrefixSuffix = sanitizedName; @@ -1445,7 +1452,7 @@ public void setLanguageArguments(List languageArguments) { } @Override - public boolean ignoreImportMapping() { + public boolean defaultIgnoreImportMappingOption() { return true; } } diff --git a/src/test/java/io/swagger/codegen/v3/generators/java/JavaClientCodegenTest.java b/src/test/java/io/swagger/codegen/v3/generators/java/JavaClientCodegenTest.java index 5d65350fd4..76e7b1ab01 100644 --- a/src/test/java/io/swagger/codegen/v3/generators/java/JavaClientCodegenTest.java +++ b/src/test/java/io/swagger/codegen/v3/generators/java/JavaClientCodegenTest.java @@ -272,6 +272,7 @@ public void customTemplates() throws Exception { public void testModelNamedFile() { final OpenAPI openAPI = getOpenAPI("3_0_0/model_named_file.yaml"); final CodegenConfig config = new JavaClientCodegen(); + config.setIgnoreImportMapping(true); config.preprocessOpenAPI(openAPI); final Schema modelFile = openAPI.getComponents().getSchemas().get("File"); @@ -285,7 +286,7 @@ public void testModelNamedFile() { final List codegenProperties = codegenModelSetting.getVars(); - Assert.assertEquals(codegenProperties.size(), 2); + Assert.assertEquals(codegenProperties.size(), 4); CodegenProperty fileProperty = codegenProperties.stream().filter(property -> property.name.equals("file")).findAny().get(); From 2e17d9fb241e8daccc09e5213537677d4ba9f168 Mon Sep 17 00:00:00 2001 From: HugoMario Date: Sun, 12 Jan 2020 01:33:01 -0500 Subject: [PATCH 3/6] use default config class for failing test --- .../codegen/v3/generators/java/JavaClientCodegenTest.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/test/java/io/swagger/codegen/v3/generators/java/JavaClientCodegenTest.java b/src/test/java/io/swagger/codegen/v3/generators/java/JavaClientCodegenTest.java index 76e7b1ab01..253e2b37e2 100644 --- a/src/test/java/io/swagger/codegen/v3/generators/java/JavaClientCodegenTest.java +++ b/src/test/java/io/swagger/codegen/v3/generators/java/JavaClientCodegenTest.java @@ -7,6 +7,7 @@ import io.swagger.codegen.v3.CodegenModelType; import io.swagger.codegen.v3.CodegenParameter; import io.swagger.codegen.v3.CodegenProperty; +import io.swagger.codegen.v3.generators.DefaultCodegenConfig; import io.swagger.util.Json; import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.media.ArraySchema; @@ -271,7 +272,7 @@ public void customTemplates() throws Exception { @Test public void testModelNamedFile() { final OpenAPI openAPI = getOpenAPI("3_0_0/model_named_file.yaml"); - final CodegenConfig config = new JavaClientCodegen(); + final DefaultCodegenConfig config = new JavaClientCodegen(); config.setIgnoreImportMapping(true); config.preprocessOpenAPI(openAPI); From a3004f761e202b78d08a20fe36a71b52a0382b77 Mon Sep 17 00:00:00 2001 From: HugoMario Date: Mon, 13 Jan 2020 08:52:41 -0500 Subject: [PATCH 4/6] fixed tests --- .../v3/generators/AbstractCodegenTest.java | 27 ++++++++++++++ .../java/JavaCXFClientCodegenTest.java | 6 ++-- .../v3/generators/java/JavaModelTest.java | 36 ++++++++++++++----- .../kotlin/KotlinClientCodegenModelTest.java | 27 ++++++++------ .../angular/TypeScriptAngularModelTest.java | 8 ++++- 5 files changed, 82 insertions(+), 22 deletions(-) create mode 100644 src/test/java/io/swagger/codegen/v3/generators/AbstractCodegenTest.java diff --git a/src/test/java/io/swagger/codegen/v3/generators/AbstractCodegenTest.java b/src/test/java/io/swagger/codegen/v3/generators/AbstractCodegenTest.java new file mode 100644 index 0000000000..399914b9aa --- /dev/null +++ b/src/test/java/io/swagger/codegen/v3/generators/AbstractCodegenTest.java @@ -0,0 +1,27 @@ +package io.swagger.codegen.v3.generators; + +import io.swagger.v3.oas.models.Components; +import io.swagger.v3.oas.models.OpenAPI; +import io.swagger.v3.oas.models.media.Schema; +import org.mockito.Mockito; +import org.testng.annotations.BeforeTest; + +import java.util.HashMap; +import java.util.Map; + +public abstract class AbstractCodegenTest { + + protected OpenAPI openAPI; + protected Schema schema; + + @BeforeTest + public void setUp() { + this.openAPI = Mockito.mock(OpenAPI.class); + final Components components = Mockito.mock(Components.class); + final Map schemas = Mockito.mock(HashMap.class); + this.schema = Mockito.mock(Schema.class); + + Mockito.when(openAPI.getComponents()).thenReturn(components); + Mockito.when(components.getSchemas()).thenReturn(schemas); + } +} diff --git a/src/test/java/io/swagger/codegen/v3/generators/java/JavaCXFClientCodegenTest.java b/src/test/java/io/swagger/codegen/v3/generators/java/JavaCXFClientCodegenTest.java index 4779aca84e..0e46499930 100644 --- a/src/test/java/io/swagger/codegen/v3/generators/java/JavaCXFClientCodegenTest.java +++ b/src/test/java/io/swagger/codegen/v3/generators/java/JavaCXFClientCodegenTest.java @@ -2,6 +2,7 @@ import io.swagger.codegen.v3.CodegenOperation; import io.swagger.codegen.v3.CodegenResponse; +import io.swagger.codegen.v3.generators.AbstractCodegenTest; import io.swagger.v3.oas.models.Operation; import io.swagger.v3.oas.models.media.ArraySchema; import io.swagger.v3.oas.models.media.Content; @@ -17,7 +18,7 @@ import java.util.HashMap; import java.util.Map; -public class JavaCXFClientCodegenTest { +public class JavaCXFClientCodegenTest extends AbstractCodegenTest { @Test public void responseWithoutContent() throws Exception { @@ -26,13 +27,14 @@ public void responseWithoutContent() throws Exception { Operation operation = new Operation().responses(new ApiResponses() .addApiResponse("200", new ApiResponse() .description("Return a list of pets") - .content(new Content().addMediaType("application/json", + .content(new Content().addMediaType("application/json", new MediaType().schema(listOfPets)))) .addApiResponse("400", new ApiResponse() .description("Error"))); final Map allDefinitions = Collections.singletonMap("Pet", new ObjectSchema()); final JavaCXFClientCodegen codegen = new JavaCXFClientCodegen(); + codegen.preprocessOpenAPI(openAPI); final CodegenOperation co = codegen.fromOperation("getAllPets", "GET", operation, allDefinitions); Map objs = new HashMap<>(); diff --git a/src/test/java/io/swagger/codegen/v3/generators/java/JavaModelTest.java b/src/test/java/io/swagger/codegen/v3/generators/java/JavaModelTest.java index 934759f128..2ddadec718 100644 --- a/src/test/java/io/swagger/codegen/v3/generators/java/JavaModelTest.java +++ b/src/test/java/io/swagger/codegen/v3/generators/java/JavaModelTest.java @@ -10,6 +10,7 @@ import io.swagger.codegen.v3.CodegenResponse; import io.swagger.codegen.v3.DefaultGenerator; import io.swagger.codegen.v3.config.CodegenConfigurator; +import io.swagger.codegen.v3.generators.AbstractCodegenTest; import io.swagger.codegen.v3.generators.DefaultCodegenConfig; import io.swagger.v3.oas.models.Operation; import io.swagger.v3.oas.models.media.ArraySchema; @@ -43,7 +44,7 @@ import static io.swagger.codegen.v3.generators.handlebars.ExtensionHelper.getBooleanValue; -public class JavaModelTest { +public class JavaModelTest extends AbstractCodegenTest { private TemporaryFolder folder = new TemporaryFolder(); @Test(description = "convert a simple java model") @@ -57,6 +58,7 @@ public void simpleModelTest() { .addRequiredItem("id") .addRequiredItem("name"); final DefaultCodegenConfig codegen = new JavaClientCodegen(); + codegen.preprocessOpenAPI(openAPI); final CodegenModel cm = codegen.fromModel("sample", model); Assert.assertEquals(cm.name, "sample"); @@ -169,6 +171,7 @@ public void mapWithListPropertyTest() { .additionalProperties(new ArraySchema().items(new Schema().$ref("Pet")))) .addRequiredItem("id"); final DefaultCodegenConfig codegen = new JavaClientCodegen(); + codegen.preprocessOpenAPI(openAPI); final CodegenModel cm = codegen.fromModel("sample", schema); Assert.assertEquals(cm.name, "sample"); @@ -196,6 +199,7 @@ public void list2DPropertyTest() { .addProperties("list2D", new ArraySchema().items( new ArraySchema().items(new Schema().$ref("Pet")))); final DefaultCodegenConfig codegen = new JavaClientCodegen(); + codegen.preprocessOpenAPI(openAPI); final CodegenModel cm = codegen.fromModel("sample", model); Assert.assertEquals(cm.vars.size(), 1); @@ -219,6 +223,7 @@ public void complexPropertiesTest() { .description("a sample model") .addProperties("children", new Schema().$ref("#/components/schemas/Children")); final DefaultCodegenConfig codegen = new JavaClientCodegen(); + codegen.preprocessOpenAPI(openAPI); final CodegenModel cm = codegen.fromModel("sample", schema); Assert.assertEquals(cm.name, "sample"); @@ -245,6 +250,7 @@ public void complexListPropertyTest() { .addProperties("children", new ArraySchema() .items(new Schema().$ref("#/components/schemas/Children"))); final DefaultCodegenConfig codegen = new JavaClientCodegen(); + codegen.preprocessOpenAPI(openAPI); final CodegenModel cm = codegen.fromModel("sample", schema); Assert.assertEquals(cm.name, "sample"); @@ -273,6 +279,7 @@ public void complexMapPropertyTest() { .addProperties("children", new MapSchema() .additionalProperties(new Schema().$ref("#/components/schemas/Children"))); final DefaultCodegenConfig codegen = new JavaClientCodegen(); + codegen.preprocessOpenAPI(openAPI); final CodegenModel cm = codegen.fromModel("sample", schema); Assert.assertEquals(cm.name, "sample"); @@ -310,6 +317,7 @@ public void arrayModelWithItemNameTest() { final DefaultCodegenConfig codegen = new JavaClientCodegen(); + codegen.preprocessOpenAPI(openAPI); final CodegenModel cm = codegen.fromModel("sample", schema); Assert.assertEquals(cm.name, "sample"); @@ -344,6 +352,7 @@ public void arrayModelTest() { .name("arraySchema") .description("an array model"); final DefaultCodegenConfig codegen = new JavaClientCodegen(); + codegen.preprocessOpenAPI(openAPI); final CodegenModel cm = codegen.fromModel("sample", schema); Assert.assertEquals(cm.name, "sample"); @@ -354,7 +363,7 @@ public void arrayModelTest() { Assert.assertEquals(cm.imports.size(), 4); Assert.assertEquals(Sets.intersection(cm.imports, Sets.newHashSet("Schema", "List", "ArrayList", "Children")).size(), 4); } - + @Test(description = "convert an array model") public void arrayModelTestUsingOas2() { final Schema schema = new ArraySchema() @@ -362,6 +371,7 @@ public void arrayModelTestUsingOas2() { .name("arraySchema") .description("an array model"); final DefaultCodegenConfig codegen = new JavaClientCodegen(); + codegen.preprocessOpenAPI(openAPI); codegen.setUseOas2(true); final CodegenModel cm = codegen.fromModel("sample", schema); @@ -380,6 +390,7 @@ public void mapModelTest() { .description("an map model") .additionalProperties(new Schema().$ref("#/components/schemas/Children")); final DefaultCodegenConfig codegen = new JavaClientCodegen(); + codegen.preprocessOpenAPI(openAPI); final CodegenModel cm = codegen.fromModel("sample", schema); Assert.assertEquals(cm.name, "sample"); @@ -390,13 +401,14 @@ public void mapModelTest() { Assert.assertEquals(cm.imports.size(), 4); Assert.assertEquals(Sets.intersection(cm.imports, Sets.newHashSet("Schema", "Map", "HashMap", "Children")).size(), 4); } - + @Test(description = "convert an map model") public void mapModelTestUsingOas2() { final Schema schema = new MapSchema() .description("an map model") .additionalProperties(new Schema().$ref("#/components/schemas/Children")); final DefaultCodegenConfig codegen = new JavaClientCodegen(); + codegen.preprocessOpenAPI(openAPI); codegen.setUseOas2(true); final CodegenModel cm = codegen.fromModel("sample", schema); @@ -408,7 +420,7 @@ public void mapModelTestUsingOas2() { Assert.assertEquals(cm.imports.size(), 4); Assert.assertEquals(Sets.intersection(cm.imports, Sets.newHashSet("ApiModel", "Map", "HashMap", "Children")).size(), 4); } - + @Test(description = "convert a model with upper-case property names") public void upperCaseNamesTest() { final Schema schema = new Schema() @@ -823,6 +835,7 @@ public void longPropertyInReferencedSchemaTest() { .addProperties("Long1", new Schema<>().$ref("#/components/schemas/LongProperty")) .addProperties("Long2", new IntegerSchema().format("int64")); final DefaultCodegenConfig codegen = new JavaClientCodegen(); + codegen.preprocessOpenAPI(openAPI); final Map allDefinitions = Collections.singletonMap("LongProperty", longProperty); final CodegenModel cm = codegen.fromModel("test", TestSchema, allDefinitions); @@ -851,6 +864,7 @@ public void integerPropertyInReferencedSchemaTest() { .addProperties("Integer2", new IntegerSchema().format("int32")); final Map allDefinitions = Collections.singletonMap("IntegerProperty", longProperty); final DefaultCodegenConfig codegen = new JavaClientCodegen(); + codegen.preprocessOpenAPI(openAPI); final CodegenModel cm = codegen.fromModel("test", testSchema, allDefinitions); Assert.assertEquals(cm.vars.size(), 2); @@ -877,6 +891,7 @@ public void arraySchemaTest() { .items(new Schema<>().$ref("#/components/schemas/Pet"))); final Map allDefinitions = Collections.singletonMap("Pet", new ObjectSchema()); final DefaultCodegenConfig codegen = new JavaClientCodegen(); + codegen.preprocessOpenAPI(openAPI); final CodegenModel cm = codegen.fromModel("test", testSchema, allDefinitions); Assert.assertEquals(cm.vars.size(), 1); @@ -897,13 +912,14 @@ public void arraySchemaTestInRequestBody() { .items(new Schema<>().$ref("#/components/schemas/Pet")); Operation operation = new Operation() .requestBody(new RequestBody() - .content(new Content().addMediaType("application/json", + .content(new Content().addMediaType("application/json", new MediaType().schema(testSchema)))) .responses( new ApiResponses().addApiResponse("204", new ApiResponse() .description("Ok response"))); final Map allDefinitions = Collections.singletonMap("Pet", new ObjectSchema()); final DefaultCodegenConfig codegen = new JavaClientCodegen(); + codegen.preprocessOpenAPI(openAPI); final CodegenOperation co = codegen.fromOperation("testSchema", "GET", operation, allDefinitions); Assert.assertEquals(co.bodyParams.size(), 1); @@ -926,10 +942,11 @@ public void arraySchemaTestInOperationResponse() { Operation operation = new Operation().responses( new ApiResponses().addApiResponse("200", new ApiResponse() .description("Ok response") - .content(new Content().addMediaType("application/json", + .content(new Content().addMediaType("application/json", new MediaType().schema(testSchema))))); final Map allDefinitions = Collections.singletonMap("Pet", new ObjectSchema()); final DefaultCodegenConfig codegen = new JavaClientCodegen(); + codegen.preprocessOpenAPI(openAPI); final CodegenOperation co = codegen.fromOperation("testSchema", "GET", operation, allDefinitions); Assert.assertEquals(co.responses.size(), 1); @@ -949,6 +966,7 @@ public void arrayOfArraySchemaTest() { .items(new Schema<>().$ref("#/components/schemas/Pet")))); final Map allDefinitions = Collections.singletonMap("Pet", new ObjectSchema()); final DefaultCodegenConfig codegen = new JavaClientCodegen(); + codegen.preprocessOpenAPI(openAPI); final CodegenModel cm = codegen.fromModel("test", testSchema, allDefinitions); Assert.assertEquals(cm.vars.size(), 1); @@ -970,13 +988,14 @@ public void arrayOfArraySchemaTestInRequestBody() { .items(new Schema<>().$ref("#/components/schemas/Pet"))); Operation operation = new Operation() .requestBody(new RequestBody() - .content(new Content().addMediaType("application/json", + .content(new Content().addMediaType("application/json", new MediaType().schema(testSchema)))) .responses( new ApiResponses().addApiResponse("204", new ApiResponse() .description("Ok response"))); final Map allDefinitions = Collections.singletonMap("Pet", new ObjectSchema()); final DefaultCodegenConfig codegen = new JavaClientCodegen(); + codegen.preprocessOpenAPI(openAPI); final CodegenOperation co = codegen.fromOperation("testSchema", "GET", operation, allDefinitions); Assert.assertEquals(co.bodyParams.size(), 1); @@ -1000,10 +1019,11 @@ public void arrayOfArraySchemaTestInOperationResponse() { Operation operation = new Operation().responses( new ApiResponses().addApiResponse("200", new ApiResponse() .description("Ok response") - .content(new Content().addMediaType("application/json", + .content(new Content().addMediaType("application/json", new MediaType().schema(testSchema))))); final Map allDefinitions = Collections.singletonMap("Pet", new ObjectSchema()); final DefaultCodegenConfig codegen = new JavaClientCodegen(); + codegen.preprocessOpenAPI(openAPI); final CodegenOperation co = codegen.fromOperation("testSchema", "GET", operation, allDefinitions); Assert.assertEquals(co.responses.size(), 1); diff --git a/src/test/java/io/swagger/codegen/v3/generators/kotlin/KotlinClientCodegenModelTest.java b/src/test/java/io/swagger/codegen/v3/generators/kotlin/KotlinClientCodegenModelTest.java index 822d3f907f..6bb12d4aab 100644 --- a/src/test/java/io/swagger/codegen/v3/generators/kotlin/KotlinClientCodegenModelTest.java +++ b/src/test/java/io/swagger/codegen/v3/generators/kotlin/KotlinClientCodegenModelTest.java @@ -4,6 +4,7 @@ import io.swagger.codegen.v3.CodegenConstants; import io.swagger.codegen.v3.CodegenModel; import io.swagger.codegen.v3.CodegenProperty; +import io.swagger.codegen.v3.generators.AbstractCodegenTest; import io.swagger.v3.oas.models.media.ArraySchema; import io.swagger.v3.oas.models.media.DateTimeSchema; import io.swagger.v3.oas.models.media.IntegerSchema; @@ -20,16 +21,16 @@ import static io.swagger.codegen.v3.generators.handlebars.ExtensionHelper.getBooleanValue; @SuppressWarnings("static-method") -public class KotlinClientCodegenModelTest { +public class KotlinClientCodegenModelTest extends AbstractCodegenTest { protected static final Logger LOGGER = LoggerFactory.getLogger(KotlinClientCodegenModelTest.class); - private Schema getArrayTestSchema() { + private Schema getArrayTestSchema() { final Schema propertySchema = new ArraySchema() .items(new StringSchema()) - .description("an array property"); + .description("an array property"); return new Schema() - .type("object") + .type("object") .description("a sample model") .addProperties("examples", propertySchema); } @@ -64,7 +65,7 @@ private Schema getComplexSchema() { } @Test(description = "convert a simple model") - public void simpleModelTest() { + public void simpleModelTest() { final Schema schema = getSimpleSchema(); final KotlinClientCodegen codegen = new KotlinClientCodegen(); final CodegenModel cm = codegen.fromModel("sample", schema); @@ -91,7 +92,7 @@ public void simpleModelTest() { Assert.assertEquals(property2.name, "firstName"); Assert.assertEquals(property2.defaultValue, "null"); Assert.assertEquals(property2.baseType, "kotlin.String"); - Assert.assertTrue(getBooleanValue(property2, CodegenConstants.HAS_MORE_EXT_NAME)); + Assert.assertTrue(getBooleanValue(property2, CodegenConstants.HAS_MORE_EXT_NAME)); Assert.assertTrue(property2.required); Assert.assertTrue(getBooleanValue(property2, CodegenConstants.IS_PRIMITIVE_TYPE_EXT_NAME)); Assert.assertTrue(getBooleanValue(property2, CodegenConstants.IS_NOT_CONTAINER_EXT_NAME)); @@ -102,9 +103,9 @@ public void simpleModelTest() { Assert.assertEquals(property3.name, "createdAt"); Assert.assertEquals(property3.defaultValue, "null"); Assert.assertEquals(property3.baseType, "java.time.LocalDateTime"); - Assert.assertFalse(getBooleanValue(property3, CodegenConstants.HAS_MORE_EXT_NAME)); + Assert.assertFalse(getBooleanValue(property3, CodegenConstants.HAS_MORE_EXT_NAME)); Assert.assertFalse(property3.required); - Assert.assertTrue(getBooleanValue(property3, CodegenConstants.IS_NOT_CONTAINER_EXT_NAME)); + Assert.assertTrue(getBooleanValue(property3, CodegenConstants.IS_NOT_CONTAINER_EXT_NAME)); } @Test(description = "convert a simple model: threetenbp") @@ -122,7 +123,7 @@ public void selectDateLibraryAsThreetenbp() { Assert.assertEquals(property3.name, "createdAt"); Assert.assertEquals(property3.defaultValue, "null"); Assert.assertEquals(property3.baseType, "org.threeten.bp.LocalDateTime"); - Assert.assertFalse(getBooleanValue(property3, CodegenConstants.HAS_MORE_EXT_NAME)); + Assert.assertFalse(getBooleanValue(property3, CodegenConstants.HAS_MORE_EXT_NAME)); Assert.assertFalse(property3.required); Assert.assertTrue(getBooleanValue(property3, CodegenConstants.IS_NOT_CONTAINER_EXT_NAME)); } @@ -142,7 +143,7 @@ public void selectDateLibraryAsString() { Assert.assertEquals(property3.name, "createdAt"); Assert.assertEquals(property3.defaultValue, "null"); Assert.assertEquals(property3.baseType, "kotlin.String"); - Assert.assertFalse(getBooleanValue(property3, CodegenConstants.HAS_MORE_EXT_NAME)); + Assert.assertFalse(getBooleanValue(property3, CodegenConstants.HAS_MORE_EXT_NAME)); Assert.assertFalse(property3.required); Assert.assertTrue(getBooleanValue(property3, CodegenConstants.IS_NOT_CONTAINER_EXT_NAME)); } @@ -162,7 +163,7 @@ public void selectDateLibraryAsJava8() { Assert.assertEquals(property3.name, "createdAt"); Assert.assertEquals(property3.defaultValue, "null"); Assert.assertEquals(property3.baseType, "java.time.LocalDateTime"); - Assert.assertFalse(getBooleanValue(property3, CodegenConstants.HAS_MORE_EXT_NAME)); + Assert.assertFalse(getBooleanValue(property3, CodegenConstants.HAS_MORE_EXT_NAME)); Assert.assertFalse(property3.required); Assert.assertTrue(getBooleanValue(property3, CodegenConstants.IS_NOT_CONTAINER_EXT_NAME)); } @@ -218,6 +219,7 @@ public void mapPropertyTest() { public void complexPropertyTest() { final Schema schema = getComplexSchema(); final CodegenConfig codegen = new KotlinClientCodegen(); + codegen.preprocessOpenAPI(openAPI); final CodegenModel cm = codegen.fromModel("sample", schema); Assert.assertEquals(cm.name, "sample"); @@ -249,6 +251,9 @@ public static Object[][] modelNames() { public void sanitizeModelNames(final String name, final ModelNameTest testCase) { final Schema schema = getComplexSchema(); final CodegenConfig codegen = new KotlinClientCodegen(); + + codegen.preprocessOpenAPI(openAPI); + final CodegenModel cm = codegen.fromModel(name, schema); Assert.assertEquals(cm.name, testCase.expectedName); diff --git a/src/test/java/io/swagger/codegen/v3/generators/typescript/angular/TypeScriptAngularModelTest.java b/src/test/java/io/swagger/codegen/v3/generators/typescript/angular/TypeScriptAngularModelTest.java index 589d9f840f..72ca4cdd9c 100644 --- a/src/test/java/io/swagger/codegen/v3/generators/typescript/angular/TypeScriptAngularModelTest.java +++ b/src/test/java/io/swagger/codegen/v3/generators/typescript/angular/TypeScriptAngularModelTest.java @@ -4,6 +4,7 @@ import io.swagger.codegen.v3.CodegenConstants; import io.swagger.codegen.v3.CodegenModel; import io.swagger.codegen.v3.CodegenProperty; +import io.swagger.codegen.v3.generators.AbstractCodegenTest; import io.swagger.codegen.v3.generators.DefaultCodegenConfig; import io.swagger.codegen.v3.generators.typescript.TypeScriptAngularClientCodegen; import io.swagger.v3.oas.models.media.ArraySchema; @@ -20,7 +21,7 @@ import static io.swagger.codegen.v3.generators.handlebars.ExtensionHelper.getBooleanValue; @SuppressWarnings("static-method") -public class TypeScriptAngularModelTest { +public class TypeScriptAngularModelTest extends AbstractCodegenTest { @Test(description = "convert a simple TypeScript Angular model") public void simpleModelTest() { @@ -125,6 +126,7 @@ public void complexPropertyTest() { .description("a sample model") .addProperties("children", new Schema().$ref("#/components/schemas/Children")); final DefaultCodegenConfig codegen = new TypeScriptAngularClientCodegen(); + codegen.preprocessOpenAPI(openAPI); final CodegenModel cm = codegen.fromModel("sample", model); Assert.assertEquals(cm.name, "sample"); @@ -149,6 +151,7 @@ public void complexListPropertyTest() { .addProperties("children", new ArraySchema() .items(new Schema().$ref("#/components/schemas/Children"))); final DefaultCodegenConfig codegen = new TypeScriptAngularClientCodegen(); + codegen.preprocessOpenAPI(openAPI); final CodegenModel cm = codegen.fromModel("sample", model); Assert.assertEquals(cm.name, "sample"); @@ -172,6 +175,8 @@ public void arrayModelTest() { .items(new Schema().$ref("#/components/schemas/Children")) .description("an array model"); final DefaultCodegenConfig codegen = new TypeScriptAngularClientCodegen(); + codegen.preprocessOpenAPI(openAPI); + final CodegenModel cm = codegen.fromModel("sample", model); Assert.assertEquals(cm.name, "sample"); @@ -186,6 +191,7 @@ public void mapModelTest() { .description("a map model") .additionalProperties(new Schema().$ref("#/components/schemas/Children")); final DefaultCodegenConfig codegen = new TypeScriptAngularClientCodegen(); + codegen.preprocessOpenAPI(openAPI); final CodegenModel cm = codegen.fromModel("sample", model); Assert.assertEquals(cm.name, "sample"); From 675347d5b944a839a2841f935020718f98c08709 Mon Sep 17 00:00:00 2001 From: HugoMario Date: Mon, 13 Jan 2020 09:02:48 -0500 Subject: [PATCH 5/6] removed print --- .../swagger/codegen/v3/generators/java/AbstractJavaCodegen.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/io/swagger/codegen/v3/generators/java/AbstractJavaCodegen.java b/src/main/java/io/swagger/codegen/v3/generators/java/AbstractJavaCodegen.java index 196102373d..10f1364ff5 100644 --- a/src/main/java/io/swagger/codegen/v3/generators/java/AbstractJavaCodegen.java +++ b/src/main/java/io/swagger/codegen/v3/generators/java/AbstractJavaCodegen.java @@ -600,7 +600,6 @@ public String toParamName(String name) { public String toModelName(final String name) { // We need to check if import-mapping has a different model for this class, so we use it // instead of the auto-generated one. - System.out.println("getIgnoreImportMapping() => " + getIgnoreImportMapping()); if (!getIgnoreImportMapping() && importMapping.containsKey(name)) { return importMapping.get(name); From 0c1fd259c541573d9d49782765f1d88c2640abf9 Mon Sep 17 00:00:00 2001 From: HugoMario Date: Mon, 13 Jan 2020 11:47:02 -0500 Subject: [PATCH 6/6] stop using mockito for testing --- .../v3/generators/DefaultCodegenConfig.java | 8 +++- .../v3/generators/AbstractCodegenTest.java | 28 +++++-------- .../java/JavaCXFClientCodegenTest.java | 22 ++-------- .../v3/generators/java/JavaModelTest.java | 40 ++++++++++--------- .../kotlin/KotlinClientCodegenModelTest.java | 11 +++-- .../angular/TypeScriptAngularModelTest.java | 12 +++--- .../resources/3_0_0/model_named_file.yaml | 2 +- .../3_0_0/response_without_content.yaml | 33 +++++++++++++++ 8 files changed, 90 insertions(+), 66 deletions(-) create mode 100644 src/test/resources/3_0_0/response_without_content.yaml diff --git a/src/main/java/io/swagger/codegen/v3/generators/DefaultCodegenConfig.java b/src/main/java/io/swagger/codegen/v3/generators/DefaultCodegenConfig.java index c023154418..34c3a5ea03 100644 --- a/src/main/java/io/swagger/codegen/v3/generators/DefaultCodegenConfig.java +++ b/src/main/java/io/swagger/codegen/v3/generators/DefaultCodegenConfig.java @@ -3161,6 +3161,9 @@ private void addVars(CodegenModel codegenModel, List vars, Map< List modelProperties = vars.stream() .filter(codegenProperty -> getBooleanValue(codegenProperty, "x-is-object") && importMapping.containsKey(codegenProperty.baseType)) .collect(Collectors.toList()); + if (modelProperties == null || modelProperties.isEmpty()) { + return; + } for (CodegenProperty modelProperty : modelProperties) { List codegenProperties = vars.stream() @@ -4176,7 +4179,10 @@ else if (Parameter.StyleEnum.SPACEDELIMITED.equals(parameter.getStyle())) { } public boolean isObjectSchema (Schema schema) { - if (schema instanceof ObjectSchema ||schema instanceof ComposedSchema) { + if (schema == null) { + return false; + } + if (schema instanceof ObjectSchema || schema instanceof ComposedSchema) { return true; } if (SchemaTypeUtil.OBJECT_TYPE.equalsIgnoreCase(schema.getType()) && !(schema instanceof MapSchema)) { diff --git a/src/test/java/io/swagger/codegen/v3/generators/AbstractCodegenTest.java b/src/test/java/io/swagger/codegen/v3/generators/AbstractCodegenTest.java index 399914b9aa..7d52230a59 100644 --- a/src/test/java/io/swagger/codegen/v3/generators/AbstractCodegenTest.java +++ b/src/test/java/io/swagger/codegen/v3/generators/AbstractCodegenTest.java @@ -1,27 +1,19 @@ package io.swagger.codegen.v3.generators; -import io.swagger.v3.oas.models.Components; import io.swagger.v3.oas.models.OpenAPI; -import io.swagger.v3.oas.models.media.Schema; -import org.mockito.Mockito; -import org.testng.annotations.BeforeTest; - -import java.util.HashMap; -import java.util.Map; +import io.swagger.v3.parser.OpenAPIV3Parser; +import io.swagger.v3.parser.core.models.ParseOptions; +import io.swagger.v3.parser.core.models.SwaggerParseResult; public abstract class AbstractCodegenTest { - protected OpenAPI openAPI; - protected Schema schema; - - @BeforeTest - public void setUp() { - this.openAPI = Mockito.mock(OpenAPI.class); - final Components components = Mockito.mock(Components.class); - final Map schemas = Mockito.mock(HashMap.class); - this.schema = Mockito.mock(Schema.class); + protected OpenAPI getOpenAPI(String filePath) { + OpenAPIV3Parser openApiParser = new OpenAPIV3Parser(); + ParseOptions options = new ParseOptions(); + options.setResolve(true); + options.setFlatten(true); + SwaggerParseResult parseResult = openApiParser.readLocation(filePath, null, options); - Mockito.when(openAPI.getComponents()).thenReturn(components); - Mockito.when(components.getSchemas()).thenReturn(schemas); + return parseResult.getOpenAPI(); } } diff --git a/src/test/java/io/swagger/codegen/v3/generators/java/JavaCXFClientCodegenTest.java b/src/test/java/io/swagger/codegen/v3/generators/java/JavaCXFClientCodegenTest.java index 0e46499930..31b9f8f61c 100644 --- a/src/test/java/io/swagger/codegen/v3/generators/java/JavaCXFClientCodegenTest.java +++ b/src/test/java/io/swagger/codegen/v3/generators/java/JavaCXFClientCodegenTest.java @@ -3,14 +3,8 @@ import io.swagger.codegen.v3.CodegenOperation; import io.swagger.codegen.v3.CodegenResponse; import io.swagger.codegen.v3.generators.AbstractCodegenTest; +import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.Operation; -import io.swagger.v3.oas.models.media.ArraySchema; -import io.swagger.v3.oas.models.media.Content; -import io.swagger.v3.oas.models.media.MediaType; -import io.swagger.v3.oas.models.media.ObjectSchema; -import io.swagger.v3.oas.models.media.Schema; -import io.swagger.v3.oas.models.responses.ApiResponse; -import io.swagger.v3.oas.models.responses.ApiResponses; import org.testng.Assert; import org.testng.annotations.Test; @@ -22,20 +16,12 @@ public class JavaCXFClientCodegenTest extends AbstractCodegenTest { @Test public void responseWithoutContent() throws Exception { - final Schema listOfPets = new ArraySchema() - .items(new Schema<>().$ref("#/components/schemas/Pet")); - Operation operation = new Operation().responses(new ApiResponses() - .addApiResponse("200", new ApiResponse() - .description("Return a list of pets") - .content(new Content().addMediaType("application/json", - new MediaType().schema(listOfPets)))) - .addApiResponse("400", new ApiResponse() - .description("Error"))); - final Map allDefinitions = Collections.singletonMap("Pet", new ObjectSchema()); + final OpenAPI openAPI = getOpenAPI("3_0_0/response_without_content.yaml"); + final Operation operation = openAPI.getPaths().get("/pets").getGet(); final JavaCXFClientCodegen codegen = new JavaCXFClientCodegen(); codegen.preprocessOpenAPI(openAPI); - final CodegenOperation co = codegen.fromOperation("getAllPets", "GET", operation, allDefinitions); + final CodegenOperation co = codegen.fromOperation("getAllPets", "GET", operation, openAPI.getComponents().getSchemas(), openAPI); Map objs = new HashMap<>(); objs.put("operations", Collections.singletonMap("operation", Collections.singletonList(co))); diff --git a/src/test/java/io/swagger/codegen/v3/generators/java/JavaModelTest.java b/src/test/java/io/swagger/codegen/v3/generators/java/JavaModelTest.java index 2ddadec718..77d9aeea27 100644 --- a/src/test/java/io/swagger/codegen/v3/generators/java/JavaModelTest.java +++ b/src/test/java/io/swagger/codegen/v3/generators/java/JavaModelTest.java @@ -12,6 +12,8 @@ import io.swagger.codegen.v3.config.CodegenConfigurator; import io.swagger.codegen.v3.generators.AbstractCodegenTest; import io.swagger.codegen.v3.generators.DefaultCodegenConfig; +import io.swagger.v3.oas.models.Components; +import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.Operation; import io.swagger.v3.oas.models.media.ArraySchema; import io.swagger.v3.oas.models.media.BooleanSchema; @@ -58,7 +60,7 @@ public void simpleModelTest() { .addRequiredItem("id") .addRequiredItem("name"); final DefaultCodegenConfig codegen = new JavaClientCodegen(); - codegen.preprocessOpenAPI(openAPI); + codegen.preprocessOpenAPI(new OpenAPI().components(new Components())); final CodegenModel cm = codegen.fromModel("sample", model); Assert.assertEquals(cm.name, "sample"); @@ -171,7 +173,7 @@ public void mapWithListPropertyTest() { .additionalProperties(new ArraySchema().items(new Schema().$ref("Pet")))) .addRequiredItem("id"); final DefaultCodegenConfig codegen = new JavaClientCodegen(); - codegen.preprocessOpenAPI(openAPI); + codegen.preprocessOpenAPI(new OpenAPI().components(new Components())); final CodegenModel cm = codegen.fromModel("sample", schema); Assert.assertEquals(cm.name, "sample"); @@ -199,7 +201,7 @@ public void list2DPropertyTest() { .addProperties("list2D", new ArraySchema().items( new ArraySchema().items(new Schema().$ref("Pet")))); final DefaultCodegenConfig codegen = new JavaClientCodegen(); - codegen.preprocessOpenAPI(openAPI); + codegen.preprocessOpenAPI(new OpenAPI().components(new Components())); final CodegenModel cm = codegen.fromModel("sample", model); Assert.assertEquals(cm.vars.size(), 1); @@ -223,7 +225,7 @@ public void complexPropertiesTest() { .description("a sample model") .addProperties("children", new Schema().$ref("#/components/schemas/Children")); final DefaultCodegenConfig codegen = new JavaClientCodegen(); - codegen.preprocessOpenAPI(openAPI); + codegen.preprocessOpenAPI(new OpenAPI().components(new Components())); final CodegenModel cm = codegen.fromModel("sample", schema); Assert.assertEquals(cm.name, "sample"); @@ -250,7 +252,7 @@ public void complexListPropertyTest() { .addProperties("children", new ArraySchema() .items(new Schema().$ref("#/components/schemas/Children"))); final DefaultCodegenConfig codegen = new JavaClientCodegen(); - codegen.preprocessOpenAPI(openAPI); + codegen.preprocessOpenAPI(new OpenAPI().components(new Components())); final CodegenModel cm = codegen.fromModel("sample", schema); Assert.assertEquals(cm.name, "sample"); @@ -279,7 +281,7 @@ public void complexMapPropertyTest() { .addProperties("children", new MapSchema() .additionalProperties(new Schema().$ref("#/components/schemas/Children"))); final DefaultCodegenConfig codegen = new JavaClientCodegen(); - codegen.preprocessOpenAPI(openAPI); + codegen.preprocessOpenAPI(new OpenAPI().components(new Components())); final CodegenModel cm = codegen.fromModel("sample", schema); Assert.assertEquals(cm.name, "sample"); @@ -317,7 +319,7 @@ public void arrayModelWithItemNameTest() { final DefaultCodegenConfig codegen = new JavaClientCodegen(); - codegen.preprocessOpenAPI(openAPI); + codegen.preprocessOpenAPI(new OpenAPI().components(new Components())); final CodegenModel cm = codegen.fromModel("sample", schema); Assert.assertEquals(cm.name, "sample"); @@ -352,7 +354,7 @@ public void arrayModelTest() { .name("arraySchema") .description("an array model"); final DefaultCodegenConfig codegen = new JavaClientCodegen(); - codegen.preprocessOpenAPI(openAPI); + codegen.preprocessOpenAPI(new OpenAPI().components(new Components())); final CodegenModel cm = codegen.fromModel("sample", schema); Assert.assertEquals(cm.name, "sample"); @@ -371,7 +373,7 @@ public void arrayModelTestUsingOas2() { .name("arraySchema") .description("an array model"); final DefaultCodegenConfig codegen = new JavaClientCodegen(); - codegen.preprocessOpenAPI(openAPI); + codegen.preprocessOpenAPI(new OpenAPI().components(new Components())); codegen.setUseOas2(true); final CodegenModel cm = codegen.fromModel("sample", schema); @@ -390,7 +392,7 @@ public void mapModelTest() { .description("an map model") .additionalProperties(new Schema().$ref("#/components/schemas/Children")); final DefaultCodegenConfig codegen = new JavaClientCodegen(); - codegen.preprocessOpenAPI(openAPI); + codegen.preprocessOpenAPI(new OpenAPI().components(new Components())); final CodegenModel cm = codegen.fromModel("sample", schema); Assert.assertEquals(cm.name, "sample"); @@ -408,7 +410,7 @@ public void mapModelTestUsingOas2() { .description("an map model") .additionalProperties(new Schema().$ref("#/components/schemas/Children")); final DefaultCodegenConfig codegen = new JavaClientCodegen(); - codegen.preprocessOpenAPI(openAPI); + codegen.preprocessOpenAPI(new OpenAPI().components(new Components())); codegen.setUseOas2(true); final CodegenModel cm = codegen.fromModel("sample", schema); @@ -835,7 +837,7 @@ public void longPropertyInReferencedSchemaTest() { .addProperties("Long1", new Schema<>().$ref("#/components/schemas/LongProperty")) .addProperties("Long2", new IntegerSchema().format("int64")); final DefaultCodegenConfig codegen = new JavaClientCodegen(); - codegen.preprocessOpenAPI(openAPI); + codegen.preprocessOpenAPI(new OpenAPI().components(new Components())); final Map allDefinitions = Collections.singletonMap("LongProperty", longProperty); final CodegenModel cm = codegen.fromModel("test", TestSchema, allDefinitions); @@ -864,7 +866,7 @@ public void integerPropertyInReferencedSchemaTest() { .addProperties("Integer2", new IntegerSchema().format("int32")); final Map allDefinitions = Collections.singletonMap("IntegerProperty", longProperty); final DefaultCodegenConfig codegen = new JavaClientCodegen(); - codegen.preprocessOpenAPI(openAPI); + codegen.preprocessOpenAPI(new OpenAPI().components(new Components())); final CodegenModel cm = codegen.fromModel("test", testSchema, allDefinitions); Assert.assertEquals(cm.vars.size(), 2); @@ -891,7 +893,7 @@ public void arraySchemaTest() { .items(new Schema<>().$ref("#/components/schemas/Pet"))); final Map allDefinitions = Collections.singletonMap("Pet", new ObjectSchema()); final DefaultCodegenConfig codegen = new JavaClientCodegen(); - codegen.preprocessOpenAPI(openAPI); + codegen.preprocessOpenAPI(new OpenAPI().components(new Components())); final CodegenModel cm = codegen.fromModel("test", testSchema, allDefinitions); Assert.assertEquals(cm.vars.size(), 1); @@ -919,7 +921,7 @@ public void arraySchemaTestInRequestBody() { .description("Ok response"))); final Map allDefinitions = Collections.singletonMap("Pet", new ObjectSchema()); final DefaultCodegenConfig codegen = new JavaClientCodegen(); - codegen.preprocessOpenAPI(openAPI); + codegen.preprocessOpenAPI(new OpenAPI().components(new Components())); final CodegenOperation co = codegen.fromOperation("testSchema", "GET", operation, allDefinitions); Assert.assertEquals(co.bodyParams.size(), 1); @@ -946,7 +948,7 @@ public void arraySchemaTestInOperationResponse() { new MediaType().schema(testSchema))))); final Map allDefinitions = Collections.singletonMap("Pet", new ObjectSchema()); final DefaultCodegenConfig codegen = new JavaClientCodegen(); - codegen.preprocessOpenAPI(openAPI); + codegen.preprocessOpenAPI(new OpenAPI().components(new Components())); final CodegenOperation co = codegen.fromOperation("testSchema", "GET", operation, allDefinitions); Assert.assertEquals(co.responses.size(), 1); @@ -966,7 +968,7 @@ public void arrayOfArraySchemaTest() { .items(new Schema<>().$ref("#/components/schemas/Pet")))); final Map allDefinitions = Collections.singletonMap("Pet", new ObjectSchema()); final DefaultCodegenConfig codegen = new JavaClientCodegen(); - codegen.preprocessOpenAPI(openAPI); + codegen.preprocessOpenAPI(new OpenAPI().components(new Components())); final CodegenModel cm = codegen.fromModel("test", testSchema, allDefinitions); Assert.assertEquals(cm.vars.size(), 1); @@ -995,7 +997,7 @@ public void arrayOfArraySchemaTestInRequestBody() { .description("Ok response"))); final Map allDefinitions = Collections.singletonMap("Pet", new ObjectSchema()); final DefaultCodegenConfig codegen = new JavaClientCodegen(); - codegen.preprocessOpenAPI(openAPI); + codegen.preprocessOpenAPI(new OpenAPI().components(new Components())); final CodegenOperation co = codegen.fromOperation("testSchema", "GET", operation, allDefinitions); Assert.assertEquals(co.bodyParams.size(), 1); @@ -1023,7 +1025,7 @@ public void arrayOfArraySchemaTestInOperationResponse() { new MediaType().schema(testSchema))))); final Map allDefinitions = Collections.singletonMap("Pet", new ObjectSchema()); final DefaultCodegenConfig codegen = new JavaClientCodegen(); - codegen.preprocessOpenAPI(openAPI); + codegen.preprocessOpenAPI(new OpenAPI().components(new Components())); final CodegenOperation co = codegen.fromOperation("testSchema", "GET", operation, allDefinitions); Assert.assertEquals(co.responses.size(), 1); diff --git a/src/test/java/io/swagger/codegen/v3/generators/kotlin/KotlinClientCodegenModelTest.java b/src/test/java/io/swagger/codegen/v3/generators/kotlin/KotlinClientCodegenModelTest.java index 6bb12d4aab..6e01e2402b 100644 --- a/src/test/java/io/swagger/codegen/v3/generators/kotlin/KotlinClientCodegenModelTest.java +++ b/src/test/java/io/swagger/codegen/v3/generators/kotlin/KotlinClientCodegenModelTest.java @@ -5,6 +5,8 @@ import io.swagger.codegen.v3.CodegenModel; import io.swagger.codegen.v3.CodegenProperty; import io.swagger.codegen.v3.generators.AbstractCodegenTest; +import io.swagger.v3.oas.models.Components; +import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.media.ArraySchema; import io.swagger.v3.oas.models.media.DateTimeSchema; import io.swagger.v3.oas.models.media.IntegerSchema; @@ -18,10 +20,12 @@ import org.testng.annotations.DataProvider; import org.testng.annotations.Test; +import java.util.HashMap; + import static io.swagger.codegen.v3.generators.handlebars.ExtensionHelper.getBooleanValue; @SuppressWarnings("static-method") -public class KotlinClientCodegenModelTest extends AbstractCodegenTest { +public class KotlinClientCodegenModelTest { protected static final Logger LOGGER = LoggerFactory.getLogger(KotlinClientCodegenModelTest.class); @@ -219,7 +223,7 @@ public void mapPropertyTest() { public void complexPropertyTest() { final Schema schema = getComplexSchema(); final CodegenConfig codegen = new KotlinClientCodegen(); - codegen.preprocessOpenAPI(openAPI); + codegen.preprocessOpenAPI(new OpenAPI().components(new Components())); final CodegenModel cm = codegen.fromModel("sample", schema); Assert.assertEquals(cm.name, "sample"); @@ -251,8 +255,7 @@ public static Object[][] modelNames() { public void sanitizeModelNames(final String name, final ModelNameTest testCase) { final Schema schema = getComplexSchema(); final CodegenConfig codegen = new KotlinClientCodegen(); - - codegen.preprocessOpenAPI(openAPI); + codegen.preprocessOpenAPI(new OpenAPI().components(new Components())); final CodegenModel cm = codegen.fromModel(name, schema); diff --git a/src/test/java/io/swagger/codegen/v3/generators/typescript/angular/TypeScriptAngularModelTest.java b/src/test/java/io/swagger/codegen/v3/generators/typescript/angular/TypeScriptAngularModelTest.java index 72ca4cdd9c..57424fb3dd 100644 --- a/src/test/java/io/swagger/codegen/v3/generators/typescript/angular/TypeScriptAngularModelTest.java +++ b/src/test/java/io/swagger/codegen/v3/generators/typescript/angular/TypeScriptAngularModelTest.java @@ -7,6 +7,8 @@ import io.swagger.codegen.v3.generators.AbstractCodegenTest; import io.swagger.codegen.v3.generators.DefaultCodegenConfig; import io.swagger.codegen.v3.generators.typescript.TypeScriptAngularClientCodegen; +import io.swagger.v3.oas.models.Components; +import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.media.ArraySchema; import io.swagger.v3.oas.models.media.DateSchema; import io.swagger.v3.oas.models.media.DateTimeSchema; @@ -21,7 +23,7 @@ import static io.swagger.codegen.v3.generators.handlebars.ExtensionHelper.getBooleanValue; @SuppressWarnings("static-method") -public class TypeScriptAngularModelTest extends AbstractCodegenTest { +public class TypeScriptAngularModelTest /**extends AbstractCodegenTest*/ { @Test(description = "convert a simple TypeScript Angular model") public void simpleModelTest() { @@ -126,7 +128,7 @@ public void complexPropertyTest() { .description("a sample model") .addProperties("children", new Schema().$ref("#/components/schemas/Children")); final DefaultCodegenConfig codegen = new TypeScriptAngularClientCodegen(); - codegen.preprocessOpenAPI(openAPI); + codegen.preprocessOpenAPI(new OpenAPI().components(new Components())); final CodegenModel cm = codegen.fromModel("sample", model); Assert.assertEquals(cm.name, "sample"); @@ -151,7 +153,7 @@ public void complexListPropertyTest() { .addProperties("children", new ArraySchema() .items(new Schema().$ref("#/components/schemas/Children"))); final DefaultCodegenConfig codegen = new TypeScriptAngularClientCodegen(); - codegen.preprocessOpenAPI(openAPI); + codegen.preprocessOpenAPI(new OpenAPI().components(new Components())); final CodegenModel cm = codegen.fromModel("sample", model); Assert.assertEquals(cm.name, "sample"); @@ -175,7 +177,7 @@ public void arrayModelTest() { .items(new Schema().$ref("#/components/schemas/Children")) .description("an array model"); final DefaultCodegenConfig codegen = new TypeScriptAngularClientCodegen(); - codegen.preprocessOpenAPI(openAPI); + codegen.preprocessOpenAPI(new OpenAPI().components(new Components())); final CodegenModel cm = codegen.fromModel("sample", model); @@ -191,7 +193,7 @@ public void mapModelTest() { .description("a map model") .additionalProperties(new Schema().$ref("#/components/schemas/Children")); final DefaultCodegenConfig codegen = new TypeScriptAngularClientCodegen(); - codegen.preprocessOpenAPI(openAPI); + codegen.preprocessOpenAPI(new OpenAPI().components(new Components())); final CodegenModel cm = codegen.fromModel("sample", model); Assert.assertEquals(cm.name, "sample"); diff --git a/src/test/resources/3_0_0/model_named_file.yaml b/src/test/resources/3_0_0/model_named_file.yaml index 274d7274e7..de35d6d78f 100644 --- a/src/test/resources/3_0_0/model_named_file.yaml +++ b/src/test/resources/3_0_0/model_named_file.yaml @@ -1,6 +1,6 @@ openapi: 3.0.0 servers: - - description: SwaggerHub API Auto Mocking + - description: test definition url: / info: description: This is a simple API diff --git a/src/test/resources/3_0_0/response_without_content.yaml b/src/test/resources/3_0_0/response_without_content.yaml new file mode 100644 index 0000000000..fe79c5890a --- /dev/null +++ b/src/test/resources/3_0_0/response_without_content.yaml @@ -0,0 +1,33 @@ +openapi: 3.0.0 +servers: + - description: test definition + url: / +info: + description: This is a simple API + version: "1.0.0" + title: Simple API + +paths: + /pets: + get: + tags: + - Pet + summary: get all pets + operationId: getAllPets + description: get all existing pets + responses: + 200: + description: 'Return a list of pets' + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Pet' + 400: + description: 'Error' + +components: + schemas: + Pet: + type: 'object' \ No newline at end of file