package org.lightadmin.core.config.bootstrap.parsing.validation;
import org.junit.Before;
import org.junit.Test;
import org.lightadmin.core.config.domain.field.TransientFieldMetadata;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
public class TransientFieldMetadataValidatorTest {
private TransientFieldMetadataValidator testee;
private DomainConfigurationValidationContext validationContext;
@Before
public void setUp() throws Exception {
testee = new TransientFieldMetadataValidator();
validationContext = new DomainConfigurationValidationContext(null, null, null, null, null);
}
@Test
public void invalidEmptyProperty() throws Exception {
assertInvalidProperty("");
}
@Test
public void invalidMissingProperty() throws Exception {
assertInvalidProperty("missingProperty");
}
@Test
public void validPropertyWithGetter() throws Exception {
assertValidProperty("propertyWithGetter");
}
@Test
public void validPropertyWithoutGetter() throws Exception {
assertValidProperty("property");
}
@Test
public void validNestedProperty() throws Exception {
assertValidProperty("childProperty.property");
}
@Test
public void validBigNestedProperty() throws Exception {
assertValidProperty("childProperty.childProperty.property");
}
@Test
public void missingNestedProperty() throws Exception {
assertInvalidProperty("childProperty.missingProperty");
}
@Test
public void invalidPropertyPathFormatting() throws Exception {
assertInvalidProperty("childProperty..property");
}
private void assertValidProperty(String property) {
assertTrue(testee.validateFieldMetadata(transientFieldMetadata(property), ParentClass.class, validationContext).isEmpty());
}
private void assertInvalidProperty(String property) {
assertFalse(testee.validateFieldMetadata(transientFieldMetadata(property), ParentClass.class, validationContext).isEmpty());
}
private TransientFieldMetadata transientFieldMetadata(final String property) {
return new TransientFieldMetadata("Transient Field", property);
}
private static class ParentClass {
private int property;
private int propertyWithGetter;
private ChildClass childProperty;
public int getPropertyWithGetter() {
return propertyWithGetter;
}
}
private static class ChildClass {
private int property;
private ChildClass childProperty;
}
}