package io.dropwizard.validation; import com.google.common.collect.ImmutableList; import io.dropwizard.util.Duration; import org.junit.Test; import javax.validation.Valid; import javax.validation.Validator; import java.util.List; import java.util.Locale; import java.util.concurrent.TimeUnit; import static org.assertj.core.api.Assertions.assertThat; public class DurationValidatorTest { @SuppressWarnings("unused") public static class Example { @MaxDuration(value = 30, unit = TimeUnit.SECONDS) private Duration tooBig = Duration.minutes(10); @MinDuration(value = 30, unit = TimeUnit.SECONDS) private Duration tooSmall = Duration.milliseconds(100); @DurationRange(min = 10, max = 30, unit = TimeUnit.MINUTES) private Duration outOfRange = Duration.minutes(60); @Valid private List<@MaxDuration(value = 30, unit = TimeUnit.SECONDS) Duration> maxDurs = ImmutableList.of(Duration.minutes(10)); @Valid private List<@MinDuration(value = 30, unit = TimeUnit.SECONDS) Duration> minDurs = ImmutableList.of(Duration.milliseconds(100)); @Valid private List<@DurationRange(min = 10, max = 30, unit = TimeUnit.MINUTES) Duration> rangeDurs = ImmutableList.of(Duration.minutes(60)); public void setTooBig(Duration tooBig) { this.tooBig = tooBig; } public void setTooSmall(Duration tooSmall) { this.tooSmall = tooSmall; } public void setOutOfRange(Duration outOfRange) { this.outOfRange = outOfRange; } public void setMaxDurs(List<Duration> maxDurs) { this.maxDurs = maxDurs; } public void setMinDurs(List<Duration> minDurs) { this.minDurs = minDurs; } public void setRangeDurs(List<Duration> rangeDurs) { this.rangeDurs = rangeDurs; } } private final Validator validator = BaseValidator.newValidator(); @Test public void returnsASetOfErrorsForAnObject() throws Exception { if ("en".equals(Locale.getDefault().getLanguage())) { final ImmutableList<String> errors = ConstraintViolations.format(validator.validate(new Example())); assertThat(errors) .containsOnly( "outOfRange must be between 10 MINUTES and 30 MINUTES", "tooBig must be less than or equal to 30 SECONDS", "tooSmall must be greater than or equal to 30 SECONDS", "maxDurs[0].<collection element> must be less than or equal to 30 SECONDS", "minDurs[0].<collection element> must be greater than or equal to 30 SECONDS", "rangeDurs[0].<collection element> must be between 10 MINUTES and 30 MINUTES"); } } @Test public void returnsAnEmptySetForAValidObject() throws Exception { final Example example = new Example(); example.setTooBig(Duration.seconds(10)); example.setTooSmall(Duration.seconds(100)); example.setOutOfRange(Duration.minutes(15)); example.setMaxDurs(ImmutableList.of(Duration.seconds(10))); example.setMinDurs(ImmutableList.of(Duration.seconds(100))); example.setRangeDurs(ImmutableList.of(Duration.minutes(15))); assertThat(validator.validate(example)) .isEmpty(); } }