package br.com.caelum.stella.bean.validation; import static org.junit.Assert.fail; import java.lang.reflect.Field; import junit.framework.Assert; import org.junit.Test; import br.com.caelum.stella.ValidationMessage; import br.com.caelum.stella.bean.validation.logic.AnnotationMessageProducer; import br.com.caelum.stella.validation.InvalidValue; /** * @author Fabio Kung */ public class AnnotationMessageProducerTest { private enum Errors implements InvalidValue { ANY, OTHER; } @Test public void shouldAlwaysRetrieveMessageFromAnnotationProperty() throws Exception { Field field = BeanToBeValidated.class.getDeclaredField("field"); field.setAccessible(true); FakeConstraint constraint = field.getAnnotation(FakeConstraint.class); { AnnotationMessageProducer producer = new AnnotationMessageProducer(constraint); ValidationMessage validationMessage = producer.getMessage(Errors.ANY); Assert.assertEquals(constraint.message(), validationMessage.getMessage()); } { AnnotationMessageProducer producer = new AnnotationMessageProducer(constraint); ValidationMessage validationMessage = producer.getMessage(Errors.OTHER); Assert.assertEquals(constraint.message(), validationMessage.getMessage()); } } @Test // as Hibernate Validator public void shouldThrowIllegalArgumentExceptionIfConstraintHasNoMessage() throws Exception { Field field = BeanToBeValidated.class.getDeclaredField("other"); field.setAccessible(true); ConstraintWithoutMessage constraint = field.getAnnotation(ConstraintWithoutMessage.class); AnnotationMessageProducer producer = new AnnotationMessageProducer(constraint); try { @SuppressWarnings("unused") ValidationMessage validationMessage = producer.getMessage(Errors.ANY); fail(); } catch (IllegalArgumentException e) { // ok } catch (Exception e) { // any other exception should fail fail(); } } }