package io.dropwizard.validation.valuehandling;
import org.hibernate.validator.HibernateValidator;
import org.hibernate.validator.valuehandling.UnwrapValidatedValue;
import org.junit.Test;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import java.util.Optional;
import java.util.Set;
import static org.assertj.core.api.Assertions.assertThat;
// Dropwizard used to supply its own Java 8 optional validator but since
// Hibernate Validator 5.2, it's built in, so the class was removed but
// the test class stays to ensure behavior remains
public class OptionalValidatedValueUnwrapperTest {
public static class Example {
@Min(3)
@UnwrapValidatedValue
public Optional<Integer> three = Optional.empty();
@NotNull
@UnwrapValidatedValue
public Optional<Integer> notNull = Optional.of(123);
}
private final Validator validator = Validation
.byProvider(HibernateValidator.class)
.configure()
.buildValidatorFactory()
.getValidator();
@Test
public void succeedsWhenAbsent() {
Example example = new Example();
Set<ConstraintViolation<Example>> violations = validator.validate(example);
assertThat(violations).isEmpty();
}
@Test
public void failsWhenFailingConstraint() {
Example example = new Example();
example.three = Optional.of(2);
Set<ConstraintViolation<Example>> violations = validator.validate(example);
assertThat(violations).hasSize(1);
}
@Test
public void succeedsWhenConstraintsMet() {
Example example = new Example();
example.three = Optional.of(10);
Set<ConstraintViolation<Example>> violations = validator.validate(example);
assertThat(violations).isEmpty();
}
@Test
public void notNullFailsWhenAbsent() {
Example example = new Example();
example.notNull = Optional.empty();
Set<ConstraintViolation<Example>> violations = validator.validate(example);
assertThat(violations).hasSize(1);
}
}