Мне нужно @Past для ошибки, когда поле установлено на now
. Я понимаю, что значение now
в поле и значение now
, используемые при сравнении средства проверки, будут немного отличаться, поэтому необходимо установить допуск в средстве проверки гибернации.
Проблема заключается в том, что я не могу заставить это работать. Вот джунит:
@Test
public void testHibernateValidator_withPast_withTodayDate() {
// populates with 'now'
MyFormWithPast form = new MyFormWithPast();
form.setDt(OffsetDateTime.now(Clock.systemUTC()));
ValidatorFactory factory = Validation.byProvider(HibernateValidator.class)
.configure()
.clockProvider(() -> Clock.systemUTC())
// adds tolerance so that when comparing, the form dt and 'now' is considered equal,
// therefore dt is not a past datetime
.temporalValidationTolerance(Duration.ofMinutes(1))
.buildValidatorFactory();
Validator validator = factory.getValidator();
Set<ConstraintViolation<MyFormWithPast>> errors = validator.validate(form);
// needs to fail, since 'now' shouldn't be considered 'past'
assertFalse("now shoudnt be considered as Past", errors.isEmpty());
}
public static class MyFormWithPast {
@Past
private OffsetDateTime dt;
public void setDt(OffsetDateTime dt) {
this.dt = dt;
}
public OffsetDateTime getDt() {
return dt;
}
}
Я ожидаю, что проверка не удастся, когда я введу «сейчас» в поле, так как «сейчас» не должно рассматриваться как «прошлое». Что я пропустил?