generated from micronaut-projects/micronaut-project-template
-
Notifications
You must be signed in to change notification settings - Fork 6
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Extend BeanValidationContext to ExecutableValidator (#320)
add test to override interceptors and customize includes
- Loading branch information
1 parent
a8fe07d
commit f9d1f9e
Showing
4 changed files
with
162 additions
and
7 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
77 changes: 77 additions & 0 deletions
77
...c/test/groovy/io/micronaut/validation/validator/replacement/ReplaceInterceptorSpec.groovy
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,77 @@ | ||
package io.micronaut.validation.validator.replacement | ||
|
||
import io.micronaut.aop.InterceptorBean | ||
import io.micronaut.aop.MethodInvocationContext | ||
import io.micronaut.context.annotation.Replaces | ||
import io.micronaut.core.beans.BeanProperty | ||
import io.micronaut.core.convert.ConversionService | ||
import io.micronaut.test.annotation.MockBean | ||
import io.micronaut.test.extensions.spock.annotation.MicronautTest | ||
import io.micronaut.validation.Pojo | ||
import io.micronaut.validation.Validated | ||
import io.micronaut.validation.ValidatingInterceptor | ||
import io.micronaut.validation.validator.BeanValidationContext | ||
import io.micronaut.validation.validator.Validator | ||
import jakarta.inject.Inject | ||
import jakarta.inject.Singleton | ||
import jakarta.validation.ConstraintViolation | ||
import jakarta.validation.ConstraintViolationException | ||
import jakarta.validation.Valid | ||
import jakarta.validation.ValidatorFactory | ||
import spock.lang.Specification | ||
|
||
@MicronautTest | ||
class ReplaceInterceptorSpec extends Specification { | ||
|
||
@Inject TestService testService | ||
|
||
void "test replacement interceptor"() { | ||
when: | ||
testService.validatePojo(new Pojo(email: "junk", name: "")) | ||
|
||
then: | ||
def e = thrown(ConstraintViolationException) | ||
e.message == 'validatePojo.pojo.email: Email should be valid' | ||
} | ||
|
||
@MockBean(ValidatingInterceptor) | ||
@InterceptorBean(Validated) | ||
static class MyInterceptor extends ValidatingInterceptor { | ||
Validator micronautValidator | ||
MyInterceptor(Validator micronautValidator, ValidatorFactory validatorFactory, ConversionService conversionService) { | ||
super(micronautValidator, validatorFactory, conversionService) | ||
this.micronautValidator = micronautValidator; | ||
} | ||
|
||
@Override | ||
Object intercept(MethodInvocationContext<Object, Object> context) { | ||
if (context.parameterValues[0] instanceof Pojo) { | ||
def constraintViolations = micronautValidator.forExecutables() | ||
.validateParameters( | ||
context.parameterValues[0], | ||
context.executableMethod, | ||
context.parameterValues, | ||
new BeanValidationContext() { | ||
boolean isPropertyValidated(Object object, BeanProperty<Object, Object> property) { | ||
return property.name == 'email' | ||
} | ||
} | ||
) | ||
if (constraintViolations) { | ||
throw new ConstraintViolationException(constraintViolations) | ||
} | ||
return context.proceed() | ||
} else { | ||
return super.intercept(context) | ||
} | ||
} | ||
} | ||
|
||
@Singleton | ||
@Validated | ||
static class TestService { | ||
void validatePojo(@Valid Pojo pojo) { | ||
println(pojo) | ||
} | ||
} | ||
} |