// Copyright © 2015 HSL <https://www.hsl.fi>
// This program is dual-licensed under the EUPL v1.2 and AGPLv3 licenses.
package fi.hsl.parkandride.core.domain.validation;
import java.util.*;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import static java.util.Comparator.comparing;
import static org.assertj.core.api.Assertions.*;
import org.junit.Test;
public class MinElementValidatorTest {
public static class MinType {
@MinElement(1)
public Map<String, Integer> values = new LinkedHashMap<>();
}
private final Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
@Test
public void report_all_invalid_values() {
MinType t = new MinType();
t.values.put("a", 0);
t.values.put("b", 1);
t.values.put("c", -1);
Set<ConstraintViolation<MinType>> violations = validate(t);
assertThat(violations).hasSize(2);
Iterator<ConstraintViolation<MinType>> iter = violations.iterator();
ConstraintViolation<MinType> c1 = iter.next();
ConstraintViolation<MinType> c2 = iter.next();
assertThat(c1.getPropertyPath().toString()).isEqualTo("values[a]");
assertThat(c1.getConstraintDescriptor().getAnnotation().annotationType()).isEqualTo(MinElement.class);
assertThat(c2.getPropertyPath().toString()).isEqualTo("values[c]");
assertThat(c2.getConstraintDescriptor().getAnnotation().annotationType()).isEqualTo(MinElement.class);
}
@Test
public void ignore_null_elements() {
MinType t = new MinType();
t.values.put("a", null);
assertThat(validate(t)).isEmpty();
}
@Test
public void ignore_null() {
MinType t = new MinType();
t.values = null;
assertThat(validate(t)).isEmpty();
}
private Set<ConstraintViolation<MinType>> validate(MinType t) {
Set<ConstraintViolation<MinType>> violations = new TreeSet<>(comparing(c -> c.getPropertyPath().toString()));
violations.addAll(validator.validate(t));
return violations;
}
}