package br.com.caelum.stella.bean.validation.xml;
import javax.validation.ConstraintValidatorContext;
import net.vidageek.mirror.dsl.Mirror;
import org.junit.Assert;
import org.junit.Test;
import org.mockito.Mockito;
import br.com.caelum.stella.bean.validation.xml.Choice;
import br.com.caelum.stella.bean.validation.xml.ChoiceItem;
import br.com.caelum.stella.bean.validation.xml.logic.StellaChoiceValidator;
@SuppressWarnings("unused")
public class StellaChoiceValidatorTest {
private ConstraintValidatorContext context = Mockito.mock(ConstraintValidatorContext.class);
@Choice
public static class AnnotatedModel {
private final String bar = null;
private final Integer i = 0;
private final String foo = null;
}
@Test
public void testThatOneSettedElementIsOk() {
StellaChoiceValidator validator = new StellaChoiceValidator();
validator.initialize(new Mirror().on(AnnotatedModel.class).reflect().annotation(Choice.class).atClass());
Assert.assertTrue(validator.isValid(new AnnotatedModel(), context));
}
@Choice
public static class AnnotatedModel2 {
@ChoiceItem
private final String bar = null;
@ChoiceItem
private final Integer i = 0;
private final String foo = null;
}
@Test
public void testThatMultipleChoiceItensSettedIsOk() {
StellaChoiceValidator validator = new StellaChoiceValidator();
validator.initialize(new Mirror().on(AnnotatedModel2.class).reflect().annotation(Choice.class).atClass());
Assert.assertTrue(validator.isValid(new AnnotatedModel2(), context));
}
@Choice
public static class AnnotatedModel3 {
@ChoiceItem
private final String bar = "a bar";
@ChoiceItem
private final Integer i = 0;
private final String foo = "a foo";
}
@Test
public void testThatMultipleChoiceWithMoreThanOneItenNotNullShoudNotPass() {
StellaChoiceValidator validator = new StellaChoiceValidator();
validator.initialize(new Mirror().on(AnnotatedModel3.class).reflect().annotation(Choice.class).atClass());
Assert.assertFalse(validator.isValid(new AnnotatedModel3(), context));
}
@Choice
public static class AnnotatedModel4 {
@ChoiceItem
private final String bar = null;
@ChoiceItem
private final Integer i = 0;
private final String foo = "a foo";
}
@Test
public void testThatMultipleChoiceWithOnlyOneItenNotNullShoudPass() {
StellaChoiceValidator validator = new StellaChoiceValidator();
validator.initialize(new Mirror().on(AnnotatedModel4.class).reflect().annotation(Choice.class).atClass());
Assert.assertTrue(validator.isValid(new AnnotatedModel4(), context));
}
}