package org.openstack.atlas.api.validation.verifiers;
import org.openstack.atlas.api.validation.ComplexBean;
import org.openstack.atlas.api.validation.*;
import org.openstack.atlas.api.validation.SimpleBean;
import org.openstack.atlas.api.validation.results.ValidatorResult;
import org.junit.Before;
import org.junit.Test;
import org.junit.experimental.runners.Enclosed;
import org.junit.runner.RunWith;
import static junit.framework.Assert.assertEquals;
import static org.openstack.atlas.api.validation.ValidatorBuilder.build;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
@RunWith(Enclosed.class)
public class MustDelegateToTest {
public static class WhenVerifyingMustDelegateTo {
private ComplexBean complexBean;
private SimpleBean simpleBean1;
private SimpleBean simpleBean2;
Validator<SimpleBean> simpleBeanValidator;
Validator<ComplexBean> complexBeanValidator;
@Before
public void standUp() {
simpleBean1 = new SimpleBean("1", "2", "3", 1, 2, 3);
simpleBean2 = new SimpleBean("1", "2", "3", 1, 2, 3);
complexBean = new ComplexBean();
complexBean.addSimpleBean(simpleBean1);
complexBean.addSimpleBean(simpleBean2);
simpleBeanValidator = build(new ValidatorBuilder<SimpleBean>(SimpleBean.class) {
{
result(validationTarget().getIntProperty1()).must().exist().withMessage("Must not be null");
}
});
complexBeanValidator = build(new ValidatorBuilder<ComplexBean>(ComplexBean.class) {
{
result(validationTarget().getMySimpleBeans()).if_().exist().then().must().delegateTo(simpleBeanValidator, Context.C1);
}
});
}
@Test
public void shouldNotRetainStateWhenUsingDelegation() {
complexBean.addSimpleBean(new SimpleBean());
assertFalse(complexBeanValidator.validate(complexBean, Context.C1).passedValidation());
complexBean.setMySimpleBeans(null);
complexBean.addSimpleBean(simpleBean1);
assertTrue(complexBeanValidator.validate(complexBean, Context.C1).passedValidation());
}
@Test
public void shouldValidateWhenSimpleBeansExist() {
assertTrue(complexBeanValidator.validate(complexBean, Context.C1).passedValidation());
}
@Test
public void shouldValidateWhenSimpleBeansDoNotExist() {
complexBean.setMySimpleBeans(null);
assertTrue(complexBeanValidator.validate(complexBean, Context.C1).passedValidation());
}
@Test
public void shouldFailWhenSimpleBeansAreInvalid() {
SimpleBean simpleBean = new SimpleBean(null, null, null, null, null, null);
ComplexBean bean = new ComplexBean();
bean.addSimpleBean(simpleBean);
ValidatorResult results = complexBeanValidator.validate(bean, Context.C1);
assertFalse(results.passedValidation());
assertEquals(2, results.getValidationResults().size());
}
}
private enum Context {
C1
}
}