From 66e088e757404b407f6eb06ce6a611b21ceeb740 Mon Sep 17 00:00:00 2001 From: Philzen Date: Fri, 3 May 2024 21:04:23 +0200 Subject: [PATCH 01/15] Mention that Golang generator also supports XML annotations Looking at src/main/resources/go/model_simple.mustache and src/main/java/org/openapitools/codegen/languages/GoClientCodegen.java the GoLang seems to cater for withXml=true --- modules/openapi-generator-maven-plugin/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/openapi-generator-maven-plugin/README.md b/modules/openapi-generator-maven-plugin/README.md index cc8500ceb95c..a185ac8b8d6f 100644 --- a/modules/openapi-generator-maven-plugin/README.md +++ b/modules/openapi-generator-maven-plugin/README.md @@ -107,7 +107,7 @@ mvn clean compile | `generateModelDocumentation` | `openapi.generator.maven.plugin.generateModelDocumentation` | generate the model documentation (`true` by default. Only available if `generateModels` is `true`) | `generateApiTests` | `openapi.generator.maven.plugin.generateApiTests` | generate the api tests (`true` by default. Only available if `generateApis` is `true`) | `generateApiDocumentation` | `openapi.generator.maven.plugin.generateApiDocumentation` | generate the api documentation (`true` by default. Only available if `generateApis` is `true`) -| `withXml` | `openapi.generator.maven.plugin.withXml` | enable XML annotations inside the generated models and API (only works with Java `language` and libraries that provide support for JSON and XML) +| `withXml` | `openapi.generator.maven.plugin.withXml` | Enable XML annotations for generated models and API (currently only works with Go and Java `language` using `library` templates that implement support for XML) | `skip` | `codegen.skip` | skip code generation (`false` by default. Can also be set globally through the `codegen.skip` property) | `skipIfSpecIsUnchanged` | `codegen.skipIfSpecIsUnchanged` | Skip the execution if the source file is older than the output folder (`false` by default. Can also be set globally through the `codegen.skipIfSpecIsUnchanged` property) | `addCompileSourceRoot` | `openapi.generator.maven.plugin.addCompileSourceRoot` | Add the output directory to the project as a source root, so that the generated java types are compiled and included in the project artifact (`true` by default). Mutually exclusive with `addTestCompileSourceRoot`. From 3a50eb21d163892c395e3bfc91d2fc7ad29cfddd Mon Sep 17 00:00:00 2001 From: Philzen Date: Fri, 3 May 2024 21:21:40 +0200 Subject: [PATCH 02/15] Fix maven plugin config description for `withXml` --- .../main/java/org/openapitools/codegen/plugin/CodeGenMojo.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/openapi-generator-maven-plugin/src/main/java/org/openapitools/codegen/plugin/CodeGenMojo.java b/modules/openapi-generator-maven-plugin/src/main/java/org/openapitools/codegen/plugin/CodeGenMojo.java index fc9eab015103..c9f3a65c4f90 100644 --- a/modules/openapi-generator-maven-plugin/src/main/java/org/openapitools/codegen/plugin/CodeGenMojo.java +++ b/modules/openapi-generator-maven-plugin/src/main/java/org/openapitools/codegen/plugin/CodeGenMojo.java @@ -497,7 +497,7 @@ public class CodeGenMojo extends AbstractMojo { private Boolean generateApiDocumentation = true; /** - * Generate the api documentation + * Generate XML annotations on models and API (only some generators implement it) */ @Parameter(name = "withXml", property = "openapi.generator.maven.plugin.withXml") private Boolean withXml = false; From 70e154d23fbd6eec33014fcb7eb5f6bb83b027c1 Mon Sep 17 00:00:00 2001 From: Philzen Date: Fri, 3 May 2024 23:02:03 +0200 Subject: [PATCH 03/15] Add basic test for global withXml setting --- .../java/spring/SpringCodegenTest.java | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/spring/SpringCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/spring/SpringCodegenTest.java index 4d5d68090cb3..eea5f8f5bc9e 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/spring/SpringCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/spring/SpringCodegenTest.java @@ -2810,6 +2810,34 @@ private Map generateFromContract(String url, String library, Map files = generator + .opts( + new ClientOptInput() + .openAPI( + new OpenAPIParser() + .readLocation("src/test/resources/3_0/spring/issue_10278.yaml", null, null) + .getOpenAPI() + ).config(codegen) + ) + .generate() + .stream().collect(Collectors.toMap(File::getName, Function.identity())); + + JavaFileAssert.assertThat(files.get("Category.java")).fileContains("@JacksonXmlProperty"); + } @Test public void testMappingSubtypesIssue13150() throws IOException { From da85a23e033d961be5346cb87cf5ddc711f476a0 Mon Sep 17 00:00:00 2001 From: Philzen Date: Fri, 3 May 2024 23:45:46 +0200 Subject: [PATCH 04/15] Use global withXml setting if not configured in ConfigOptions Resolves #3839 and #5764 --- .../java/org/openapitools/codegen/DefaultGenerator.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultGenerator.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultGenerator.java index 8337b77be4d0..4967fa84f299 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultGenerator.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultGenerator.java @@ -237,6 +237,13 @@ void configureGeneratorProperties() { generateApiDocumentation = GlobalSettings.getProperty(CodegenConstants.API_DOCS) != null ? Boolean.valueOf(GlobalSettings.getProperty(CodegenConstants.API_DOCS)) : getGeneratorPropertyDefaultSwitch(CodegenConstants.API_DOCS, true); generateRecursiveDependentModels = GlobalSettings.getProperty(CodegenConstants.GENERATE_RECURSIVE_DEPENDENT_MODELS) != null ? Boolean.valueOf(GlobalSettings.getProperty(CodegenConstants.GENERATE_RECURSIVE_DEPENDENT_MODELS)) : getGeneratorPropertyDefaultSwitch(CodegenConstants.GENERATE_RECURSIVE_DEPENDENT_MODELS, false); + final Boolean globalWithXml = GlobalSettings.getProperty(CodegenConstants.WITH_XML) != null + ? Boolean.valueOf(GlobalSettings.getProperty(CodegenConstants.WITH_XML)) + : getGeneratorPropertyDefaultSwitch(CodegenConstants.WITH_XML, null); + if (!config.additionalProperties().containsKey(CodegenConstants.WITH_XML) && globalWithXml != null) { + config.additionalProperties().put(CodegenConstants.WITH_XML, globalWithXml); + } + // Additional properties added for tests to exclude references in project related files config.additionalProperties().put(CodegenConstants.GENERATE_API_TESTS, generateApiTests); config.additionalProperties().put(CodegenConstants.GENERATE_MODEL_TESTS, generateModelTests); From 70d1b0adc788f5a9c5e9083d87d4174c7fc62f99 Mon Sep 17 00:00:00 2001 From: Philzen Date: Sat, 4 May 2024 00:53:58 +0200 Subject: [PATCH 05/15] Don't generate metadata or other files when only Models are tested --- .../java/spring/SpringCodegenTest.java | 315 ++++++++++-------- 1 file changed, 175 insertions(+), 140 deletions(-) diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/spring/SpringCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/spring/SpringCodegenTest.java index eea5f8f5bc9e..555dd49b585b 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/spring/SpringCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/spring/SpringCodegenTest.java @@ -129,7 +129,7 @@ public void doAnnotateDatesOnModelParameters() throws IOException { generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_TESTS, "false"); generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_DOCS, "false"); generator.setGeneratorPropertyDefault(CodegenConstants.APIS, "true"); - generator.setGeneratorPropertyDefault(CodegenConstants.SUPPORTING_FILES, "false"); + generator.setGenerateMetadata(false); generator.opts(input).generate(); JavaFileAssert.assertThat(Paths.get(outputPath + "/src/main/java/org/openapitools/api/ZebrasApi.java")) @@ -207,7 +207,7 @@ public void doAnnotateDatesOnModelParametersWithOptionalAndJsonNullable() throws generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_TESTS, "false"); generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_DOCS, "false"); generator.setGeneratorPropertyDefault(CodegenConstants.APIS, "true"); - generator.setGeneratorPropertyDefault(CodegenConstants.SUPPORTING_FILES, "false"); + generator.setGenerateMetadata(false); generator.opts(input).generate(); JavaFileAssert.assertThat(Paths.get(outputPath + "/src/main/java/org/openapitools/api/ZebrasApi.java")) @@ -279,11 +279,10 @@ public void doGenerateCookieParams() throws IOException { DefaultGenerator generator = new DefaultGenerator(); - generator.setGeneratorPropertyDefault(CodegenConstants.MODELS, "false"); generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_TESTS, "false"); generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_DOCS, "false"); generator.setGeneratorPropertyDefault(CodegenConstants.APIS, "true"); - generator.setGeneratorPropertyDefault(CodegenConstants.SUPPORTING_FILES, "false"); + generator.setGenerateMetadata(false); generator.opts(input).generate(); JavaFileAssert.assertThat(Paths.get(outputPath + "/src/main/java/org/openapitools/api/ElephantsApi.java")) @@ -323,11 +322,10 @@ public void doGenerateRequestParamForSimpleParam() throws IOException { DefaultGenerator generator = new DefaultGenerator(); - generator.setGeneratorPropertyDefault(CodegenConstants.MODELS, "false"); generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_TESTS, "false"); generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_DOCS, "false"); generator.setGeneratorPropertyDefault(CodegenConstants.APIS, "true"); - generator.setGeneratorPropertyDefault(CodegenConstants.SUPPORTING_FILES, "false"); + generator.setGenerateMetadata(false); generator.opts(input).generate(); @@ -360,11 +358,10 @@ public void doNotGenerateRequestParamForObjectQueryParam() throws IOException { DefaultGenerator generator = new DefaultGenerator(); - generator.setGeneratorPropertyDefault(CodegenConstants.MODELS, "false"); generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_TESTS, "false"); generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_DOCS, "false"); generator.setGeneratorPropertyDefault(CodegenConstants.APIS, "true"); - generator.setGeneratorPropertyDefault(CodegenConstants.SUPPORTING_FILES, "false"); + generator.setGenerateMetadata(false); generator.opts(input).generate(); @@ -389,11 +386,10 @@ public void generateFormatForDateAndDateTimeQueryParam() throws IOException { input.config(codegen); DefaultGenerator generator = new DefaultGenerator(); - generator.setGeneratorPropertyDefault(CodegenConstants.MODELS, "false"); generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_TESTS, "false"); generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_DOCS, "false"); generator.setGeneratorPropertyDefault(CodegenConstants.APIS, "true"); - generator.setGeneratorPropertyDefault(CodegenConstants.SUPPORTING_FILES, "false"); + generator.setGenerateMetadata(false); generator.opts(input).generate(); JavaFileAssert.assertThat(Paths.get(outputPath + "/src/main/java/org/openapitools/api/ElephantsApi.java")) @@ -448,11 +444,10 @@ public void shouldGenerateRequestParamForRefParams_3248_Regression() throws IOEx DefaultGenerator generator = new DefaultGenerator(); - generator.setGeneratorPropertyDefault(CodegenConstants.MODELS, "false"); generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_TESTS, "false"); generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_DOCS, "false"); generator.setGeneratorPropertyDefault(CodegenConstants.APIS, "true"); - generator.setGeneratorPropertyDefault(CodegenConstants.SUPPORTING_FILES, "false"); + generator.setGenerateMetadata(false); generator.opts(input).generate(); @@ -486,11 +481,10 @@ public void shouldGenerateRequestParamForRefParams_3248_RegressionDates() throws DefaultGenerator generator = new DefaultGenerator(); - generator.setGeneratorPropertyDefault(CodegenConstants.MODELS, "false"); generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_TESTS, "false"); generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_DOCS, "false"); generator.setGeneratorPropertyDefault(CodegenConstants.APIS, "true"); - generator.setGeneratorPropertyDefault(CodegenConstants.SUPPORTING_FILES, "false"); + generator.setGenerateMetadata(false); generator.opts(input).generate(); @@ -519,6 +513,8 @@ public void testJavaClientCorrectConstructorOrderForRequiredFields_issue15825() final ClientOptInput clientOptInput = configurator.toClientOptInput(); DefaultGenerator generator = new DefaultGenerator(); + generator.setGenerateMetadata(false); // skip metadata and ↓ only generate models + generator.setGeneratorPropertyDefault(CodegenConstants.MODELS, "true"); Map files = generator.opts(clientOptInput).generate().stream() .collect(Collectors.toMap(File::getName, Function.identity())); @@ -550,7 +546,6 @@ public void springcloudWithAsyncAndJava8HasResponseWrapperCompletableFuture() th additionalProperties.put(CodegenConstants.MODEL_TESTS, "false"); additionalProperties.put(CodegenConstants.MODEL_DOCS, "false"); additionalProperties.put(CodegenConstants.APIS, "true"); - additionalProperties.put(CodegenConstants.SUPPORTING_FILES, "false"); Map files = generateFromContract("src/test/resources/3_0/petstore.yaml", SPRING_BOOT, additionalProperties); @@ -660,11 +655,10 @@ public void testDoGenerateRequestBodyRequiredAttribute_3134_Regression() throws DefaultGenerator generator = new DefaultGenerator(); - generator.setGeneratorPropertyDefault(CodegenConstants.MODELS, "false"); generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_TESTS, "false"); generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_DOCS, "false"); generator.setGeneratorPropertyDefault(CodegenConstants.APIS, "true"); - generator.setGeneratorPropertyDefault(CodegenConstants.SUPPORTING_FILES, "false"); + generator.setGenerateMetadata(false); generator.opts(input).generate(); @@ -814,6 +808,7 @@ public void shouldAddParameterWithInHeaderWhenImplicitHeadersIsTrue_issue14418() .config(codegen); DefaultGenerator generator = new DefaultGenerator(); + generator.setGenerateMetadata(false); Map files = generator.opts(input).generate().stream() .collect(Collectors.toMap(File::getName, Function.identity())); @@ -838,6 +833,7 @@ public void shouldApiNameSuffixForApiClassname() throws IOException { SpringCodegen codegen = new SpringCodegen(); codegen.setLibrary(SPRING_CLOUD_LIBRARY); codegen.setOutputDir(output.getAbsolutePath()); + codegen.additionalProperties().put(INTERFACE_ONLY, "true"); codegen.additionalProperties().put(CodegenConstants.MODEL_PACKAGE, "xyz.model"); codegen.additionalProperties().put(CodegenConstants.API_NAME_SUFFIX, "Controller"); codegen.additionalProperties().put(CodegenConstants.API_PACKAGE, "xyz.controller"); @@ -849,6 +845,7 @@ public void shouldApiNameSuffixForApiClassname() throws IOException { .config(codegen); DefaultGenerator generator = new DefaultGenerator(); + generator.setGenerateMetadata(false); Map files = generator.opts(input).generate().stream() .collect(Collectors.toMap(File::getName, Function.identity())); @@ -857,8 +854,8 @@ public void shouldApiNameSuffixForApiClassname() throws IOException { File notExisting = files.get("PetApi.java"); assertThat(notExisting).isNull(); - } + @Test public void shouldUseTagsForClassname() throws IOException { File output = Files.createTempDirectory("test").toFile().getCanonicalFile(); @@ -869,6 +866,7 @@ public void shouldUseTagsForClassname() throws IOException { SpringCodegen codegen = new SpringCodegen(); codegen.setLibrary(SPRING_CLOUD_LIBRARY); codegen.setOutputDir(output.getAbsolutePath()); + codegen.additionalProperties().put(INTERFACE_ONLY, "true"); codegen.additionalProperties().put(USE_TAGS, "true"); codegen.additionalProperties().put(CodegenConstants.MODEL_PACKAGE, "xyz.model"); codegen.additionalProperties().put(CodegenConstants.API_PACKAGE, "xyz.controller"); @@ -880,6 +878,8 @@ public void shouldUseTagsForClassname() throws IOException { .config(codegen); DefaultGenerator generator = new DefaultGenerator(); + generator.setGenerateMetadata(false); + Map files = generator.opts(input).generate().stream() .collect(Collectors.toMap(File::getName, Function.identity())); @@ -888,7 +888,6 @@ public void shouldUseTagsForClassname() throws IOException { File notExisting = files.get("PetApi.java"); assertThat(notExisting).isNull(); - } @Test @@ -901,18 +900,19 @@ public void shouldNotUseTagsForClassname() throws IOException { SpringCodegen codegen = new SpringCodegen(); codegen.setLibrary(SPRING_CLOUD_LIBRARY); codegen.setOutputDir(output.getAbsolutePath()); + codegen.additionalProperties().put(INTERFACE_ONLY, "true"); codegen.additionalProperties().put(USE_TAGS, "false"); codegen.additionalProperties().put(CodegenConstants.MODEL_PACKAGE, "xyz.model"); codegen.additionalProperties().put(CodegenConstants.API_PACKAGE, "xyz.controller"); codegen.additionalProperties().put(CodegenConstants.MODEL_NAME_SUFFIX, "Dto"); - ClientOptInput input = new ClientOptInput() .openAPI(openAPI) .config(codegen); DefaultGenerator generator = new DefaultGenerator(); + generator.setGenerateMetadata(false); Map files = generator.opts(input).generate().stream() .collect(Collectors.toMap(File::getName, Function.identity())); @@ -943,6 +943,8 @@ public void shouldAddValidAnnotationIntoCollectionWhenBeanValidationIsEnabled_is .config(codegen); DefaultGenerator generator = new DefaultGenerator(); + generator.setGenerateMetadata(false); // skip metadata and ↓ only generate models + generator.setGeneratorPropertyDefault(CodegenConstants.MODELS, "true"); Map files = generator.opts(input).generate().stream() .collect(Collectors.toMap(File::getName, Function.identity())); @@ -1001,6 +1003,8 @@ public void shouldAddValidAnnotationIntoCollectionWhenBeanValidationIsEnabled_is .config(codegen); DefaultGenerator generator = new DefaultGenerator(); + generator.setGenerateMetadata(false); // skip metadata and ↓ only generate models + generator.setGeneratorPropertyDefault(CodegenConstants.MODELS, "true"); Map files = generator.opts(input).generate().stream() .collect(Collectors.toMap(File::getName, Function.identity())); @@ -1087,6 +1091,7 @@ private Map generateFiles(SpringCodegen codegen, String filePath) input.config(codegen); final DefaultGenerator generator = new DefaultGenerator(); + generator.setGenerateMetadata(false); // skip metadata generation List files = generator.opts(input).generate(); return files.stream().collect(Collectors.toMap(e -> e.getName().replace(outputPath, ""), i -> i)); @@ -1217,11 +1222,10 @@ public void testGenerationOfClientPropertiesConfigurationForOAuth() throws Excep DefaultGenerator generator = new DefaultGenerator(); - generator.setGeneratorPropertyDefault(CodegenConstants.MODELS, "false"); generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_TESTS, "false"); generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_DOCS, "false"); - generator.setGeneratorPropertyDefault(CodegenConstants.APIS, "false"); generator.setGeneratorPropertyDefault(CodegenConstants.SUPPORTING_FILES, "true"); + generator.setGenerateMetadata(false); // skip metadata generation generator.opts(input).generate(); @@ -1285,12 +1289,10 @@ private void beanValidationForFormatEmail(boolean useBeanValidation, boolean per input.config(codegen); DefaultGenerator generator = new DefaultGenerator(); - - generator.setGeneratorPropertyDefault(CodegenConstants.MODELS, "true"); + generator.setGenerateMetadata(false); // skip metadata and ↓ only generate models generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_TESTS, "false"); generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_DOCS, "false"); - generator.setGeneratorPropertyDefault(CodegenConstants.APIS, "false"); - generator.setGeneratorPropertyDefault(CodegenConstants.SUPPORTING_FILES, "false"); + generator.setGeneratorPropertyDefault(CodegenConstants.MODELS, "true"); Map files = generator.opts(input).generate().stream() .collect(Collectors.toMap(File::getName, Function.identity())); @@ -1326,12 +1328,10 @@ public void reactiveMapTypeRequestMonoTest() throws IOException { input.config(codegen); DefaultGenerator generator = new DefaultGenerator(); - - generator.setGeneratorPropertyDefault(CodegenConstants.MODELS, "false"); + generator.setGenerateMetadata(false); // skip metadata and ↓ only generate API files generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_TESTS, "false"); generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_DOCS, "false"); generator.setGeneratorPropertyDefault(CodegenConstants.APIS, "true"); - generator.setGeneratorPropertyDefault(CodegenConstants.SUPPORTING_FILES, "false"); generator.opts(input).generate(); @@ -1348,10 +1348,7 @@ public void reactiveArrayShouldBeWrappedInFluxWithoutMono() throws IOException { additionalProperties.put(SpringCodegen.REACTIVE, "true"); additionalProperties.put(SpringCodegen.USE_RESPONSE_ENTITY, "false"); additionalProperties.put(SpringCodegen.USE_SPRING_BOOT3, "true"); - additionalProperties.put(CodegenConstants.MODEL_TESTS, "false"); - additionalProperties.put(CodegenConstants.MODEL_DOCS, "false"); additionalProperties.put(CodegenConstants.APIS, "true"); - additionalProperties.put(CodegenConstants.SUPPORTING_FILES, "false"); Map files = generateFromContract("src/test/resources/3_0/petstore.yaml", SPRING_BOOT, additionalProperties); JavaFileAssert @@ -1408,6 +1405,7 @@ public void shouldGenerateValidCodeForReactiveControllerWithoutParams_issue14907 input.config(codegen); DefaultGenerator generator = new DefaultGenerator(); + generator.setGenerateMetadata(false); // skip metadata Map files = generator.opts(input).generate().stream() .collect(Collectors.toMap(File::getName, Function.identity())); @@ -1439,6 +1437,7 @@ public void shouldGenerateValidCodeWithPaginated_reactive_issue15265() throws IO input.config(codegen); DefaultGenerator generator = new DefaultGenerator(); + generator.setGenerateMetadata(false); // skip metadata and ↓ only generate models Map files = generator.opts(input).generate().stream() .collect(Collectors.toMap(File::getName, Function.identity())); @@ -1471,6 +1470,7 @@ public void shouldGenerateValidCodeWithPaginated_nonReactive_issue15265() throws input.config(codegen); DefaultGenerator generator = new DefaultGenerator(); + generator.setGenerateMetadata(false); // skip metadata and ↓ only generate models Map files = generator.opts(input).generate().stream() .collect(Collectors.toMap(File::getName, Function.identity())); @@ -1513,12 +1513,10 @@ public void doGeneratePathVariableForSimpleParam() throws IOException { input.config(codegen); DefaultGenerator generator = new DefaultGenerator(); - - generator.setGeneratorPropertyDefault(CodegenConstants.MODELS, "false"); + generator.setGenerateMetadata(false); // skip metadata and ↓ only generate API generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_TESTS, "false"); generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_DOCS, "false"); generator.setGeneratorPropertyDefault(CodegenConstants.APIS, "true"); - generator.setGeneratorPropertyDefault(CodegenConstants.SUPPORTING_FILES, "false"); generator.opts(input).generate(); @@ -1551,12 +1549,10 @@ public void shouldGenerateDefaultValueForEnumRequestParameter() throws IOExcepti input.config(codegen); DefaultGenerator generator = new DefaultGenerator(); - - generator.setGeneratorPropertyDefault(CodegenConstants.MODELS, "false"); + generator.setGenerateMetadata(false); // skip metadata and ↓ only generate API generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_TESTS, "false"); generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_DOCS, "false"); generator.setGeneratorPropertyDefault(CodegenConstants.APIS, "true"); - generator.setGeneratorPropertyDefault(CodegenConstants.SUPPORTING_FILES, "false"); generator.opts(input).generate(); @@ -1638,12 +1634,10 @@ public void shouldAddNotNullOnRequiredAttributes() throws IOException { input.config(codegen); DefaultGenerator generator = new DefaultGenerator(); - - generator.setGeneratorPropertyDefault(CodegenConstants.MODELS, "true"); + generator.setGenerateMetadata(false); // skip metadata and ↓ only generate models generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_TESTS, "false"); generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_DOCS, "false"); - generator.setGeneratorPropertyDefault(CodegenConstants.APIS, "false"); - generator.setGeneratorPropertyDefault(CodegenConstants.SUPPORTING_FILES, "false"); + generator.setGeneratorPropertyDefault(CodegenConstants.MODELS, "true"); generator.opts(input).generate(); @@ -1669,12 +1663,10 @@ public void shouldNotAddNotNullOnReadOnlyAttributes() throws IOException { input.config(codegen); DefaultGenerator generator = new DefaultGenerator(); - + generator.setGenerateMetadata(false); // skip metadata and ↓ only generate models generator.setGeneratorPropertyDefault(CodegenConstants.MODELS, "true"); generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_TESTS, "false"); generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_DOCS, "false"); - generator.setGeneratorPropertyDefault(CodegenConstants.APIS, "false"); - generator.setGeneratorPropertyDefault(CodegenConstants.SUPPORTING_FILES, "false"); generator.opts(input).generate(); @@ -1703,18 +1695,15 @@ public void testOneOf5381() throws IOException { DefaultGenerator generator = new DefaultGenerator(); codegen.setHateoas(true); + generator.setGenerateMetadata(false); // skip metadata and ↓ only generate models generator.setGeneratorPropertyDefault(CodegenConstants.MODELS, "true"); - //generator.setGeneratorPropertyDefault(CodegenConstants.USE_ONEOF_DISCRIMINATOR_LOOKUP, "true"); + generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_TESTS, "false"); + generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_DOCS, "false"); generator.setGeneratorPropertyDefault(CodegenConstants.LEGACY_DISCRIMINATOR_BEHAVIOR, "false"); - + codegen.setUseOneOfInterfaces(true); codegen.setLegacyDiscriminatorBehavior(false); - generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_TESTS, "false"); - generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_DOCS, "false"); - generator.setGeneratorPropertyDefault(CodegenConstants.APIS, "true"); - generator.setGeneratorPropertyDefault(CodegenConstants.SUPPORTING_FILES, "false"); - generator.opts(input).generate(); assertFileContains(Paths.get(outputPath + "/src/main/java/org/openapitools/model/Foo.java"), "public class Foo implements FooRefOrValue"); @@ -1741,18 +1730,15 @@ public void testOneOfAndAllOf() throws IOException { DefaultGenerator generator = new DefaultGenerator(); codegen.setHateoas(true); + generator.setGenerateMetadata(false); // skip metadata and ↓ only generate models generator.setGeneratorPropertyDefault(CodegenConstants.MODELS, "true"); - //generator.setGeneratorPropertyDefault(CodegenConstants.USE_ONEOF_DISCRIMINATOR_LOOKUP, "true"); + generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_TESTS, "false"); + generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_DOCS, "false"); generator.setGeneratorPropertyDefault(CodegenConstants.LEGACY_DISCRIMINATOR_BEHAVIOR, "false"); codegen.setUseOneOfInterfaces(true); codegen.setLegacyDiscriminatorBehavior(false); - generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_TESTS, "false"); - generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_DOCS, "false"); - generator.setGeneratorPropertyDefault(CodegenConstants.APIS, "true"); - generator.setGeneratorPropertyDefault(CodegenConstants.SUPPORTING_FILES, "false"); - generator.opts(input).generate(); assertFileContains(Paths.get(outputPath + "/src/main/java/org/openapitools/model/Foo.java"), "public class Foo extends Entity implements FooRefOrValue"); @@ -1784,6 +1770,9 @@ public void testDiscriminatorWithMappingIssue14731() throws IOException { DefaultGenerator generator = new DefaultGenerator(); codegen.setHateoas(true); + generator.setGenerateMetadata(false); // skip metadata and ↓ only generate models + generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_TESTS, "false"); + generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_DOCS, "false"); generator.setGeneratorPropertyDefault(CodegenConstants.MODELS, "true"); generator.setGeneratorPropertyDefault(CodegenConstants.LEGACY_DISCRIMINATOR_BEHAVIOR, "false"); @@ -1793,11 +1782,6 @@ public void testDiscriminatorWithMappingIssue14731() throws IOException { codegen.setUseSpringBoot3(true); codegen.setModelNameSuffix("DTO"); - generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_TESTS, "false"); - generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_DOCS, "false"); - generator.setGeneratorPropertyDefault(CodegenConstants.APIS, "true"); - generator.setGeneratorPropertyDefault(CodegenConstants.SUPPORTING_FILES, "false"); - generator.opts(input).generate(); assertFileNotContains(Paths.get(outputPath + "/src/main/java/org/openapitools/model/ChildWithMappingADTO.java"), "@JsonTypeName"); @@ -1823,7 +1807,10 @@ public void testDiscriminatorWithoutMappingIssue14731() throws IOException { DefaultGenerator generator = new DefaultGenerator(); codegen.setHateoas(true); + generator.setGenerateMetadata(false); // skip metadata and ↓ only generate models generator.setGeneratorPropertyDefault(CodegenConstants.MODELS, "true"); + generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_TESTS, "false"); + generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_DOCS, "false"); generator.setGeneratorPropertyDefault(CodegenConstants.LEGACY_DISCRIMINATOR_BEHAVIOR, "false"); @@ -1832,11 +1819,6 @@ public void testDiscriminatorWithoutMappingIssue14731() throws IOException { codegen.setUseSpringBoot3(true); codegen.setModelNameSuffix("DTO"); - generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_TESTS, "false"); - generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_DOCS, "false"); - generator.setGeneratorPropertyDefault(CodegenConstants.APIS, "true"); - generator.setGeneratorPropertyDefault(CodegenConstants.SUPPORTING_FILES, "false"); - generator.opts(input).generate(); @@ -1863,18 +1845,15 @@ void testOneOfWithEnumDiscriminator() throws IOException { DefaultGenerator generator = new DefaultGenerator(); codegen.setHateoas(true); + generator.setGenerateMetadata(false); // skip metadata and ↓ only generate models + generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_TESTS, "false"); + generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_DOCS, "false"); generator.setGeneratorPropertyDefault(CodegenConstants.MODELS, "true"); - //generator.setGeneratorPropertyDefault(CodegenConstants.USE_ONEOF_DISCRIMINATOR_LOOKUP, "true"); generator.setGeneratorPropertyDefault(CodegenConstants.LEGACY_DISCRIMINATOR_BEHAVIOR, "false"); codegen.setUseOneOfInterfaces(true); codegen.setLegacyDiscriminatorBehavior(false); - generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_TESTS, "false"); - generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_DOCS, "false"); - generator.setGeneratorPropertyDefault(CodegenConstants.APIS, "true"); - generator.setGeneratorPropertyDefault(CodegenConstants.SUPPORTING_FILES, "false"); - generator.opts(input).generate(); assertFileContains( @@ -1927,12 +1906,10 @@ public void shouldGenerateOneTagAttributeForMultipleTags_Regression11464(String input.config(codegen); DefaultGenerator generator = new DefaultGenerator(); - - generator.setGeneratorPropertyDefault(CodegenConstants.MODELS, "false"); + generator.setGenerateMetadata(false); // skip metadata and ↓ only generate API generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_TESTS, "false"); generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_DOCS, "false"); generator.setGeneratorPropertyDefault(CodegenConstants.APIS, "true"); - generator.setGeneratorPropertyDefault(CodegenConstants.SUPPORTING_FILES, "false"); generator.opts(input).generate(); @@ -1988,12 +1965,10 @@ public void testIssue11323() throws IOException { input.config(codegen); DefaultGenerator generator = new DefaultGenerator(); - - generator.setGeneratorPropertyDefault(CodegenConstants.MODELS, "true"); + generator.setGenerateMetadata(false); // skip metadata and ↓ only generate models generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_TESTS, "false"); generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_DOCS, "false"); - generator.setGeneratorPropertyDefault(CodegenConstants.APIS, "false"); - generator.setGeneratorPropertyDefault(CodegenConstants.SUPPORTING_FILES, "false"); + generator.setGeneratorPropertyDefault(CodegenConstants.MODELS, "true"); generator.opts(input).generate(); assertFileContains(Paths.get(outputPath + "/src/main/java/org/openapitools/model/Address.java"), @@ -2018,12 +1993,10 @@ public void shouldPurAdditionalModelTypesOverAllModels() throws IOException { input.config(codegen); DefaultGenerator generator = new DefaultGenerator(); - - generator.setGeneratorPropertyDefault(CodegenConstants.MODELS, "true"); + generator.setGenerateMetadata(false); // skip metadata and ↓ only generate models generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_TESTS, "false"); generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_DOCS, "false"); - generator.setGeneratorPropertyDefault(CodegenConstants.APIS, "false"); - generator.setGeneratorPropertyDefault(CodegenConstants.SUPPORTING_FILES, "false"); + generator.setGeneratorPropertyDefault(CodegenConstants.MODELS, "true"); generator.opts(input).generate(); File[] generatedModels = new File(outputPath + "/src/main/java/org/openapitools/model").listFiles(); @@ -2056,11 +2029,10 @@ public void shouldGenerateExternalDocs() throws IOException { .config(codegen); DefaultGenerator generator = new DefaultGenerator(); - generator.setGeneratorPropertyDefault(CodegenConstants.MODELS, "false"); + generator.setGenerateMetadata(false); // skip metadata and ↓ only generate API generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_TESTS, "false"); generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_DOCS, "false"); generator.setGeneratorPropertyDefault(CodegenConstants.APIS, "true"); - generator.setGeneratorPropertyDefault(CodegenConstants.SUPPORTING_FILES, "false"); Map files = generator.opts(input).generate().stream() .collect(Collectors.toMap(File::getName, Function.identity())); @@ -2156,12 +2128,10 @@ public void testExtraAnnotations() throws IOException { input.config(codegen); DefaultGenerator generator = new DefaultGenerator(); - - generator.setGeneratorPropertyDefault(CodegenConstants.MODELS, "true"); + generator.setGenerateMetadata(false); // skip metadata and ↓ only generate models generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_TESTS, "false"); generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_DOCS, "false"); - generator.setGeneratorPropertyDefault(CodegenConstants.APIS, "false"); - generator.setGeneratorPropertyDefault(CodegenConstants.SUPPORTING_FILES, "false"); + generator.setGeneratorPropertyDefault(CodegenConstants.MODELS, "true"); generator.opts(input).generate(); TestUtils.assertExtraAnnotationFiles(outputPath + "/src/main/java/org/openapitools/model"); @@ -2415,6 +2385,7 @@ public void shouldGenerateBeanValidationOnHeaderParams() throws IOException { SpringCodegen codegen = new SpringCodegen(); codegen.setLibrary(SPRING_BOOT); codegen.setOutputDir(output.getAbsolutePath()); + codegen.additionalProperties().put(INTERFACE_ONLY, "true"); codegen.additionalProperties().put(SpringCodegen.USE_TAGS, "true"); codegen.additionalProperties().put(BeanValidationFeatures.USE_BEANVALIDATION, "true"); @@ -2423,6 +2394,9 @@ public void shouldGenerateBeanValidationOnHeaderParams() throws IOException { .config(codegen); DefaultGenerator generator = new DefaultGenerator(); + generator.setGeneratorPropertyDefault(CodegenConstants.APIS, "true"); + generator.setGenerateMetadata(false); + Map files = generator.opts(input).generate().stream() .collect(Collectors.toMap(File::getName, Function.identity())); @@ -2597,6 +2571,11 @@ public void shouldUseEqualsNullableForArrayWhenSetInConfig_issue13385() throws I .config(codegen); DefaultGenerator generator = new DefaultGenerator(); + generator.setGenerateMetadata(false); // skip metadata and ↓ only generate models + generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_TESTS, "false"); + generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_DOCS, "false"); + generator.setGeneratorPropertyDefault(CodegenConstants.MODELS, "true"); + Map files = generator.opts(input).generate().stream() .collect(Collectors.toMap(File::getName, Function.identity())); @@ -2627,6 +2606,8 @@ public void shouldNotUseEqualsNullableForArrayWhenNotSetInConfig_issue13385() th .config(codegen); DefaultGenerator generator = new DefaultGenerator(); + generator.setGenerateMetadata(false); // skip metadata and ↓ only generate models + generator.setGeneratorPropertyDefault(CodegenConstants.MODELS, "true"); Map files = generator.opts(input).generate().stream() .collect(Collectors.toMap(File::getName, Function.identity())); @@ -2656,6 +2637,7 @@ public void useBeanValidationGenerateAnnotationsForRequestBody_issue13932() thro .config(codegen); DefaultGenerator generator = new DefaultGenerator(); + generator.setGenerateMetadata(false); Map files = generator.opts(input).generate().stream() .collect(Collectors.toMap(File::getName, Function.identity())); @@ -2689,6 +2671,8 @@ public void shouldHandleSeparatelyInterfaceAndModelAdditionalAnnotations() throw .config(codegen); DefaultGenerator generator = new DefaultGenerator(); + generator.setGenerateMetadata(false); // skip metadata and ↓ only generate models + generator.setGeneratorPropertyDefault(CodegenConstants.MODELS, "true"); Map files = generator.opts(input).generate().stream() .collect(Collectors.toMap(File::getName, Function.identity())); @@ -2734,6 +2718,8 @@ public void contractWithResolvedInnerEnumContainsEnumConverter() throws IOExcept final ClientOptInput clientOptInput = configurator.toClientOptInput(); DefaultGenerator generator = new DefaultGenerator(); + generator.setGenerateMetadata(false); + Map files = generator.opts(clientOptInput).generate().stream() .collect(Collectors.toMap(File::getName, Function.identity())); @@ -2743,7 +2729,9 @@ public void contractWithResolvedInnerEnumContainsEnumConverter() throws IOExcept @Test public void shouldUseTheSameTagNameForTheInterfaceAndTheMethod_issue11570() throws IOException { - final Map output = generateFromContract("src/test/resources/bugs/issue_11570.yml", SPRING_BOOT); + final Map output = generateFromContract( + "src/test/resources/bugs/issue_11570.yml", SPRING_BOOT, Map.of(INTERFACE_ONLY, "true") + ); final String expectedTagName = "\"personTagWithExclamation!\""; final String expectedTagDescription = "\"the personTagWithExclamation! API\""; @@ -2755,8 +2743,11 @@ public void shouldUseTheSameTagNameForTheInterfaceAndTheMethod_issue11570() thro @Test public void shouldGenerateConstructorWithOnlyRequiredParameters() throws IOException { - final Map output = generateFromContract("src/test/resources/3_0/spring/issue_9789.yml", SPRING_BOOT, - Map.of(GENERATE_CONSTRUCTOR_WITH_ALL_ARGS, "false")); + final Map output = generateFromContract( + "src/test/resources/3_0/spring/issue_9789.yml", + SPRING_BOOT, + Map.of(GENERATE_CONSTRUCTOR_WITH_ALL_ARGS, "false") + ); JavaFileAssert.assertThat(output.get("ObjectWithNoRequiredParameter.java")).assertNoConstructor("String"); @@ -2805,6 +2796,7 @@ private Map generateFromContract(String url, String library, Map files = generator.opts(input).generate().stream() .collect(Collectors.toMap(File::getName, Function.identity())); @@ -2959,6 +2950,8 @@ public void testReturnTypeVoidWithResponseEntity_issue12341() throws IOException input.config(codegen); DefaultGenerator generator = new DefaultGenerator(); + generator.setGenerateMetadata(false); // skip metadata generation + generator.setGeneratorPropertyDefault(CodegenConstants.APIS, "true"); Map files = generator.opts(input).generate().stream() .collect(Collectors.toMap(File::getName, Function.identity())); @@ -3002,6 +2995,8 @@ public void testReturnTypeVoidWithoutResponseEntityWithDelegate_issue12341() thr input.config(codegen); DefaultGenerator generator = new DefaultGenerator(); + generator.setGenerateMetadata(false); // skip metadata generation + generator.setGeneratorPropertyDefault(CodegenConstants.APIS, "true"); Map files = generator.opts(input).generate().stream() .collect(Collectors.toMap(File::getName, Function.identity())); @@ -3047,6 +3042,8 @@ public void testReturnTypeVoidWithoutResponseEntityWithoutDelegateWithAsync_issu input.config(codegen); DefaultGenerator generator = new DefaultGenerator(); + generator.setGenerateMetadata(false); // skip metadata generation + generator.setGeneratorPropertyDefault(CodegenConstants.APIS, "true"); Map files = generator.opts(input).generate().stream() .collect(Collectors.toMap(File::getName, Function.identity())); @@ -3084,6 +3081,8 @@ public void testReturnTypeVoidWithoutResponseEntityWithoutDelegateWithoutAsync_i input.config(codegen); DefaultGenerator generator = new DefaultGenerator(); + generator.setGenerateMetadata(false); // skip metadata generation + generator.setGeneratorPropertyDefault(CodegenConstants.APIS, "true"); Map files = generator.opts(input).generate().stream() .collect(Collectors.toMap(File::getName, Function.identity())); @@ -3121,6 +3120,8 @@ public void testHasRestControllerDoesNotHaveController_issue15264() throws IOExc input.config(codegen); DefaultGenerator generator = new DefaultGenerator(); + generator.setGenerateMetadata(false); // skip metadata generation + generator.setGeneratorPropertyDefault(CodegenConstants.APIS, "true"); Map files = generator.opts(input).generate().stream() .collect(Collectors.toMap(File::getName, Function.identity())); @@ -3157,6 +3158,8 @@ public void testDoesNotHasRestControllerHaveController_issue15264() throws IOExc input.config(codegen); DefaultGenerator generator = new DefaultGenerator(); + generator.setGenerateMetadata(false); // skip metadata generation + generator.setGeneratorPropertyDefault(CodegenConstants.APIS, "true"); Map files = generator.opts(input).generate().stream() .collect(Collectors.toMap(File::getName, Function.identity())); @@ -3191,6 +3194,8 @@ public void testXPatternMessage_issue5857() throws IOException { input.config(codegen); DefaultGenerator generator = new DefaultGenerator(); + generator.setGenerateMetadata(false); // skip metadata generation + generator.setGeneratorPropertyDefault(CodegenConstants.MODELS, "true"); Map files = generator.opts(input).generate().stream() .collect(Collectors.toMap(File::getName, Function.identity())); @@ -3232,6 +3237,8 @@ public void testEnumCaseInsensitive_issue8084() throws IOException { input.config(codegen); DefaultGenerator generator = new DefaultGenerator(); + generator.setGenerateMetadata(false); // skip metadata generation + generator.setGeneratorPropertyDefault(CodegenConstants.MODELS, "true"); Map files = generator.opts(input).generate().stream() .collect(Collectors.toMap(File::getName, Function.identity())); @@ -3263,6 +3270,8 @@ public void testEnumCaseSensitive_issue8084() throws IOException { input.config(codegen); DefaultGenerator generator = new DefaultGenerator(); + generator.setGenerateMetadata(false); // skip metadata generation + generator.setGeneratorPropertyDefault(CodegenConstants.MODELS, "true"); Map files = generator.opts(input).generate().stream() .collect(Collectors.toMap(File::getName, Function.identity())); @@ -3296,6 +3305,8 @@ public void testHasOperationExtraAnnotation_issue15822() throws IOException { input.config(codegen); DefaultGenerator generator = new DefaultGenerator(); + generator.setGenerateMetadata(false); // skip metadata generation + generator.setGeneratorPropertyDefault(CodegenConstants.APIS, "true"); Map files = generator.opts(input).generate().stream() .collect(Collectors.toMap(File::getName, Function.identity())); @@ -3329,6 +3340,8 @@ public void testHasOperationExtraAnnotation_issue12219() throws IOException { input.config(codegen); DefaultGenerator generator = new DefaultGenerator(); + generator.setGenerateMetadata(false); // skip metadata generation + generator.setGeneratorPropertyDefault(CodegenConstants.APIS, "true"); Map files = generator.opts(input).generate().stream() .collect(Collectors.toMap(File::getName, Function.identity())); @@ -3364,6 +3377,8 @@ public void testHasOperationExtraAnnotation_issue12219_array() throws IOExceptio input.config(codegen); DefaultGenerator generator = new DefaultGenerator(); + generator.setGenerateMetadata(false); // skip metadata generation + generator.setGeneratorPropertyDefault(CodegenConstants.APIS, "true"); Map files = generator.opts(input).generate().stream() .collect(Collectors.toMap(File::getName, Function.identity())); @@ -3397,11 +3412,10 @@ public void doCallFluentParentSettersFromChildModel() throws IOException { DefaultGenerator generator = new DefaultGenerator(); - generator.setGeneratorPropertyDefault(CodegenConstants.MODELS, "true"); generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_TESTS, "false"); generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_DOCS, "false"); - generator.setGeneratorPropertyDefault(CodegenConstants.APIS, "true"); - generator.setGeneratorPropertyDefault(CodegenConstants.SUPPORTING_FILES, "false"); + generator.setGeneratorPropertyDefault(CodegenConstants.MODELS, "true"); + generator.setGenerateMetadata(false); // skip metadata generation generator.opts(input).generate(); @@ -3461,8 +3475,6 @@ public void testModelsWithNoneOptionalAndJsonNullable() throws IOException { generator.setGeneratorPropertyDefault(CodegenConstants.MODELS, "true"); generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_TESTS, "false"); generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_DOCS, "false"); - generator.setGeneratorPropertyDefault(CodegenConstants.APIS, "true"); - generator.setGeneratorPropertyDefault(CodegenConstants.SUPPORTING_FILES, "false"); generator.opts(input).generate(); @@ -3675,12 +3687,10 @@ public void testModelsWithOptionalAndJsonNullable() throws IOException { input.config(codegen); DefaultGenerator generator = new DefaultGenerator(); - + generator.setGenerateMetadata(false); generator.setGeneratorPropertyDefault(CodegenConstants.MODELS, "true"); generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_TESTS, "false"); generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_DOCS, "false"); - generator.setGeneratorPropertyDefault(CodegenConstants.APIS, "true"); - generator.setGeneratorPropertyDefault(CodegenConstants.SUPPORTING_FILES, "false"); generator.opts(input).generate(); @@ -3893,12 +3903,10 @@ public void testModelsWithOptionalAndNoneJsonNullable() throws IOException { input.config(codegen); DefaultGenerator generator = new DefaultGenerator(); - + generator.setGenerateMetadata(false); generator.setGeneratorPropertyDefault(CodegenConstants.MODELS, "true"); generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_TESTS, "false"); generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_DOCS, "false"); - generator.setGeneratorPropertyDefault(CodegenConstants.APIS, "true"); - generator.setGeneratorPropertyDefault(CodegenConstants.SUPPORTING_FILES, "false"); generator.opts(input).generate(); @@ -4130,12 +4138,10 @@ public void testModelsWithNoneOptionalAndNoneOpenApiNullable() throws IOExceptio input.config(codegen); DefaultGenerator generator = new DefaultGenerator(); - - generator.setGeneratorPropertyDefault(CodegenConstants.MODELS, "true"); + generator.setGenerateMetadata(false); generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_TESTS, "false"); generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_DOCS, "false"); - generator.setGeneratorPropertyDefault(CodegenConstants.APIS, "true"); - generator.setGeneratorPropertyDefault(CodegenConstants.SUPPORTING_FILES, "false"); + generator.setGeneratorPropertyDefault(CodegenConstants.MODELS, "true"); generator.opts(input).generate(); @@ -4418,6 +4424,7 @@ private void assertMethod(JavaFileAssert javaFileAssert, Class type, String e public void multiLineOperationDescription() throws IOException { Map additionalProperties = new HashMap<>(); additionalProperties.put(SpringCodegen.USE_TAGS, "true"); + additionalProperties.put(INTERFACE_ONLY, "true"); additionalProperties.put(DOCUMENTATION_PROVIDER, DocumentationProvider.SPRINGDOC.name()); Map files = generateFromContract("src/test/resources/3_0/spring/issue12474-multiline-description.yaml", SPRING_BOOT, additionalProperties); @@ -4431,6 +4438,7 @@ public void multiLineOperationDescription() throws IOException { public void multiLineTagDescription() throws IOException { Map additionalProperties = new HashMap<>(); additionalProperties.put(SpringCodegen.USE_TAGS, "true"); + additionalProperties.put(INTERFACE_ONLY, "true"); additionalProperties.put(DOCUMENTATION_PROVIDER, DocumentationProvider.SPRINGDOC.name()); Map files = generateFromContract("src/test/resources/3_0/spring/issue12474-multiline-description.yaml", SPRING_BOOT, additionalProperties); @@ -4460,6 +4468,8 @@ public void testSSEOperationSupport() throws Exception { input.config(codegen); DefaultGenerator generator = new DefaultGenerator(); + generator.setGeneratorPropertyDefault(CodegenConstants.APIS, "true"); + generator.setGenerateMetadata(false); Map files = generator.opts(input).generate().stream() .collect(Collectors.toMap(File::getName, Function.identity())); @@ -4510,7 +4520,7 @@ public void givenMultipartForm_whenGenerateReactiveServer_thenParameterAreCreate final SpringCodegen codegen = new SpringCodegen(); codegen.setOpenAPI(openAPI); codegen.setOutputDir(output.getAbsolutePath()); - + codegen.additionalProperties().put(INTERFACE_ONLY, "true"); codegen.additionalProperties().put(SpringCodegen.REACTIVE, "true"); ClientOptInput input = new ClientOptInput(); @@ -4518,12 +4528,10 @@ public void givenMultipartForm_whenGenerateReactiveServer_thenParameterAreCreate input.config(codegen); DefaultGenerator generator = new DefaultGenerator(); - - generator.setGeneratorPropertyDefault(CodegenConstants.MODELS, "false"); + generator.setGenerateMetadata(false); generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_TESTS, "false"); generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_DOCS, "false"); generator.setGeneratorPropertyDefault(CodegenConstants.APIS, "true"); - generator.setGeneratorPropertyDefault(CodegenConstants.SUPPORTING_FILES, "false"); generator.opts(input).generate(); @@ -4539,6 +4547,7 @@ public void givenMultipartForm_whenGenerateBlockedServer_thenParameterAreCreated final OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/3_0/spring/petstore-with-tags.yaml"); final SpringCodegen codegen = new SpringCodegen(); + codegen.additionalProperties().put(INTERFACE_ONLY, "true"); codegen.setOpenAPI(openAPI); codegen.setOutputDir(output.getAbsolutePath()); @@ -4547,12 +4556,10 @@ public void givenMultipartForm_whenGenerateBlockedServer_thenParameterAreCreated input.config(codegen); DefaultGenerator generator = new DefaultGenerator(); - - generator.setGeneratorPropertyDefault(CodegenConstants.MODELS, "false"); + generator.setGenerateMetadata(false); generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_TESTS, "false"); generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_DOCS, "false"); generator.setGeneratorPropertyDefault(CodegenConstants.APIS, "true"); - generator.setGeneratorPropertyDefault(CodegenConstants.SUPPORTING_FILES, "false"); generator.opts(input).generate(); @@ -4563,7 +4570,7 @@ public void givenMultipartForm_whenGenerateBlockedServer_thenParameterAreCreated @Test public void testAllArgsConstructor_16797() throws IOException { final Map output = generateFromContract("src/test/resources/3_0/spring/issue_16797.yaml", SPRING_BOOT, - Map.of(GENERATE_CONSTRUCTOR_WITH_ALL_ARGS, Boolean.TRUE), + Map.of(GENERATE_CONSTRUCTOR_WITH_ALL_ARGS, Boolean.TRUE, INTERFACE_ONLY, "true"), codegen -> codegen.addOpenapiNormalizer("REFACTOR_ALLOF_WITH_PROPERTIES_ONLY", "false")); JavaFileAssert.assertThat(output.get("Object4.java")) .assertConstructor("String", "Type1", "String", "String", "Boolean") @@ -4578,7 +4585,7 @@ public void testAllArgsConstructor_16797() throws IOException { @Test public void testAllArgsConstructor_16797_REFACTOR_ALLOF_WITH_PROPERTIES_ONLY() throws IOException { final Map output = generateFromContract("src/test/resources/3_0/spring/issue_16797.yaml", SPRING_BOOT, - Map.of(GENERATE_CONSTRUCTOR_WITH_ALL_ARGS, Boolean.TRUE), + Map.of(GENERATE_CONSTRUCTOR_WITH_ALL_ARGS, Boolean.TRUE, INTERFACE_ONLY, "true"), codegen -> codegen.addOpenapiNormalizer("REFACTOR_ALLOF_WITH_PROPERTIES_ONLY", "true")); JavaFileAssert.assertThat(output.get("Object4.java")) .assertConstructor("String", "Type1", "String", "String", "Boolean") @@ -4591,7 +4598,9 @@ public void testAllArgsConstructor_16797_REFACTOR_ALLOF_WITH_PROPERTIES_ONLY() t @Test public void testMultiInheritanceParentRequiredParams_issue16797() throws IOException { - final Map output = generateFromContract("src/test/resources/3_0/spring/issue_16797.yaml", SPRING_BOOT); + final Map output = generateFromContract( + "src/test/resources/3_0/spring/issue_16797.yaml", SPRING_BOOT, Map.of(INTERFACE_ONLY, "true") + ); // constructor should as // public Object4(Type1 pageInfo, String responseType, String requestId, Boolean success) { // super(responseType, requestId, success, pageInfo); @@ -4607,7 +4616,9 @@ public void testMultiInheritanceParentRequiredParams_issue16797() throws IOExcep @Test public void testMultiInheritanceParentRequiredParams_issue15796() throws IOException { - final Map output = generateFromContract("src/test/resources/3_0/spring/issue_15796.yaml", SPRING_BOOT); + final Map output = generateFromContract( + "src/test/resources/3_0/spring/issue_15796.yaml", SPRING_BOOT, Map.of(INTERFACE_ONLY, "true") + ); // constructor should as this //public Poodle(String race, String type) { // super(race, type); @@ -4622,7 +4633,7 @@ public void testMultiInheritanceParentRequiredParams_issue15796() throws IOExcep @Test public void testAllArgsConstructor_defaultOrder_15796() throws IOException { final Map output = generateFromContract("src/test/resources/3_0/spring/issue_15796.yaml", SPRING_BOOT, - Map.of(GENERATE_CONSTRUCTOR_WITH_ALL_ARGS, Boolean.TRUE), + Map.of(GENERATE_CONSTRUCTOR_WITH_ALL_ARGS, Boolean.TRUE, INTERFACE_ONLY, "true"), config -> config.addOpenapiNormalizer("REFACTOR_ALLOF_WITH_PROPERTIES_ONLY", " true")); // constructors should as this //public Poodle(String race, String type) { @@ -4650,7 +4661,7 @@ public void testAllArgsConstructor_defaultOrder_15796() throws IOException { @Test public void generateAllArgsConstructor() throws IOException { Map files = generateFromContract("src/test/resources/3_0/java/all_args_constructor.yaml", null, - Map.of(AbstractJavaCodegen.GENERATE_CONSTRUCTOR_WITH_ALL_ARGS, Boolean.TRUE), + Map.of(AbstractJavaCodegen.GENERATE_CONSTRUCTOR_WITH_ALL_ARGS, Boolean.TRUE, INTERFACE_ONLY, "true"), codegenConfig -> codegenConfig.addOpenapiNormalizer("REFACTOR_ALLOF_WITH_PROPERTIES_ONLY", " true")); JavaFileAssert.assertThat(files.get("Pet.java")) .assertConstructor("String") @@ -4682,7 +4693,11 @@ public void generateAllArgsConstructor() throws IOException { public void allOfDuplicatedProperties() throws IOException { final Map additionalProperties = new HashMap<>(); - Map output = generateFromContract("src/test/resources/3_0/allOfDuplicatedProperties.yaml", SPRING_BOOT, Map.of(GENERATE_CONSTRUCTOR_WITH_ALL_ARGS, true)); + Map output = generateFromContract( + "src/test/resources/3_0/allOfDuplicatedProperties.yaml", + SPRING_BOOT, + Map.of(GENERATE_CONSTRUCTOR_WITH_ALL_ARGS, true, INTERFACE_ONLY, "true") + ); JavaFileAssert.assertThat(output.get("ModelC.java")) .assertConstructor("String", "Integer", "Integer", "String", "String"); @@ -4691,6 +4706,7 @@ public void allOfDuplicatedProperties() throws IOException { public void testLombokAnnotations() throws IOException { final Map additionalProperties = new HashMap<>(); additionalProperties.put(AbstractJavaCodegen.ADDITIONAL_MODEL_TYPE_ANNOTATIONS, "@lombok.Data;@lombok.NoArgsConstructor;@lombok.AllArgsConstructor"); + additionalProperties.put(INTERFACE_ONLY, "true"); Map output = generateFromContract("src/test/resources/3_0/petstore.yaml", SPRING_BOOT, additionalProperties); JavaFileAssert.assertThat(output.get("Pet.java")) .assertNoConstructor() @@ -4733,10 +4749,16 @@ public void testLombokAnnotations() throws IOException { @Test void testBuilderJavaSpring_noOptional() throws IOException { - Map files = generateFromContract("src/test/resources/3_0/java/builder.yaml", SPRING_BOOT, - Map.of(GENERATE_BUILDERS, true, - SpringCodegen.OPENAPI_NULLABLE, false, - SpringCodegen.USE_OPTIONAL, false)); + Map files = generateFromContract( + "src/test/resources/3_0/java/builder.yaml", + SPRING_BOOT, + Map.of( + GENERATE_BUILDERS, true, + SpringCodegen.OPENAPI_NULLABLE, false, + SpringCodegen.USE_OPTIONAL, false, + INTERFACE_ONLY, "true" + ) + ); JavaFileAssert.assertThat(files.get("Pet.java")) .fileContains("toBuilder()", @@ -4756,10 +4778,16 @@ void testBuilderJavaSpring_noOptional() throws IOException { @Test void testBuilderJavaSpring_useOptional() throws IOException { - Map files = generateFromContract("src/test/resources/3_0/java/builder.yaml", SPRING_BOOT, - Map.of(GENERATE_BUILDERS, true, - SpringCodegen.OPENAPI_NULLABLE, true, - SpringCodegen.USE_OPTIONAL, true)); + Map files = generateFromContract( + "src/test/resources/3_0/java/builder.yaml", + SPRING_BOOT, + Map.of( + GENERATE_BUILDERS, true, + SpringCodegen.OPENAPI_NULLABLE, true, + SpringCodegen.USE_OPTIONAL, true, + INTERFACE_ONLY, "true" + ) + ); JavaFileAssert.assertThat(files.get("Pet.java")) .fileContains("toBuilder()", @@ -4787,6 +4815,7 @@ public void optionalListShouldBeEmpty() throws IOException { SpringCodegen codegen = new SpringCodegen(); codegen.setLibrary(SPRING_CLOUD_LIBRARY); codegen.setOutputDir(output.getAbsolutePath()); + codegen.additionalProperties().put(INTERFACE_ONLY, "true"); codegen.additionalProperties().put(CodegenConstants.MODEL_PACKAGE, "xyz.model"); codegen.additionalProperties().put(CodegenConstants.API_NAME_SUFFIX, "Controller"); codegen.additionalProperties().put(CodegenConstants.API_PACKAGE, "xyz.controller"); @@ -4798,6 +4827,9 @@ public void optionalListShouldBeEmpty() throws IOException { .config(codegen); DefaultGenerator generator = new DefaultGenerator(); + generator.setGenerateMetadata(false); // skip metadata and ↓ only generate models + generator.setGeneratorPropertyDefault(CodegenConstants.MODELS, "true"); + Map files = generator.opts(input).generate().stream() .collect(Collectors.toMap(File::getName, Function.identity())); @@ -4829,6 +4861,9 @@ public void testCollectionTypesWithDefaults_issue_18102() throws IOException { .config(codegen); DefaultGenerator generator = new DefaultGenerator(); + generator.setGenerateMetadata(false); // skip metadata and ↓ only generate models + generator.setGeneratorPropertyDefault(CodegenConstants.MODELS, "true"); + Map files = generator.opts(input).generate().stream() .collect(Collectors.toMap(File::getName, Function.identity())); From adfa9bd3577045df357214b7ebcd066aae4d70bf Mon Sep 17 00:00:00 2001 From: Philzen Date: Tue, 21 May 2024 17:31:47 +0200 Subject: [PATCH 06/15] Reformat table for readability --- docs/global-properties.md | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/docs/global-properties.md b/docs/global-properties.md index 1fe76f580136..3f476e734626 100644 --- a/docs/global-properties.md +++ b/docs/global-properties.md @@ -5,23 +5,23 @@ title: Global Properties ## Available Global Properties -| Property | Description | Acceptable value | -| -------- | ------------| ---------------- | -| debugOpenAPI | Dumps JSON formatted and fully parsed OpenAPI document during generation | none | -| debugModels | Dumps JSON formatted template-bound model information during generation | none | -| debugOperations | Dumps JSON formatted template-bound operation information during generation | none | -| debugSupportingFiles | Dumps JSON formatted Supporting File information during generation | none | -| verbose | Defines the verbosity | `true` or `false` | -| generateAliasAsModel | Defines whether primitive types defined at the model/schema level will be wrapped in a model | `true` or `false` | -| org.openapitools.codegen.utils.oncelogger.enabled | Enable/disable the "OnceLogger" which reduces noise for select repeated logs | `true` or `false` | -| supportingFiles | Allows the user to define which supporting files will be generated. Prefer using the more robust `.openapi-generator-ignore`. | no value, or a colon-separated string of file names | -| models | Allows the user to define which models will be generated. Prefer using the more robust `.openapi-generator-ignore`. | no value, or a colon-separated string of model names | -| apis | Allows the user to define which apis will be generated. Prefer using the more robust `.openapi-generator-ignore`. | no value, or a colon-separated string of api names | -| apiDocs | Allows the user to define if api docs will be generated. Prefer using the more robust `.openapi-generator-ignore`. | `true` or `false` | -| modelDocs | Allows the user to define if model docs will be generated. Prefer using the more robust `.openapi-generator-ignore`. | `true` or `false` | -| apiTests | Allows the user to define if api tests will be generated. Prefer using the more robust `.openapi-generator-ignore`. | `true` or `false` | -| modelTests | Allows the user to define if model tests will be generated. Prefer using the more robust `.openapi-generator-ignore`. | `true` or `false` | -| withXml | Allows the user to control support of XML generated constructs, where supported | none | +| Property | Description | Acceptable value | +|---------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------| +| debugOpenAPI | Dumps JSON formatted and fully parsed OpenAPI document during generation | none | +| debugModels | Dumps JSON formatted template-bound model information during generation | none | +| debugOperations | Dumps JSON formatted template-bound operation information during generation | none | +| debugSupportingFiles | Dumps JSON formatted Supporting File information during generation | none | +| verbose | Defines the verbosity | `true` or `false` | +| generateAliasAsModel | Defines whether primitive types defined at the model/schema level will be wrapped in a model | `true` or `false` | +| org.openapitools.codegen.utils.oncelogger.enabled | Enable/disable the "OnceLogger" which reduces noise for select repeated logs | `true` or `false` | +| supportingFiles | Allows the user to define which supporting files will be generated. Prefer using the more robust `.openapi-generator-ignore`. | no value, or a colon-separated string of file names | +| models | Allows the user to define which models will be generated. Prefer using the more robust `.openapi-generator-ignore`. | no value, or a colon-separated string of model names | +| apis | Allows the user to define which apis will be generated. Prefer using the more robust `.openapi-generator-ignore`. | no value, or a colon-separated string of api names | +| apiDocs | Allows the user to define if api docs will be generated. Prefer using the more robust `.openapi-generator-ignore`. | `true` or `false` | +| modelDocs | Allows the user to define if model docs will be generated. Prefer using the more robust `.openapi-generator-ignore`. | `true` or `false` | +| apiTests | Allows the user to define if api tests will be generated. Prefer using the more robust `.openapi-generator-ignore`. | `true` or `false` | +| modelTests | Allows the user to define if model tests will be generated. Prefer using the more robust `.openapi-generator-ignore`. | `true` or `false` | +| withXml | Allows the user to control support of XML generated constructs, where supported | none | ## Note on Global Property declaration From f35a3ad212dbb9a973812bed174f7e9b59ded45d Mon Sep 17 00:00:00 2001 From: Philzen Date: Tue, 21 May 2024 18:08:38 +0200 Subject: [PATCH 07/15] Remove global property `withXml` from generator and docs --- docs/global-properties.md | 1 - .../codegen/DefaultGenerator.java | 7 ----- .../generichost/README.client.mustache | 1 - .../java/spring/SpringCodegenTest.java | 29 ------------------- 4 files changed, 38 deletions(-) diff --git a/docs/global-properties.md b/docs/global-properties.md index 3f476e734626..445b7f21ce5a 100644 --- a/docs/global-properties.md +++ b/docs/global-properties.md @@ -21,7 +21,6 @@ title: Global Properties | modelDocs | Allows the user to define if model docs will be generated. Prefer using the more robust `.openapi-generator-ignore`. | `true` or `false` | | apiTests | Allows the user to define if api tests will be generated. Prefer using the more robust `.openapi-generator-ignore`. | `true` or `false` | | modelTests | Allows the user to define if model tests will be generated. Prefer using the more robust `.openapi-generator-ignore`. | `true` or `false` | -| withXml | Allows the user to control support of XML generated constructs, where supported | none | ## Note on Global Property declaration diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultGenerator.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultGenerator.java index 4967fa84f299..8337b77be4d0 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultGenerator.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultGenerator.java @@ -237,13 +237,6 @@ void configureGeneratorProperties() { generateApiDocumentation = GlobalSettings.getProperty(CodegenConstants.API_DOCS) != null ? Boolean.valueOf(GlobalSettings.getProperty(CodegenConstants.API_DOCS)) : getGeneratorPropertyDefaultSwitch(CodegenConstants.API_DOCS, true); generateRecursiveDependentModels = GlobalSettings.getProperty(CodegenConstants.GENERATE_RECURSIVE_DEPENDENT_MODELS) != null ? Boolean.valueOf(GlobalSettings.getProperty(CodegenConstants.GENERATE_RECURSIVE_DEPENDENT_MODELS)) : getGeneratorPropertyDefaultSwitch(CodegenConstants.GENERATE_RECURSIVE_DEPENDENT_MODELS, false); - final Boolean globalWithXml = GlobalSettings.getProperty(CodegenConstants.WITH_XML) != null - ? Boolean.valueOf(GlobalSettings.getProperty(CodegenConstants.WITH_XML)) - : getGeneratorPropertyDefaultSwitch(CodegenConstants.WITH_XML, null); - if (!config.additionalProperties().containsKey(CodegenConstants.WITH_XML) && globalWithXml != null) { - config.additionalProperties().put(CodegenConstants.WITH_XML, globalWithXml); - } - // Additional properties added for tests to exclude references in project related files config.additionalProperties().put(CodegenConstants.GENERATE_API_TESTS, generateApiTests); config.additionalProperties().put(CodegenConstants.GENERATE_MODEL_TESTS, generateModelTests); diff --git a/modules/openapi-generator/src/main/resources/csharp/libraries/generichost/README.client.mustache b/modules/openapi-generator/src/main/resources/csharp/libraries/generichost/README.client.mustache index 896235fe70a7..371b9daa9211 100644 --- a/modules/openapi-generator/src/main/resources/csharp/libraries/generichost/README.client.mustache +++ b/modules/openapi-generator/src/main/resources/csharp/libraries/generichost/README.client.mustache @@ -200,7 +200,6 @@ Class | Method | HTTP request | Description - modelDocs: {{generateModelDocs}} - apiTests: {{generateApiTests}} - modelTests: {{generateModelTests}} -- withXml: {{withXml}} ## [OpenApi Generator Parameters](https://openapi-generator.tech/docs/generators/csharp-netcore) - allowUnicodeIdentifiers: {{allowUnicodeIdentifiers}} diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/spring/SpringCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/spring/SpringCodegenTest.java index 555dd49b585b..e1e3f3983c00 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/spring/SpringCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/spring/SpringCodegenTest.java @@ -2802,35 +2802,6 @@ private Map generateFromContract(String url, String library, Map files = generator - .opts( - new ClientOptInput() - .openAPI( - new OpenAPIParser() - .readLocation("src/test/resources/3_0/spring/issue_10278.yaml", null, null) - .getOpenAPI() - ).config(codegen) - ) - .generate() - .stream().collect(Collectors.toMap(File::getName, Function.identity())); - - JavaFileAssert.assertThat(files.get("Category.java")).fileContains("@JacksonXmlProperty"); - } - @Test public void testMappingSubtypesIssue13150() throws IOException { File output = Files.createTempDirectory("test").toFile().getCanonicalFile(); From 0028bd423f7f5ae80a9cb273d9d6256250370ca7 Mon Sep 17 00:00:00 2001 From: Philzen Date: Tue, 21 May 2024 18:10:37 +0200 Subject: [PATCH 08/15] Move WITH_XML constant out of system constants block Currently there is only a single reference to this value in the whole codebase (GoClientOptionsProvider). Maybe we should re-think how this file is organised (i.e. provide a clearer split / mapping / understanding what are system properties vs. global properties vs. configOptions and where to put them). --- .../main/java/org/openapitools/codegen/CodegenConstants.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenConstants.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenConstants.java index c9ea2be1a178..33f8e754f676 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenConstants.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenConstants.java @@ -33,7 +33,6 @@ public class CodegenConstants { public static final String API_TESTS = "apiTests"; public static final String API_DOCS = "apiDocs"; - public static final String WITH_XML = "withXml"; public static final String SKIP_FORM_MODEL = "skipFormModel"; /* /end System Properties */ @@ -438,6 +437,8 @@ public static enum ENUM_PROPERTY_NAMING_TYPE {camelCase, PascalCase, snake_case, public static final String FASTAPI_IMPLEMENTATION_PACKAGE = "fastapiImplementationPackage"; + public static final String WITH_XML = "withXml"; + public static final String WITH_GO_MOD = "withGoMod"; public static final String GENERATE_MARSHAL_JSON = "generateMarshalJSON"; From 4b50d3485e5882a9607d689e570b44c30f7f11de Mon Sep 17 00:00:00 2001 From: Philzen Date: Tue, 21 May 2024 18:13:00 +0200 Subject: [PATCH 09/15] Remove global option `withXml` from Maven plugin (Breaking change) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is a "soft" breaking change: Plugin will no longer execute if user have this option – which is good, b/c it never worked as expected. We may want to hint this in the 8.0 release notes. --- modules/openapi-generator-maven-plugin/README.md | 1 - .../java/org/openapitools/codegen/plugin/CodeGenMojo.java | 7 ------- 2 files changed, 8 deletions(-) diff --git a/modules/openapi-generator-maven-plugin/README.md b/modules/openapi-generator-maven-plugin/README.md index a185ac8b8d6f..a3d45bd2c386 100644 --- a/modules/openapi-generator-maven-plugin/README.md +++ b/modules/openapi-generator-maven-plugin/README.md @@ -107,7 +107,6 @@ mvn clean compile | `generateModelDocumentation` | `openapi.generator.maven.plugin.generateModelDocumentation` | generate the model documentation (`true` by default. Only available if `generateModels` is `true`) | `generateApiTests` | `openapi.generator.maven.plugin.generateApiTests` | generate the api tests (`true` by default. Only available if `generateApis` is `true`) | `generateApiDocumentation` | `openapi.generator.maven.plugin.generateApiDocumentation` | generate the api documentation (`true` by default. Only available if `generateApis` is `true`) -| `withXml` | `openapi.generator.maven.plugin.withXml` | Enable XML annotations for generated models and API (currently only works with Go and Java `language` using `library` templates that implement support for XML) | `skip` | `codegen.skip` | skip code generation (`false` by default. Can also be set globally through the `codegen.skip` property) | `skipIfSpecIsUnchanged` | `codegen.skipIfSpecIsUnchanged` | Skip the execution if the source file is older than the output folder (`false` by default. Can also be set globally through the `codegen.skipIfSpecIsUnchanged` property) | `addCompileSourceRoot` | `openapi.generator.maven.plugin.addCompileSourceRoot` | Add the output directory to the project as a source root, so that the generated java types are compiled and included in the project artifact (`true` by default). Mutually exclusive with `addTestCompileSourceRoot`. diff --git a/modules/openapi-generator-maven-plugin/src/main/java/org/openapitools/codegen/plugin/CodeGenMojo.java b/modules/openapi-generator-maven-plugin/src/main/java/org/openapitools/codegen/plugin/CodeGenMojo.java index c9f3a65c4f90..372b9aeb47e9 100644 --- a/modules/openapi-generator-maven-plugin/src/main/java/org/openapitools/codegen/plugin/CodeGenMojo.java +++ b/modules/openapi-generator-maven-plugin/src/main/java/org/openapitools/codegen/plugin/CodeGenMojo.java @@ -496,12 +496,6 @@ public class CodeGenMojo extends AbstractMojo { @Parameter(name = "generateApiDocumentation", property = "openapi.generator.maven.plugin.generateApiDocumentation") private Boolean generateApiDocumentation = true; - /** - * Generate XML annotations on models and API (only some generators implement it) - */ - @Parameter(name = "withXml", property = "openapi.generator.maven.plugin.withXml") - private Boolean withXml = false; - /** * Skip the execution. */ @@ -811,7 +805,6 @@ public void execute() throws MojoExecutionException { GlobalSettings.setProperty(CodegenConstants.MODEL_DOCS, generateModelDocumentation.toString()); GlobalSettings.setProperty(CodegenConstants.API_TESTS, generateApiTests.toString()); GlobalSettings.setProperty(CodegenConstants.API_DOCS, generateApiDocumentation.toString()); - GlobalSettings.setProperty(CodegenConstants.WITH_XML, withXml.toString()); GlobalSettings.setProperty(CodegenConstants.GENERATE_RECURSIVE_DEPENDENT_MODELS, generateRecursiveDependentModels.toString()); if (configOptions != null) { From 5898dfbd6eeb7b97a7dd23c26333fa20255dd90f Mon Sep 17 00:00:00 2001 From: Philzen Date: Tue, 21 May 2024 18:17:45 +0200 Subject: [PATCH 10/15] Remove global property `withXml` from Gradle plugin (Breaking change) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is a "soft" breaking change: Plugin will no longer execute if user have this option – which is good, b/c it never worked as expected. We may want to hint this in the 8.0 release notes, so they can add it to the `configOptions` map if required, or simply delete it --- modules/openapi-generator-gradle-plugin/README.adoc | 5 ----- .../gradle/plugin/OpenApiGeneratorPlugin.kt | 1 - .../extensions/OpenApiGeneratorGenerateExtension.kt | 7 ------- .../generator/gradle/plugin/tasks/GenerateTask.kt | 12 ------------ 4 files changed, 25 deletions(-) diff --git a/modules/openapi-generator-gradle-plugin/README.adoc b/modules/openapi-generator-gradle-plugin/README.adoc index 1dbc35ad84c2..804d41c4a693 100644 --- a/modules/openapi-generator-gradle-plugin/README.adoc +++ b/modules/openapi-generator-gradle-plugin/README.adoc @@ -389,11 +389,6 @@ apply plugin: 'org.openapi.generator' |true |Defines whether or not api-related _documentation_ files should be generated. -|withXml -|Boolean -|false -|A special-case setting which configures some generators with XML support. In some cases, this forces json OR xml, so the default here is false. - |configOptions |Map(String,String) |None diff --git a/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/OpenApiGeneratorPlugin.kt b/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/OpenApiGeneratorPlugin.kt index cf3552d38fb5..46d6cfcc6905 100644 --- a/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/OpenApiGeneratorPlugin.kt +++ b/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/OpenApiGeneratorPlugin.kt @@ -144,7 +144,6 @@ class OpenApiGeneratorPlugin : Plugin { generateModelDocumentation.set(generate.generateModelDocumentation) generateApiTests.set(generate.generateApiTests) generateApiDocumentation.set(generate.generateApiDocumentation) - withXml.set(generate.withXml) configOptions.set(generate.configOptions) logToStderr.set(generate.logToStderr) enablePostProcessFile.set(generate.enablePostProcessFile) diff --git a/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/extensions/OpenApiGeneratorGenerateExtension.kt b/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/extensions/OpenApiGeneratorGenerateExtension.kt index 236453a87094..b80ffbcdd69e 100644 --- a/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/extensions/OpenApiGeneratorGenerateExtension.kt +++ b/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/extensions/OpenApiGeneratorGenerateExtension.kt @@ -342,12 +342,6 @@ open class OpenApiGeneratorGenerateExtension(project: Project) { */ val generateApiDocumentation = project.objects.property() - /** - * A special-case setting which configures some generators with XML support. In some cases, - * this forces json OR xml, so the default here is false. - */ - val withXml = project.objects.property() - /** * To write all log messages (not just errors) to STDOUT */ @@ -408,7 +402,6 @@ open class OpenApiGeneratorGenerateExtension(project: Project) { generateModelDocumentation.set(true) generateApiTests.set(true) generateApiDocumentation.set(true) - withXml.set(false) configOptions.set(mapOf()) validateSpec.set(true) logToStderr.set(false) diff --git a/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/tasks/GenerateTask.kt b/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/tasks/GenerateTask.kt index d9473159a87e..193cdbed15d8 100644 --- a/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/tasks/GenerateTask.kt +++ b/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/tasks/GenerateTask.kt @@ -506,14 +506,6 @@ open class GenerateTask @Inject constructor(private val objectFactory: ObjectFac @Input val generateApiDocumentation = project.objects.property() - /** - * A special-case setting which configures some generators with XML support. In some cases, - * this forces json OR xml, so the default here is false. - */ - @Optional - @Input - val withXml = project.objects.property() - /** * To write all log messages (not just errors) to STDOUT */ @@ -680,10 +672,6 @@ open class GenerateTask @Inject constructor(private val objectFactory: ObjectFac GlobalSettings.setProperty(CodegenConstants.API_TESTS, generateApiTests.get().toString()) } - if (withXml.isPresent) { - GlobalSettings.setProperty(CodegenConstants.WITH_XML, withXml.get().toString()) - } - if (inputSpec.isPresent && remoteInputSpec.isPresent) { logger.warn("Both inputSpec and remoteInputSpec is specified. The remoteInputSpec will take priority over inputSpec.") } From 9c87489b45d81b455c61d45ee9c5bcb212f76601 Mon Sep 17 00:00:00 2001 From: Philzen Date: Tue, 21 May 2024 18:27:20 +0200 Subject: [PATCH 11/15] Update samples to reflect removed `withXml` property --- .../csharp/generichost/net8/AllOf/src/Org.OpenAPITools/README.md | 1 - .../csharp/generichost/net8/AnyOf/src/Org.OpenAPITools/README.md | 1 - .../net8/AnyOfNoCompare/src/Org.OpenAPITools/README.md | 1 - .../generichost/net8/FormModels/src/Org.OpenAPITools/README.md | 1 - .../net8/NullReferenceTypes/src/Org.OpenAPITools/README.md | 1 - .../csharp/generichost/net8/OneOf/src/Org.OpenAPITools/README.md | 1 - .../generichost/net8/Petstore/src/Org.OpenAPITools/README.md | 1 - .../net8/SourceGeneration/src/Org.OpenAPITools/README.md | 1 - .../net8/UseDateTimeForDate/src/Org.OpenAPITools/README.md | 1 - .../standard2.0/Petstore/src/Org.OpenAPITools/README.md | 1 - 10 files changed, 10 deletions(-) diff --git a/samples/client/petstore/csharp/generichost/net8/AllOf/src/Org.OpenAPITools/README.md b/samples/client/petstore/csharp/generichost/net8/AllOf/src/Org.OpenAPITools/README.md index 0fa6fa898767..59da939fb1a9 100644 --- a/samples/client/petstore/csharp/generichost/net8/AllOf/src/Org.OpenAPITools/README.md +++ b/samples/client/petstore/csharp/generichost/net8/AllOf/src/Org.OpenAPITools/README.md @@ -133,7 +133,6 @@ Endpoints do not require authorization. - modelDocs: true - apiTests: true - modelTests: true -- withXml: ## [OpenApi Generator Parameters](https://openapi-generator.tech/docs/generators/csharp-netcore) - allowUnicodeIdentifiers: diff --git a/samples/client/petstore/csharp/generichost/net8/AnyOf/src/Org.OpenAPITools/README.md b/samples/client/petstore/csharp/generichost/net8/AnyOf/src/Org.OpenAPITools/README.md index 08a6a9c3ee99..b48fe8892e85 100644 --- a/samples/client/petstore/csharp/generichost/net8/AnyOf/src/Org.OpenAPITools/README.md +++ b/samples/client/petstore/csharp/generichost/net8/AnyOf/src/Org.OpenAPITools/README.md @@ -133,7 +133,6 @@ Endpoints do not require authorization. - modelDocs: true - apiTests: true - modelTests: true -- withXml: ## [OpenApi Generator Parameters](https://openapi-generator.tech/docs/generators/csharp-netcore) - allowUnicodeIdentifiers: diff --git a/samples/client/petstore/csharp/generichost/net8/AnyOfNoCompare/src/Org.OpenAPITools/README.md b/samples/client/petstore/csharp/generichost/net8/AnyOfNoCompare/src/Org.OpenAPITools/README.md index 0ddadf651182..54d6b362cc1d 100644 --- a/samples/client/petstore/csharp/generichost/net8/AnyOfNoCompare/src/Org.OpenAPITools/README.md +++ b/samples/client/petstore/csharp/generichost/net8/AnyOfNoCompare/src/Org.OpenAPITools/README.md @@ -132,7 +132,6 @@ Endpoints do not require authorization. - modelDocs: true - apiTests: true - modelTests: true -- withXml: ## [OpenApi Generator Parameters](https://openapi-generator.tech/docs/generators/csharp-netcore) - allowUnicodeIdentifiers: diff --git a/samples/client/petstore/csharp/generichost/net8/FormModels/src/Org.OpenAPITools/README.md b/samples/client/petstore/csharp/generichost/net8/FormModels/src/Org.OpenAPITools/README.md index 643955d31593..74134aa2e1fd 100644 --- a/samples/client/petstore/csharp/generichost/net8/FormModels/src/Org.OpenAPITools/README.md +++ b/samples/client/petstore/csharp/generichost/net8/FormModels/src/Org.OpenAPITools/README.md @@ -179,7 +179,6 @@ Authentication schemes defined for the API: - modelDocs: true - apiTests: true - modelTests: true -- withXml: ## [OpenApi Generator Parameters](https://openapi-generator.tech/docs/generators/csharp-netcore) - allowUnicodeIdentifiers: diff --git a/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/src/Org.OpenAPITools/README.md b/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/src/Org.OpenAPITools/README.md index b262632e41fe..c80e0dac5c0e 100644 --- a/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/src/Org.OpenAPITools/README.md +++ b/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/src/Org.OpenAPITools/README.md @@ -179,7 +179,6 @@ Authentication schemes defined for the API: - modelDocs: true - apiTests: true - modelTests: true -- withXml: ## [OpenApi Generator Parameters](https://openapi-generator.tech/docs/generators/csharp-netcore) - allowUnicodeIdentifiers: diff --git a/samples/client/petstore/csharp/generichost/net8/OneOf/src/Org.OpenAPITools/README.md b/samples/client/petstore/csharp/generichost/net8/OneOf/src/Org.OpenAPITools/README.md index 08a6a9c3ee99..b48fe8892e85 100644 --- a/samples/client/petstore/csharp/generichost/net8/OneOf/src/Org.OpenAPITools/README.md +++ b/samples/client/petstore/csharp/generichost/net8/OneOf/src/Org.OpenAPITools/README.md @@ -133,7 +133,6 @@ Endpoints do not require authorization. - modelDocs: true - apiTests: true - modelTests: true -- withXml: ## [OpenApi Generator Parameters](https://openapi-generator.tech/docs/generators/csharp-netcore) - allowUnicodeIdentifiers: diff --git a/samples/client/petstore/csharp/generichost/net8/Petstore/src/Org.OpenAPITools/README.md b/samples/client/petstore/csharp/generichost/net8/Petstore/src/Org.OpenAPITools/README.md index 643955d31593..74134aa2e1fd 100644 --- a/samples/client/petstore/csharp/generichost/net8/Petstore/src/Org.OpenAPITools/README.md +++ b/samples/client/petstore/csharp/generichost/net8/Petstore/src/Org.OpenAPITools/README.md @@ -179,7 +179,6 @@ Authentication schemes defined for the API: - modelDocs: true - apiTests: true - modelTests: true -- withXml: ## [OpenApi Generator Parameters](https://openapi-generator.tech/docs/generators/csharp-netcore) - allowUnicodeIdentifiers: diff --git a/samples/client/petstore/csharp/generichost/net8/SourceGeneration/src/Org.OpenAPITools/README.md b/samples/client/petstore/csharp/generichost/net8/SourceGeneration/src/Org.OpenAPITools/README.md index b262632e41fe..c80e0dac5c0e 100644 --- a/samples/client/petstore/csharp/generichost/net8/SourceGeneration/src/Org.OpenAPITools/README.md +++ b/samples/client/petstore/csharp/generichost/net8/SourceGeneration/src/Org.OpenAPITools/README.md @@ -179,7 +179,6 @@ Authentication schemes defined for the API: - modelDocs: true - apiTests: true - modelTests: true -- withXml: ## [OpenApi Generator Parameters](https://openapi-generator.tech/docs/generators/csharp-netcore) - allowUnicodeIdentifiers: diff --git a/samples/client/petstore/csharp/generichost/net8/UseDateTimeForDate/src/Org.OpenAPITools/README.md b/samples/client/petstore/csharp/generichost/net8/UseDateTimeForDate/src/Org.OpenAPITools/README.md index 5b747266a9d5..f955a222e761 100644 --- a/samples/client/petstore/csharp/generichost/net8/UseDateTimeForDate/src/Org.OpenAPITools/README.md +++ b/samples/client/petstore/csharp/generichost/net8/UseDateTimeForDate/src/Org.OpenAPITools/README.md @@ -132,7 +132,6 @@ Endpoints do not require authorization. - modelDocs: true - apiTests: true - modelTests: true -- withXml: ## [OpenApi Generator Parameters](https://openapi-generator.tech/docs/generators/csharp-netcore) - allowUnicodeIdentifiers: diff --git a/samples/client/petstore/csharp/generichost/standard2.0/Petstore/src/Org.OpenAPITools/README.md b/samples/client/petstore/csharp/generichost/standard2.0/Petstore/src/Org.OpenAPITools/README.md index 2aac95d22ad0..06cd0def860b 100644 --- a/samples/client/petstore/csharp/generichost/standard2.0/Petstore/src/Org.OpenAPITools/README.md +++ b/samples/client/petstore/csharp/generichost/standard2.0/Petstore/src/Org.OpenAPITools/README.md @@ -179,7 +179,6 @@ Authentication schemes defined for the API: - modelDocs: true - apiTests: true - modelTests: true -- withXml: ## [OpenApi Generator Parameters](https://openapi-generator.tech/docs/generators/csharp-netcore) - allowUnicodeIdentifiers: From cdf50c99edad27180bda37d825e45df481e54a48 Mon Sep 17 00:00:00 2001 From: Philzen Date: Tue, 21 May 2024 18:29:52 +0200 Subject: [PATCH 12/15] Move `withXml` option into ConfigOptions for Java Microprofile sample --- .../java-microprofile-rest-client-3.0-jackson-with-xml.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/configs/java-microprofile-rest-client-3.0-jackson-with-xml.yaml b/bin/configs/java-microprofile-rest-client-3.0-jackson-with-xml.yaml index 8dc08e4a4bb2..40500d64508e 100644 --- a/bin/configs/java-microprofile-rest-client-3.0-jackson-with-xml.yaml +++ b/bin/configs/java-microprofile-rest-client-3.0-jackson-with-xml.yaml @@ -3,10 +3,10 @@ outputDir: samples/client/petstore/java/microprofile-rest-client-3.0-jackson-wit library: microprofile inputSpec: modules/openapi-generator/src/test/resources/3_0/petstore.yaml templateDir: modules/openapi-generator/src/main/resources/Java -withXml: true additionalProperties: serializationLibrary: jackson artifactId: microprofile-rest-client-3-jackson-with-xml configKey: petstore microprofileRestClientVersion: "3.0" hideGenerationTimestamp: true + withXml: true From 057f21023ea129a7a515f37f30ed14cb646477e4 Mon Sep 17 00:00:00 2001 From: Philzen Date: Sun, 26 May 2024 22:09:49 +0200 Subject: [PATCH 13/15] Remove unused local vars and parameters --- .../java/spring/SpringCodegenTest.java | 34 ++++++------------- 1 file changed, 11 insertions(+), 23 deletions(-) diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/spring/SpringCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/spring/SpringCodegenTest.java index e1e3f3983c00..fe753cf8d9b4 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/spring/SpringCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/spring/SpringCodegenTest.java @@ -1251,26 +1251,26 @@ public void testGenerationOfClientPropertiesConfigurationForOAuth() throws Excep } @Test - public void useBeanValidationTruePerformBeanValidationFalseJava8TrueForFormatEmail() throws IOException { - beanValidationForFormatEmail(true, false, true, "@javax.validation.constraints.Email", "@org.hibernate.validator.constraints.Email"); + public void useBeanValidationTruePerformBeanValidationFalseForFormatEmail() throws IOException { + beanValidationForFormatEmail(true, false, "@javax.validation.constraints.Email", "@org.hibernate.validator.constraints.Email"); } @Test - public void useBeanValidationTruePerformBeanValidationTrueJava8FalseForFormatEmail() throws IOException { - beanValidationForFormatEmail(true, true, false, "@javax.validation.constraints.Email", "@org.hibernate.validator.constraints.Email"); + public void useBeanValidationTruePerformBeanValidationTrueForFormatEmail() throws IOException { + beanValidationForFormatEmail(true, true, "@javax.validation.constraints.Email", "@org.hibernate.validator.constraints.Email"); } @Test - public void useBeanValidationTruePerformBeanValidationFalseJava8TrueJakartaeeTrueForFormatEmail() throws IOException { - beanValidationForFormatEmail(true, false, true, true,"@jakarta.validation.constraints.Email", "@javax.validation.constraints.Email"); + public void useBeanValidationTruePerformBeanValidationFalseJakartaeeTrueForFormatEmail() throws IOException { + beanValidationForFormatEmail(true, false, true,"@jakarta.validation.constraints.Email", "@javax.validation.constraints.Email"); } // note: java8 option/mustache tag has been removed and default to true - private void beanValidationForFormatEmail(boolean useBeanValidation, boolean performBeanValidation, boolean java8, String contains, String notContains) throws IOException { - this.beanValidationForFormatEmail(useBeanValidation, performBeanValidation, java8, false, contains, notContains); + private void beanValidationForFormatEmail(boolean useBeanValidation, boolean performBeanValidation, String contains, String notContains) throws IOException { + this.beanValidationForFormatEmail(useBeanValidation, performBeanValidation, false, contains, notContains); } - private void beanValidationForFormatEmail(boolean useBeanValidation, boolean performBeanValidation, boolean java8, boolean useJakarta, String contains, String notContains) throws IOException { + private void beanValidationForFormatEmail(boolean useBeanValidation, boolean performBeanValidation, boolean useJakarta, String contains, String notContains) throws IOException { File output = Files.createTempDirectory("test").toFile().getCanonicalFile(); output.deleteOnExit(); String outputPath = output.getAbsolutePath().replace('\\', '/'); @@ -1304,11 +1304,6 @@ private void beanValidationForFormatEmail(boolean useBeanValidation, boolean per assertFileNotContains(Paths.get(outputPath + "/src/main/java/org/openapitools/model/PersonWithEmail.java"), notContains); } - @Test - public void useBeanValidationTruePerformBeanValidationTrueJava8TrueForFormatEmail() throws IOException { - beanValidationForFormatEmail(true, true, true, "@javax.validation.constraints.Email", "@org.hibernate.validator.constraints.Email"); - } - @Test public void reactiveMapTypeRequestMonoTest() throws IOException { File output = Files.createTempDirectory("test").toFile().getCanonicalFile(); @@ -2437,7 +2432,6 @@ public void requiredFieldShouldIncludeNotNullAnnotation_issue13365() throws IOEx codegen.additionalProperties().put(CodegenConstants.ENUM_PROPERTY_NAMING, "PascalCase"); codegen.additionalProperties().put(SpringCodegen.USE_TAGS, "true"); - DefaultGenerator generator = new DefaultGenerator(); Map files = generateFiles(codegen, "src/test/resources/bugs/issue_13365.yml"); //Assert that NotNull annotation exists alone with no other BeanValidation annotations @@ -2468,7 +2462,6 @@ public void requiredFieldShouldIncludeNotNullAnnotationJakarta_issue13365_issue1 codegen.additionalProperties().put(CodegenConstants.ENUM_PROPERTY_NAMING, "PascalCase"); codegen.additionalProperties().put(SpringCodegen.USE_TAGS, "true"); - DefaultGenerator generator = new DefaultGenerator(); Map files = generateFiles(codegen, "src/test/resources/bugs/issue_13365.yml"); //Assert that NotNull annotation exists alone with no other BeanValidation annotations @@ -2616,7 +2609,6 @@ public void shouldNotUseEqualsNullableForArrayWhenNotSetInConfig_issue13385() th .bodyContainsLines("return Arrays.equals(this.picture, testObject.picture);"); } - @Test public void useBeanValidationGenerateAnnotationsForRequestBody_issue13932() throws IOException { File output = Files.createTempDirectory("test").toFile().getCanonicalFile(); @@ -3253,7 +3245,6 @@ public void testEnumCaseSensitive_issue8084() throws IOException { .bodyContainsLines("if (b.value.equals(value)) {"); } - @Test public void testHasOperationExtraAnnotation_issue15822() throws IOException { File output = Files.createTempDirectory("test").toFile().getCanonicalFile(); @@ -3420,8 +3411,6 @@ public void doCallFluentParentSettersFromChildModel() throws IOException { .assertNoMethod("setAlias"); } - - @Test public void testModelsWithNoneOptionalAndJsonNullable() throws IOException { File output = Files.createTempDirectory("test").toFile().getCanonicalFile(); @@ -4662,17 +4651,16 @@ public void generateAllArgsConstructor() throws IOException { @Test public void allOfDuplicatedProperties() throws IOException { - final Map additionalProperties = new HashMap<>(); - Map output = generateFromContract( "src/test/resources/3_0/allOfDuplicatedProperties.yaml", SPRING_BOOT, Map.of(GENERATE_CONSTRUCTOR_WITH_ALL_ARGS, true, INTERFACE_ONLY, "true") ); + JavaFileAssert.assertThat(output.get("ModelC.java")) .assertConstructor("String", "Integer", "Integer", "String", "String"); - } + @Test public void testLombokAnnotations() throws IOException { final Map additionalProperties = new HashMap<>(); From 78adde811145e00467a544afc38a5a7f31a63958 Mon Sep 17 00:00:00 2001 From: Philzen Date: Sun, 26 May 2024 22:24:31 +0200 Subject: [PATCH 14/15] Avoid repetition using fluent assertions --- .../java/spring/SpringCodegenTest.java | 59 ++++++++++--------- 1 file changed, 30 insertions(+), 29 deletions(-) diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/spring/SpringCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/spring/SpringCodegenTest.java index fe753cf8d9b4..600c884b1094 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/spring/SpringCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/spring/SpringCodegenTest.java @@ -414,7 +414,7 @@ public void interfaceDefaultImplDisableWithResponseWrapper() { codegen.processOpts(); // jdk8 tag has been removed - Assert.assertEquals(codegen.additionalProperties().get("jdk8"), null); + Assert.assertNull(codegen.additionalProperties().get("jdk8")); } @Test(expectedExceptions = IllegalArgumentException.class) @@ -581,7 +581,7 @@ public void testAdditionalPropertiesPutForConfigValues() throws Exception { codegen.preprocessOpenAPI(openAPI); Assert.assertEquals(codegen.additionalProperties().get(CodegenConstants.HIDE_GENERATION_TIMESTAMP), Boolean.TRUE); - Assert.assertEquals(codegen.isHideGenerationTimestamp(), true); + Assert.assertTrue(codegen.isHideGenerationTimestamp()); Assert.assertEquals(codegen.modelPackage(), "xyz.yyyyy.mmmmm.model"); Assert.assertEquals(codegen.additionalProperties().get(CodegenConstants.MODEL_PACKAGE), "xyz.yyyyy.mmmmm.model"); Assert.assertEquals(codegen.apiPackage(), "xyz.yyyyy.aaaaa.api"); @@ -663,13 +663,11 @@ public void testDoGenerateRequestBodyRequiredAttribute_3134_Regression() throws generator.opts(input).generate(); JavaFileAssert.assertThat(Paths.get(outputPath + "/src/main/java/org/openapitools/api/ExampleApi.java")) + .fileContains("@RequestBody(required = false") .assertMethod("exampleApiPost", "ExampleApiPostRequest") .hasParameter("exampleApiPostRequest") .assertParameterAnnotations() .containsWithNameAndAttributes("RequestBody", ImmutableMap.of("required", "false")); - - assertFileContains(Paths.get(outputPath + "/src/main/java/org/openapitools/api/ExampleApi.java"), - "@RequestBody(required = false"); } @Test @@ -683,7 +681,7 @@ public void testInitialConfigValues() throws Exception { codegen.preprocessOpenAPI(openAPI); Assert.assertEquals(codegen.additionalProperties().get(CodegenConstants.HIDE_GENERATION_TIMESTAMP), Boolean.FALSE); - Assert.assertEquals(codegen.isHideGenerationTimestamp(), false); + Assert.assertFalse(codegen.isHideGenerationTimestamp()); Assert.assertEquals(codegen.modelPackage(), "org.openapitools.model"); Assert.assertEquals(codegen.additionalProperties().get(CodegenConstants.MODEL_PACKAGE), "org.openapitools.model"); Assert.assertEquals(codegen.apiPackage(), "org.openapitools.api"); @@ -1183,7 +1181,7 @@ public void testSettersForConfigValues() throws Exception { codegen.processOpts(); Assert.assertEquals(codegen.additionalProperties().get(CodegenConstants.HIDE_GENERATION_TIMESTAMP), Boolean.TRUE); - Assert.assertEquals(codegen.isHideGenerationTimestamp(), true); + Assert.assertTrue(codegen.isHideGenerationTimestamp()); Assert.assertEquals(codegen.modelPackage(), "xx.yyyyyyyy.model"); Assert.assertEquals(codegen.additionalProperties().get(CodegenConstants.MODEL_PACKAGE), "xx.yyyyyyyy.model"); Assert.assertEquals(codegen.apiPackage(), "xx.yyyyyyyy.api"); @@ -1194,7 +1192,7 @@ public void testSettersForConfigValues() throws Exception { Assert.assertEquals(codegen.additionalProperties().get(SpringCodegen.BASE_PACKAGE), "xx.yyyyyyyy.base"); Assert.assertEquals(codegen.getConfigPackage(), "xx.yyyyyyyy.config"); Assert.assertEquals(codegen.additionalProperties().get(SpringCodegen.CONFIG_PACKAGE), "xx.yyyyyyyy.config"); - Assert.assertEquals(codegen.isUnhandledException(), true); + Assert.assertTrue(codegen.isUnhandledException()); Assert.assertEquals(codegen.additionalProperties().get(SpringCodegen.UNHANDLED_EXCEPTION_HANDLING), true); } @@ -1300,8 +1298,9 @@ private void beanValidationForFormatEmail(boolean useBeanValidation, boolean per JavaFileAssert javaFileAssert = JavaFileAssert.assertThat(files.get("PersonWithEmail.java")); if (useBeanValidation) javaFileAssert.hasImports((useJakarta? "jakarta" : "javax") + ".validation.constraints"); if (performBeanValidation) javaFileAssert.hasImports("org.hibernate.validator.constraints"); - assertFileContains(Paths.get(outputPath + "/src/main/java/org/openapitools/model/PersonWithEmail.java"), contains); - assertFileNotContains(Paths.get(outputPath + "/src/main/java/org/openapitools/model/PersonWithEmail.java"), notContains); + JavaFileAssert.assertThat(Paths.get(outputPath + "/src/main/java/org/openapitools/model/PersonWithEmail.java")) + .fileContains(contains) + .fileDoesNotContains(notContains); } @Test @@ -1330,10 +1329,12 @@ public void reactiveMapTypeRequestMonoTest() throws IOException { generator.opts(input).generate(); - assertFileContains(Paths.get(outputPath + "/src/main/java/org/openapitools/api/SomeApi.java"), "Mono>"); - assertFileContains(Paths.get(outputPath + "/src/main/java/org/openapitools/api/SomeApiDelegate.java"), "Mono>"); - assertFileNotContains(Paths.get(outputPath + "/src/main/java/org/openapitools/api/SomeApi.java"), "Mono"); - assertFileNotContains(Paths.get(outputPath + "/src/main/java/org/openapitools/api/SomeApiDelegate.java"), "Mono"); + JavaFileAssert.assertThat(Paths.get(outputPath + "/src/main/java/org/openapitools/api/SomeApi.java")) + .fileContains("Mono>") + .fileDoesNotContains("Mono"); + JavaFileAssert.assertThat(Paths.get(outputPath + "/src/main/java/org/openapitools/api/SomeApiDelegate.java")) + .fileContains("Mono>") + .fileDoesNotContains("Mono"); } @Test @@ -1515,14 +1516,14 @@ public void doGeneratePathVariableForSimpleParam() throws IOException { generator.opts(input).generate(); - assertFileContains(Paths.get(outputPath + "/src/main/java/org/openapitools/api/ZebrasApi.java"), "allowableValues = \"0, 1\""); - assertFileContains(Paths.get(outputPath + "/src/main/java/org/openapitools/api/ZebrasApi.java"), "@PathVariable"); - assertFileContains(Paths.get(outputPath + "/src/main/java/org/openapitools/api/BearsApi.java"), "allowableValues = \"sleeping, awake\""); - assertFileContains(Paths.get(outputPath + "/src/main/java/org/openapitools/api/BearsApi.java"), "@PathVariable"); - assertFileContains(Paths.get(outputPath + "/src/main/java/org/openapitools/api/CamelsApi.java"), "allowableValues = \"sleeping, awake\""); - assertFileContains(Paths.get(outputPath + "/src/main/java/org/openapitools/api/CamelsApi.java"), "@PathVariable"); - assertFileContains(Paths.get(outputPath + "/src/main/java/org/openapitools/api/GiraffesApi.java"), "allowableValues = \"0, 1\""); - assertFileContains(Paths.get(outputPath + "/src/main/java/org/openapitools/api/GiraffesApi.java"), "@PathVariable"); + JavaFileAssert.assertThat(Paths.get(outputPath + "/src/main/java/org/openapitools/api/ZebrasApi.java")) + .fileContains( "allowableValues = \"0, 1\"", "@PathVariable"); + JavaFileAssert.assertThat(Paths.get(outputPath + "/src/main/java/org/openapitools/api/BearsApi.java")) + .fileContains( "allowableValues = \"sleeping, awake\"", "@PathVariable"); + JavaFileAssert.assertThat(Paths.get(outputPath + "/src/main/java/org/openapitools/api/CamelsApi.java")) + .fileContains( "allowableValues = \"sleeping, awake\"", "@PathVariable"); + JavaFileAssert.assertThat(Paths.get(outputPath + "/src/main/java/org/openapitools/api/GiraffesApi.java")) + .fileContains( "allowableValues = \"0, 1\"", "@PathVariable"); } @Test @@ -1636,8 +1637,8 @@ public void shouldAddNotNullOnRequiredAttributes() throws IOException { generator.opts(input).generate(); - assertFileContains(Paths.get(outputPath + "/src/main/java/org/openapitools/model/Dummy.java"), "status"); - assertFileContains(Paths.get(outputPath + "/src/main/java/org/openapitools/model/Dummy.java"), "@NotNull"); + JavaFileAssert.assertThat(Paths.get(outputPath + "/src/main/java/org/openapitools/model/Dummy.java")) + .fileContains( "status", "@NotNull"); Files.readAllLines(Paths.get(outputPath + "/src/main/java/org/openapitools/model/Dummy.java")).forEach(System.out::println); } @@ -1665,10 +1666,10 @@ public void shouldNotAddNotNullOnReadOnlyAttributes() throws IOException { generator.opts(input).generate(); - assertFileContains(Paths.get(outputPath + "/src/main/java/org/openapitools/model/Dummy.java"), "status"); - assertFileNotContains(Paths.get(outputPath + "/src/main/java/org/openapitools/model/Dummy.java"), "@NotNull"); + JavaFileAssert.assertThat(Paths.get(outputPath + "/src/main/java/org/openapitools/model/Dummy.java")) + .fileContains( "status") + .fileDoesNotContains("@NotNull"); Files.readAllLines(Paths.get(outputPath + "/src/main/java/org/openapitools/model/Dummy.java")).forEach(System.out::println); - } @Test @@ -1740,8 +1741,8 @@ public void testOneOfAndAllOf() throws IOException { assertFileContains(Paths.get(outputPath + "/src/main/java/org/openapitools/model/FooRef.java"), "public class FooRef extends EntityRef implements FooRefOrValue"); assertFileContains(Paths.get(outputPath + "/src/main/java/org/openapitools/model/FooRefOrValue.java"), "public interface FooRefOrValue"); // previous bugs - assertFileNotContains(Paths.get(outputPath + "/src/main/java/org/openapitools/model/BarRef.java"), "atTypesuper.hashCode"); - assertFileNotContains(Paths.get(outputPath + "/src/main/java/org/openapitools/model/BarRef.java"), "private String atBaseType"); + JavaFileAssert.assertThat(Paths.get(outputPath + "/src/main/java/org/openapitools/model/BarRef.java")) + .fileDoesNotContains( "atTypesuper.hashCode", "private String atBaseType"); // imports for inherited properties assertFileContains(Paths.get(outputPath + "/src/main/java/org/openapitools/model/PizzaSpeziale.java"), "import java.math.BigDecimal"); } From e04c829bcb2daca50445194e0bfb8a17d1dc038d Mon Sep 17 00:00:00 2001 From: Philzen Date: Sun, 26 May 2024 22:25:16 +0200 Subject: [PATCH 15/15] Remove extraneous debug output --- .../openapitools/codegen/java/spring/SpringCodegenTest.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/spring/SpringCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/spring/SpringCodegenTest.java index 600c884b1094..48fef733c943 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/spring/SpringCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/spring/SpringCodegenTest.java @@ -1639,8 +1639,6 @@ public void shouldAddNotNullOnRequiredAttributes() throws IOException { JavaFileAssert.assertThat(Paths.get(outputPath + "/src/main/java/org/openapitools/model/Dummy.java")) .fileContains( "status", "@NotNull"); - Files.readAllLines(Paths.get(outputPath + "/src/main/java/org/openapitools/model/Dummy.java")).forEach(System.out::println); - } @Test @@ -1669,7 +1667,6 @@ public void shouldNotAddNotNullOnReadOnlyAttributes() throws IOException { JavaFileAssert.assertThat(Paths.get(outputPath + "/src/main/java/org/openapitools/model/Dummy.java")) .fileContains( "status") .fileDoesNotContains("@NotNull"); - Files.readAllLines(Paths.get(outputPath + "/src/main/java/org/openapitools/model/Dummy.java")).forEach(System.out::println); } @Test