package net.techreadiness.batch; import net.techreadiness.service.object.BaseObject; import net.techreadiness.service.object.BaseObjectWithExts; import net.techreadiness.service.object.Org; import net.techreadiness.service.object.OrgType; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.springframework.expression.AccessException; import org.springframework.expression.EvaluationContext; import org.springframework.expression.PropertyAccessor; import org.springframework.expression.TypedValue; import org.springframework.expression.spel.support.StandardEvaluationContext; import com.google.common.collect.Maps; public class ExtendedAttributePropertyAccessorTest { private PropertyAccessor accessor; private BaseObjectWithExts<?> objWithExt; private BaseObject<?> obj; private EvaluationContext evalContext; @Before public void setup() { objWithExt = new Org(); objWithExt.setExtendedAttributes(Maps.<String, String> newHashMap()); obj = new OrgType(); evalContext = new StandardEvaluationContext(objWithExt); accessor = new ExtendedAttributePropertyAccessor(); } @Test public void testCanReadNullName() throws AccessException { boolean canRead = accessor.canRead(evalContext, objWithExt, null); Assert.assertFalse(canRead); } @Test public void testCanReadNullTarget() throws AccessException { boolean canRead = accessor.canRead(evalContext, null, null); Assert.assertFalse(canRead); } @Test public void testCanReadNonExt() throws AccessException { boolean canRead = accessor.canRead(evalContext, obj, "name"); Assert.assertFalse(canRead); } @Test public void testCanReadNonExtNullName() throws AccessException { boolean canRead = accessor.canRead(evalContext, obj, null); Assert.assertFalse(canRead); } @Test public void testCanReadExtCoreName() throws AccessException { boolean canRead = accessor.canRead(evalContext, objWithExt, "code"); Assert.assertFalse(canRead); } @Test public void testCanReadExtName() throws AccessException { boolean canRead = accessor.canRead(evalContext, objWithExt, "someExtAttribute"); Assert.assertTrue(canRead); } @Test public void testCanWriteNullName() throws AccessException { boolean canWrite = accessor.canWrite(evalContext, objWithExt, null); Assert.assertFalse(canWrite); } @Test public void testCanWriteNullTarget() throws AccessException { boolean canWrite = accessor.canWrite(evalContext, null, null); Assert.assertFalse(canWrite); } @Test public void testCanWriteNonExt() throws AccessException { boolean canWrite = accessor.canWrite(evalContext, obj, "name"); Assert.assertFalse(canWrite); } @Test public void testCanWriteNonExtNullName() throws AccessException { boolean canWrite = accessor.canWrite(evalContext, obj, null); Assert.assertFalse(canWrite); } @Test public void testCanWriteExtCoreName() throws AccessException { boolean canWrite = accessor.canWrite(evalContext, objWithExt, "code"); Assert.assertFalse(canWrite); } @Test public void testCanWriteExtName() throws AccessException { boolean canWrite = accessor.canWrite(evalContext, objWithExt, "someExtAttribute"); Assert.assertTrue(canWrite); } @Test public void testRead() throws AccessException { String key = "someKey"; String value = "someValue"; objWithExt.getExtendedAttributes().put(key, value); TypedValue readValue = accessor.read(evalContext, objWithExt, key); Assert.assertEquals(value, readValue.getValue()); } @Test public void testWrite() throws AccessException { String key = "someKey"; String value = "someValue"; accessor.write(evalContext, objWithExt, key, value); Assert.assertEquals(value, objWithExt.getExtendedAttributes().get(key)); } }