[SPRING] resolved ambiguous beanValidation Email annotation imports; fix #13379 (#13962)

* resolved ambiguous beanValidation Email annotation imports; fix #13379

* [Java][Spring] fix email import

---------

Co-authored-by: Oleh Kurpiak <oleh.kurpiak@gmail.com>
This commit is contained in:
Mintas 2023-03-19 15:18:11 +03:00 committed by GitHub
parent 6e649af9a7
commit 3ea346e1bb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 24 additions and 7 deletions

View File

@ -11,8 +11,10 @@ minLength not set, maxLength set
}}{{#minItems}}{{^maxItems}}@Size(min = {{minItems}}) {{/maxItems}}{{/minItems}}{{! }}{{#minItems}}{{^maxItems}}@Size(min = {{minItems}}) {{/maxItems}}{{/minItems}}{{!
@Size: minItems not set && maxItems set @Size: minItems not set && maxItems set
}}{{^minItems}}{{#maxItems}}@Size(max = {{.}}) {{/maxItems}}{{/minItems}}{{! }}{{^minItems}}{{#maxItems}}@Size(max = {{.}}) {{/maxItems}}{{/minItems}}{{!
@Email: useBeanValidation set && isEmail set @Email: useBeanValidation
}}{{#useBeanValidation}}{{#isEmail}}@Email{{/isEmail}}{{/useBeanValidation}}{{! }}{{#isEmail}}{{#useBeanValidation}}@{{javaxPackage}}.validation.constraints.Email{{/useBeanValidation}}{{!
@Email: performBeanValidation exclusive
}}{{^useBeanValidation}}{{#performBeanValidation}}@org.hibernate.validator.constraints.Email{{/performBeanValidation}}{{/useBeanValidation}}{{/isEmail}}{{!
check for integer or long / all others=decimal type with @Decimal* check for integer or long / all others=decimal type with @Decimal*
isInteger set isInteger set
}}{{#isInteger}}{{#minimum}}@Min({{.}}) {{/minimum}}{{#maximum}}@Max({{.}}) {{/maximum}}{{/isInteger}}{{! }}{{#isInteger}}{{#minimum}}@Min({{.}}) {{/minimum}}{{#maximum}}@Max({{.}}) {{/maximum}}{{/isInteger}}{{!

View File

@ -821,16 +821,25 @@ public class SpringCodegenTest {
@Test @Test
public void useBeanValidationTruePerformBeanValidationFalseJava8TrueForFormatEmail() throws IOException { public void useBeanValidationTruePerformBeanValidationFalseJava8TrueForFormatEmail() throws IOException {
beanValidationForFormatEmail(true, false, true, "@Email", "@org.hibernate.validator.constraints.Email"); beanValidationForFormatEmail(true, false, true, "@javax.validation.constraints.Email", "@org.hibernate.validator.constraints.Email");
} }
@Test @Test
public void useBeanValidationTruePerformBeanValidationTrueJava8FalseForFormatEmail() throws IOException { public void useBeanValidationTruePerformBeanValidationTrueJava8FalseForFormatEmail() throws IOException {
beanValidationForFormatEmail(true, true, false, "@Email", "@org.hibernate.validator.constraints.Email"); beanValidationForFormatEmail(true, true, false, "@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");
} }
// note: java8 option/mustache tag has been removed and default to true // 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 { 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, boolean java8, boolean useJakarta, String contains, String notContains) throws IOException {
File output = Files.createTempDirectory("test").toFile().getCanonicalFile(); File output = Files.createTempDirectory("test").toFile().getCanonicalFile();
output.deleteOnExit(); output.deleteOnExit();
String outputPath = output.getAbsolutePath().replace('\\', '/'); String outputPath = output.getAbsolutePath().replace('\\', '/');
@ -842,6 +851,7 @@ public class SpringCodegenTest {
codegen.setOutputDir(output.getAbsolutePath()); codegen.setOutputDir(output.getAbsolutePath());
codegen.setUseBeanValidation(useBeanValidation); codegen.setUseBeanValidation(useBeanValidation);
codegen.setPerformBeanValidation(performBeanValidation); codegen.setPerformBeanValidation(performBeanValidation);
codegen.setUseSpringBoot3(useJakarta);
ClientOptInput input = new ClientOptInput(); ClientOptInput input = new ClientOptInput();
input.openAPI(openAPI); input.openAPI(openAPI);
@ -855,15 +865,20 @@ public class SpringCodegenTest {
generator.setGeneratorPropertyDefault(CodegenConstants.APIS, "false"); generator.setGeneratorPropertyDefault(CodegenConstants.APIS, "false");
generator.setGeneratorPropertyDefault(CodegenConstants.SUPPORTING_FILES, "false"); generator.setGeneratorPropertyDefault(CodegenConstants.SUPPORTING_FILES, "false");
List<File> files = generator.opts(input).generate(); Map<String, File> files = generator.opts(input).generate().stream()
.collect(Collectors.toMap(File::getName, Function.identity()));
JavaFileAssert javaFileAssert = JavaFileAssert.assertThat(files.get("PersonWithEmail.java"))
.printFileContent();
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); 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); assertFileNotContains(Paths.get(outputPath + "/src/main/java/org/openapitools/model/PersonWithEmail.java"), notContains);
} }
@Test @Test
public void useBeanValidationTruePerformBeanValidationTrueJava8TrueForFormatEmail() throws IOException { public void useBeanValidationTruePerformBeanValidationTrueJava8TrueForFormatEmail() throws IOException {
beanValidationForFormatEmail(true, true, true, "@Email", "@org.hibernate.validator.constraints.Email"); beanValidationForFormatEmail(true, true, true, "@javax.validation.constraints.Email", "@org.hibernate.validator.constraints.Email");
} }
@Test @Test
@ -1934,7 +1949,7 @@ public class SpringCodegenTest {
JavaFileAssert javaFileAssert = JavaFileAssert.assertThat(files.get("Person.java")) JavaFileAssert javaFileAssert = JavaFileAssert.assertThat(files.get("Person.java"))
.printFileContent(); .printFileContent();
javaFileAssert.assertMethod("getName").assertMethodAnnotations() javaFileAssert.assertMethod("getName").assertMethodAnnotations()
.containsWithName("NotNull").containsWithName("Size").containsWithName("Email"); .containsWithName("NotNull").containsWithName("Size").containsWithName("javax.validation.constraints.Email");
javaFileAssert javaFileAssert
.hasNoImports("javax.validation.constraints.NotNull") .hasNoImports("javax.validation.constraints.NotNull")
.hasImports("javax.validation.constraints"); .hasImports("javax.validation.constraints");