package de.flower.common.test;
import javax.validation.ConstraintViolation;
import java.lang.annotation.Annotation;
import java.util.Set;
import static org.testng.Assert.*;
public class Violations {
@SuppressWarnings("unchecked")
public static void assertViolation(final String messageTemplate, final Set<?> violations) {
for (final ConstraintViolation<?> violation : (Set<ConstraintViolation<?>>)violations) {
if (equalsViolation(messageTemplate, violation)) {
return;
}
}
fail("Violation with messageTemplate [" + messageTemplate + "] not found in " + dump(violations));
}
@SuppressWarnings("unchecked")
public static void assertViolation(final Class<? extends Annotation> constraintClass, final String propertyPath,
final Set<?> violations) {
for (final ConstraintViolation<?> violation : (Set<ConstraintViolation<?>>)violations) {
if (equalsViolation(constraintClass, propertyPath, violation)) {
return;
}
}
fail("Violation [" + constraintClass + ", " + propertyPath + "] not found in " + dump(violations));
}
public static boolean equalsViolation(final Class<? extends Annotation> constraintClass, final String propertyPath,
final ConstraintViolation<?> violation) {
return propertyPath.equals(violation.getPropertyPath().toString())
&& constraintClass.equals(violation.getConstraintDescriptor().getAnnotation().annotationType());
}
public static boolean equalsViolation(final String messageTemplate, final ConstraintViolation<?> violation) {
return messageTemplate.equals(violation.getMessageTemplate());
}
public static void assertViolation(final String messageTemplate, final ConstraintViolation<?> violation) {
assertEquals(messageTemplate, violation.getMessageTemplate());
}
@SuppressWarnings("unchecked")
public static String dump(final Set<?> violations) {
String s = "Constraint violations:";
for (final ConstraintViolation<?> violation : (Set<ConstraintViolation<?>>)violations) {
s += "\n" + violation.toString();
}
return s;
}
}