package org.hibernate.validator.referenceguide.chapter03.cascaded;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.util.Set;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.ValidatorFactory;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.validation.executable.ExecutableValidator;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class GarageTest {
private static ExecutableValidator executableValidator;
@BeforeClass
public static void setUpValidator() {
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
executableValidator = factory.getValidator().forExecutables();
}
@Test
public void cascadedMethodParameterValidation() throws Exception {
//cascaded method parameter
Garage object = new Garage( "Bob's Auto Shop" );
Method method = Garage.class.getMethod( "checkCar", Car.class );
Object[] parameterValues = { new Car( "Morris", "A" ) };
Set<ConstraintViolation<Garage>> violations = executableValidator.validateParameters(
object,
method,
parameterValues
);
//Car#licensePlate is too short
assertEquals( 1, violations.size() );
ConstraintViolation<Garage> violation = violations.iterator().next();
assertEquals(
Size.class,
violation.getConstraintDescriptor().getAnnotation().annotationType()
);
}
@Test
public void cascadedConstructorReturnValueValidation() throws Exception {
//cascaded constructor return value
Constructor<Garage> constructor = Garage.class.getConstructor( String.class );
Garage createdObject = new Garage( null );
Set<ConstraintViolation<Garage>> violations = executableValidator.validateConstructorReturnValue(
constructor,
createdObject
);
//Garage#name is null
assertEquals( 1, violations.size() );
ConstraintViolation<Garage> violation = violations.iterator().next();
assertEquals(
NotNull.class,
violation.getConstraintDescriptor().getAnnotation().annotationType()
);
}
}