package org.hibernate.validator.referenceguide.chapter06.crossparameter;
import java.lang.reflect.Method;
import java.util.Calendar;
import java.util.Date;
import java.util.Set;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.ValidatorFactory;
import javax.validation.constraints.NotNull;
import javax.validation.executable.ExecutableValidator;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class ConsistentDateParametersTest {
private static ExecutableValidator executableValidator;
@BeforeClass
public static void setUpValidator() {
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
executableValidator = factory.getValidator().forExecutables();
}
@Test
public void testConsistentDateParametersConstraint() throws Exception {
CalendarService object = new CalendarService();
Method method = CalendarService.class.getMethod( "createCalendarEvent", Date.class, Date.class );
Calendar start = Calendar.getInstance();
start.set( 2013, 5, 10 );
Calendar end = Calendar.getInstance();
end.set( 2013, 5, 9 );
Object[] parameterValues = new Object[] { start.getTime(), end.getTime() };
Set<ConstraintViolation<CalendarService>> constraintViolations = executableValidator.validateParameters(
object,
method,
parameterValues
);
assertEquals( 1, constraintViolations.size() );
assertEquals(
ConsistentDateParameters.class,
constraintViolations.iterator().next().getConstraintDescriptor().getAnnotation().annotationType()
);
}
private static class CalendarService {
@ConsistentDateParameters
public void createCalendarEvent(@NotNull Date start, @NotNull Date end) {
//...
}
}
}