package io.dropwizard.validation;
import com.google.common.collect.ImmutableList;
import io.dropwizard.util.Size;
import io.dropwizard.util.SizeUnit;
import org.junit.Test;
import javax.validation.Valid;
import javax.validation.Validator;
import java.util.List;
import java.util.Locale;
import static org.assertj.core.api.Assertions.assertThat;
public class SizeValidatorTest {
@SuppressWarnings("unused")
public static class Example {
@MaxSize(value = 30, unit = SizeUnit.KILOBYTES)
private Size tooBig = Size.gigabytes(2);
@MinSize(value = 30, unit = SizeUnit.KILOBYTES)
private Size tooSmall = Size.bytes(100);
@SizeRange(min = 10, max = 100, unit = SizeUnit.KILOBYTES)
private Size outOfRange = Size.megabytes(2);
@Valid
private List<@MaxSize(value = 30, unit = SizeUnit.KILOBYTES) Size> maxSize =
ImmutableList.of(Size.gigabytes(2));
@Valid
private List<@MinSize(value = 30, unit = SizeUnit.KILOBYTES) Size> minSize =
ImmutableList.of(Size.bytes(100));
@Valid
private List<@SizeRange(min = 10, max = 100, unit = SizeUnit.KILOBYTES) Size> rangeSize =
ImmutableList.of(Size.megabytes(2));
public void setTooBig(Size tooBig) {
this.tooBig = tooBig;
}
public void setTooSmall(Size tooSmall) {
this.tooSmall = tooSmall;
}
public void setOutOfRange(Size outOfRange) {
this.outOfRange = outOfRange;
}
public void setMaxSize(List<Size> maxSize) {
this.maxSize = maxSize;
}
public void setMinSize(List<Size> minSize) {
this.minSize = minSize;
}
public void setRangeSize(List<Size> rangeSize) {
this.rangeSize = rangeSize;
}
}
private final Validator validator = BaseValidator.newValidator();
@Test
public void returnsASetOfErrorsForAnObject() throws Exception {
if ("en".equals(Locale.getDefault().getLanguage())) {
assertThat(ConstraintViolations.format(validator.validate(new Example())))
.containsOnly("outOfRange must be between 10 KILOBYTES and 100 KILOBYTES",
"tooBig must be less than or equal to 30 KILOBYTES",
"tooSmall must be greater than or equal to 30 KILOBYTES",
"maxSize[0].<collection element> must be less than or equal to 30 KILOBYTES",
"minSize[0].<collection element> must be greater than or equal to 30 KILOBYTES",
"rangeSize[0].<collection element> must be between 10 KILOBYTES and 100 KILOBYTES");
}
}
@Test
public void returnsAnEmptySetForAValidObject() throws Exception {
final Example example = new Example();
example.setTooBig(Size.bytes(10));
example.setTooSmall(Size.megabytes(10));
example.setOutOfRange(Size.kilobytes(64));
example.setMaxSize(ImmutableList.of(Size.bytes(10)));
example.setMinSize(ImmutableList.of(Size.megabytes(10)));
example.setRangeSize(ImmutableList.of(Size.kilobytes(64)));
assertThat(validator.validate(example))
.isEmpty();
}
}