Текущее время и дата не должны проходить проверку с использованием аннотации @Past - PullRequest
0 голосов
/ 21 февраля 2020

Мне нужно @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;
    }
}

Я ожидаю, что проверка не удастся, когда я введу «сейчас» в поле, так как «сейчас» не должно рассматриваться как «прошлое». Что я пропустил?

Ответы [ 2 ]

1 голос
/ 21 февраля 2020

Допуск временной проверки был разработан, чтобы быть более мягким, а не более строгим. Вы хотите, чтобы он был более строгим.

Я думаю, вам понадобятся свои собственные ограничения, чтобы справиться с тем, что вы хотите сделать.

...