[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}}{{!
@Size: minItems not set && maxItems set
}}{{^minItems}}{{#maxItems}}@Size(max = {{.}}) {{/maxItems}}{{/minItems}}{{!
@Email: useBeanValidation set && isEmail set
}}{{#useBeanValidation}}{{#isEmail}}@Email{{/isEmail}}{{/useBeanValidation}}{{!
@Email: 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*
isInteger set
}}{{#isInteger}}{{#minimum}}@Min({{.}}) {{/minimum}}{{#maximum}}@Max({{.}}) {{/maximum}}{{/isInteger}}{{!

View File

@ -821,16 +821,25 @@ public class SpringCodegenTest {
@Test
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
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
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();
output.deleteOnExit();
String outputPath = output.getAbsolutePath().replace('\\', '/');
@ -842,6 +851,7 @@ public class SpringCodegenTest {
codegen.setOutputDir(output.getAbsolutePath());
codegen.setUseBeanValidation(useBeanValidation);
codegen.setPerformBeanValidation(performBeanValidation);
codegen.setUseSpringBoot3(useJakarta);
ClientOptInput input = new ClientOptInput();
input.openAPI(openAPI);
@ -855,15 +865,20 @@ public class SpringCodegenTest {
generator.setGeneratorPropertyDefault(CodegenConstants.APIS, "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);
assertFileNotContains(Paths.get(outputPath + "/src/main/java/org/openapitools/model/PersonWithEmail.java"), notContains);
}
@Test
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
@ -1934,7 +1949,7 @@ public class SpringCodegenTest {
JavaFileAssert javaFileAssert = JavaFileAssert.assertThat(files.get("Person.java"))
.printFileContent();
javaFileAssert.assertMethod("getName").assertMethodAnnotations()
.containsWithName("NotNull").containsWithName("Size").containsWithName("Email");
.containsWithName("NotNull").containsWithName("Size").containsWithName("javax.validation.constraints.Email");
javaFileAssert
.hasNoImports("javax.validation.constraints.NotNull")
.hasImports("javax.validation.constraints");