package ca.intelliware.ihtsdo.mlds.service.affiliatesimport;
import static org.junit.Assert.assertEquals;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.runners.MockitoJUnitRunner;
@RunWith(MockitoJUnitRunner.class)
public class AccessorTest {
private Parent rootObject;
@Before
public void setUp() {
rootObject = new Parent();
}
@Test
public void shouldBeAbleToReadTopLevelAttribute() {
Accessor accessor = new Accessor(Parent.class, "top");
assertEquals(accessor.getValue(rootObject), "parent-value");
}
@Test
public void shouldBeAbleToUpdateTopLevelAttribute() throws Exception {
Accessor accessor = new Accessor(Parent.class, "top");
accessor.setValue(rootObject, "new-value");
assertEquals(rootObject.top, "new-value");
}
@Test
public void shouldInsertDefaultParentObjectsDuringUpdateParentAttributes() throws Exception {
rootObject.child = null;
Accessor accessor = new Accessor(Parent.class, "child.value");
accessor.setValue(rootObject, "totally-new");
assertEquals(rootObject.child.value, "totally-new");
assertEquals(rootObject.top, "parent-value");
}
@Test
public void shouldBeAbleToReadChildAttribute() {
Accessor accessor = new Accessor(Parent.class, "child.value");
assertEquals(accessor.getValue(rootObject), "child-value");
}
@Test
public void shouldBeAbleToUpdateChildLevelAttribute() throws Exception {
Accessor accessor = new Accessor(Parent.class, "child.value");
accessor.setValue(rootObject, "new-value");
assertEquals(rootObject.child.value, "new-value");
assertEquals(rootObject.top, "parent-value");
}
@Test
public void shouldReturnNullOnGetIfParentMissing() {
rootObject.child = null;
Accessor accessor = new Accessor(Parent.class, "child.value");
assertEquals(accessor.getValue(rootObject), null);
}
@Test
public void shouldProvideAttributeClass() {
Accessor accessor = new Accessor(Parent.class, "child.value");
assertEquals(accessor.getAttributeClass(), String.class);
}
public static class Child {
String value = "child-value";
}
public static class Parent {
String top = "parent-value";
Child child = new Child();
}
}