/** * Licensed to the Austrian Association for Software Tool Integration (AASTI) * under one or more contributor license agreements. See the NOTICE file * distributed with this work for additional information regarding copyright * ownership. The AASTI licenses this file to you under the Apache License, * Version 2.0 (the "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.openengsb.core.ekb.common; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.CoreMatchers.nullValue; import static org.junit.Assert.assertThat; import static org.mockito.Matchers.anyLong; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import org.junit.Before; import org.junit.Test; import org.openengsb.core.api.context.ContextHolder; import org.openengsb.core.api.model.ModelWrapper; import org.openengsb.core.api.model.annotation.OpenEngSBForeignKey; import org.openengsb.core.edb.api.EDBConstants; import org.openengsb.core.edb.api.EDBObject; import org.openengsb.core.edb.api.EDBObjectEntry; import org.openengsb.core.edb.api.EngineeringDatabaseService; import org.openengsb.core.ekb.api.ConnectorInformation; import org.openengsb.core.ekb.common.models.EngineeringObjectModel; import org.openengsb.core.ekb.common.models.PrimitivePropertiesModel; import org.openengsb.core.ekb.common.models.RecursiveModel; import org.openengsb.core.ekb.common.models.SubModel; import org.openengsb.core.ekb.common.models.TestModel; import org.openengsb.core.ekb.common.models.TestModel2.ENUM; import org.openengsb.core.ekb.common.models.WrappedPropertiesModel; /** * The EDBConverter test file only tests the converting Model -> EDBObject since the other way round is tested by the * QueryInterfaceService test file. */ public class EDBConverterTest { private static final String CONTEXT_ID = "testcontext"; private EDBConverter converter; private EngineeringDatabaseService mockedService; @Before public void setUp() { mockedService = mock(EngineeringDatabaseService.class); converter = new EDBConverter(mockedService); ContextHolder.get().setCurrentContextId(CONTEXT_ID); } @Test public void testIfModelAgentIsSet_shouldWork() throws Exception { TestModel model = new TestModel(); assertThat("TestModel isn't enhanced. Maybe you forgot to set the java agent?", ModelWrapper.isModel(model.getClass()), is(true)); } @Test public void primitivePropertyConversion_toEDBObject_works() { PrimitivePropertiesModel model = new PrimitivePropertiesModel(); model.setId("test"); model.setBooleanByGet(true); model.setBooleanByIs(true); model.setPrimitiveChar(Character.MAX_VALUE); model.setPrimitiveDouble(Double.MAX_VALUE); model.setPrimitiveFloat(Float.MAX_VALUE); model.setPrimitiveInt(Integer.MAX_VALUE); model.setPrimitiveLong(Long.MAX_VALUE); model.setPrimitiveShort(Short.MAX_VALUE); ConnectorInformation id = getTestConnectorInformation(); List<EDBObject> objects = converter.convertModelToEDBObject(model, id); EDBObject object = objects.get(0); // check entry types assertThat(object.get("booleanByGet").getType(), is(Boolean.class.getName())); assertThat(object.get("booleanByIs").getType(), is(Boolean.class.getName())); assertThat(object.get("primitiveChar").getType(), is(Character.class.getName())); assertThat(object.get("primitiveShort").getType(), is(Short.class.getName())); assertThat(object.get("primitiveInt").getType(), is(Integer.class.getName())); assertThat(object.get("primitiveLong").getType(), is(Long.class.getName())); assertThat(object.get("primitiveFloat").getType(), is(Float.class.getName())); assertThat(object.get("primitiveDouble").getType(), is(Double.class.getName())); // check values assertThat(object.getBoolean("booleanByGet"), is(true)); assertThat(object.getBoolean("booleanByIs"), is(true)); assertThat(object.getChar("primitiveChar"), is(Character.MAX_VALUE)); assertThat(object.getShort("primitiveShort"), is(Short.MAX_VALUE)); assertThat(object.getInteger("primitiveInt"), is(Integer.MAX_VALUE)); assertThat(object.getLong("primitiveLong"), is(Long.MAX_VALUE)); assertThat(object.getFloat("primitiveFloat"), is(Float.MAX_VALUE)); assertThat(object.getDouble("primitiveDouble"), is(Double.MAX_VALUE)); } @Test public void primitivePropertyConversion_toModel_works() { EDBObject object = new EDBObject("test"); object.putEDBObjectEntry(EDBConstants.MODEL_TYPE, PrimitivePropertiesModel.class.getName()); object.putEDBObjectEntry(EDBConstants.MODEL_OID, "test"); object.putEDBObjectEntry(EDBConstants.MODEL_VERSION, Integer.valueOf(1)); object.putEDBObjectEntry("id", "test"); object.putEDBObjectEntry("booleanByGet", true); object.putEDBObjectEntry("booleanByIs", true); object.putEDBObjectEntry("primitiveChar", Character.MAX_VALUE); object.putEDBObjectEntry("primitiveShort", Short.MAX_VALUE); object.putEDBObjectEntry("primitiveInt", Integer.MAX_VALUE); object.putEDBObjectEntry("primitiveLong", Long.MAX_VALUE); object.putEDBObjectEntry("primitiveFloat", Float.MAX_VALUE); object.putEDBObjectEntry("primitiveDouble", Double.MAX_VALUE); PrimitivePropertiesModel model = converter.convertEDBObjectToModel(PrimitivePropertiesModel.class, object); assertThat(model.getId(), is("test")); assertThat(model.getBooleanByGet(), is(true)); assertThat(model.isBooleanByIs(), is(true)); assertThat(model.getPrimitiveChar(), is(Character.MAX_VALUE)); assertThat(model.getPrimitiveShort(), is(Short.MAX_VALUE)); assertThat(model.getPrimitiveInt(), is(Integer.MAX_VALUE)); assertThat(model.getPrimitiveLong(), is(Long.MAX_VALUE)); assertThat(model.getPrimitiveFloat(), is(Float.MAX_VALUE)); assertThat(model.getPrimitiveDouble(), is(Double.MAX_VALUE)); } @Test public void wrappedPropertyConversion_toEDBObject_works() { WrappedPropertiesModel model = new WrappedPropertiesModel(); model.setId("test"); model.setBooleanByGet(true); model.setBooleanByIs(true); model.setWrappedChar(Character.MAX_VALUE); model.setWrappedDouble(Double.MAX_VALUE); model.setWrappedFloat(Float.MAX_VALUE); model.setWrappedInt(Integer.MAX_VALUE); model.setWrappedLong(Long.MAX_VALUE); model.setWrappedShort(Short.MAX_VALUE); ConnectorInformation id = getTestConnectorInformation(); List<EDBObject> objects = converter.convertModelToEDBObject(model, id); EDBObject object = objects.get(0); // check entry types assertThat(object.get("booleanByGet").getType(), is(Boolean.class.getName())); assertThat(object.get("booleanByIs").getType(), is(Boolean.class.getName())); assertThat(object.get("wrappedChar").getType(), is(Character.class.getName())); assertThat(object.get("wrappedShort").getType(), is(Short.class.getName())); assertThat(object.get("wrappedInt").getType(), is(Integer.class.getName())); assertThat(object.get("wrappedLong").getType(), is(Long.class.getName())); assertThat(object.get("wrappedFloat").getType(), is(Float.class.getName())); assertThat(object.get("wrappedDouble").getType(), is(Double.class.getName())); // check values assertThat(object.getBoolean("booleanByGet"), is(true)); assertThat(object.getBoolean("booleanByIs"), is(true)); assertThat(object.getChar("wrappedChar"), is(Character.MAX_VALUE)); assertThat(object.getShort("wrappedShort"), is(Short.MAX_VALUE)); assertThat(object.getInteger("wrappedInt"), is(Integer.MAX_VALUE)); assertThat(object.getLong("wrappedLong"), is(Long.MAX_VALUE)); assertThat(object.getFloat("wrappedFloat"), is(Float.MAX_VALUE)); assertThat(object.getDouble("wrappedDouble"), is(Double.MAX_VALUE)); } @Test public void wrappedPropertyConversion_toModel_works() { EDBObject object = new EDBObject("test"); object.putEDBObjectEntry(EDBConstants.MODEL_TYPE, WrappedPropertiesModel.class.getName()); object.putEDBObjectEntry(EDBConstants.MODEL_OID, "test"); object.putEDBObjectEntry(EDBConstants.MODEL_VERSION, Integer.valueOf(1)); object.putEDBObjectEntry("id", "test"); object.putEDBObjectEntry("booleanByGet", true); object.putEDBObjectEntry("booleanByIs", true); object.putEDBObjectEntry("wrappedChar", Character.MAX_VALUE); object.putEDBObjectEntry("wrappedShort", Short.MAX_VALUE); object.putEDBObjectEntry("wrappedInt", Integer.MAX_VALUE); object.putEDBObjectEntry("wrappedLong", Long.MAX_VALUE); object.putEDBObjectEntry("wrappedFloat", Float.MAX_VALUE); object.putEDBObjectEntry("wrappedDouble", Double.MAX_VALUE); WrappedPropertiesModel model = converter.convertEDBObjectToModel(WrappedPropertiesModel.class, object); assertThat(model.getId(), is("test")); assertThat(model.getBooleanByGet(), is(true)); assertThat(model.isBooleanByIs(), is(true)); assertThat(model.getWrappedChar(), is(Character.MAX_VALUE)); assertThat(model.getWrappedShort(), is(Short.MAX_VALUE)); assertThat(model.getWrappedInt(), is(Integer.MAX_VALUE)); assertThat(model.getWrappedLong(), is(Long.MAX_VALUE)); assertThat(model.getWrappedFloat(), is(Float.MAX_VALUE)); assertThat(model.getWrappedDouble(), is(Double.MAX_VALUE)); } @Test public void testSimpleModelToEDBObjectConversion_shouldWork() throws Exception { TestModel model = new TestModel(); model.setId("test"); Date date = new Date(); model.setDate(date); model.setEnumeration(ENUM.A); model.setName("testobject"); model.setCheck(false); model.setCheck2(true); model.setCheck3(false); ConnectorInformation id = getTestConnectorInformation(); List<EDBObject> objects = converter.convertModelToEDBObject(model, id); EDBObject object = objects.get(0); assertThat(object.getString("connectorId"), is("testconnector")); assertThat(object.getString("id"), is("test")); assertThat(object.getString("oid"), is(ModelWrapper.wrap(model).getCompleteModelOID())); assertThat(object.getString("domainId"), is("testdomain")); assertThat(object.getString("name"), is("testobject")); assertThat(object.getString("instanceId"), is("testinstance")); assertThat(object.getObject("enumeration", ENUM.class), is(ENUM.A)); assertThat(object.getObject("date", Date.class), is(date)); assertThat(object.getObject("check", Boolean.class), is(false)); assertThat(object.getObject("check2", Boolean.class), is(true)); assertThat(object.getObject("check3", Boolean.class), is(false)); assertThat(object.getString(EDBConstants.MODEL_TYPE), is(TestModel.class.getName())); } @Test public void testComplexModelToEDBObjectConversion_shouldWork() throws Exception { TestModel model = new TestModel(); model.setId("test"); SubModel sub = new SubModel(); sub.setId("sub"); sub.setValue("teststring"); model.setSub(sub); ConnectorInformation id = getTestConnectorInformation(); List<EDBObject> objects = converter.convertModelToEDBObject(model, id); EDBObject object = objects.get(1); assertThat(object.getString("sub"), is(ModelWrapper.wrap(sub).getCompleteModelOID())); EDBObject subObject = objects.get(0); assertThat(subObject.getString("id"), is("sub")); assertThat(subObject.getString(EDBConstants.MODEL_TYPE), is(SubModel.class.getName())); } @Test public void testRecursiveModelToEDBObjectConversion_shouldWork() throws Exception { // prepare RecursiveModel root = new RecursiveModel(); root.setId("root"); RecursiveModel rootChild = new RecursiveModel(); rootChild.setId("root_child"); RecursiveModel rootChildChild = new RecursiveModel(); rootChildChild.setId("root_child_child"); RecursiveModel rootChildChildChild = new RecursiveModel(); rootChildChildChild.setId("root_child_child_child"); root.setChild(rootChild); rootChild.setChild(rootChildChild); rootChildChild.setChild(rootChildChildChild); ConnectorInformation id = getTestConnectorInformation(); // test List<EDBObject> objects = converter.convertModelToEDBObject(root, id); // assert EDBObject obj = objects.get(3); assertThat(obj.getString("id"), is("root")); assertThat(obj.getString(EDBConstants.MODEL_TYPE), is(RecursiveModel.class.getName())); assertThat(obj.getString("child"), is(ModelWrapper.wrap(rootChild).getCompleteModelOID())); obj = objects.get(2); assertThat(obj.getString("id"), is("root_child")); assertThat(obj.getString(EDBConstants.MODEL_TYPE), is(RecursiveModel.class.getName())); assertThat(obj.getString("child"), is(ModelWrapper.wrap(rootChildChild).getCompleteModelOID())); obj = objects.get(1); assertThat(obj.getString("id"), is("root_child_child")); assertThat(obj.getString(EDBConstants.MODEL_TYPE), is(RecursiveModel.class.getName())); assertThat(obj.getString("child"), is(ModelWrapper.wrap(rootChildChildChild).getCompleteModelOID())); obj = objects.get(0); assertThat(obj.getString("id"), is("root_child_child_child")); assertThat(obj.getString(EDBConstants.MODEL_TYPE), is(RecursiveModel.class.getName())); assertThat(obj.getString("child"), nullValue()); } @Test public void testRecursiveModelWithCompositionToEDBObjectConversion_shouldWork() throws Exception { // prepare RecursiveModel root = new RecursiveModel("root"); RecursiveModel rootChild1 = new RecursiveModel("root_child1"); RecursiveModel rootChild2 = new RecursiveModel("root_child2"); RecursiveModel child1Child1 = new RecursiveModel("child1_child1"); RecursiveModel child2Child1 = new RecursiveModel("child2_child1"); RecursiveModel child2Child2 = new RecursiveModel("child2_child2"); List<RecursiveModel> rootChildren = Arrays.asList(new RecursiveModel[]{ rootChild1, rootChild2 }); List<RecursiveModel> child2Children = Arrays.asList(new RecursiveModel[]{ child2Child1, child2Child2 }); root.setChildren(rootChildren); rootChild1.setChild(child1Child1); rootChild2.setChildren(child2Children); ConnectorInformation id = getTestConnectorInformation(); // test List<EDBObject> objects = converter.convertModelToEDBObject(root, id); // assert EDBObject obj = objects.get(5); assertThat(obj.getString("id"), is("root")); assertThat(obj.getString(EDBConstants.MODEL_TYPE), is(RecursiveModel.class.getName())); assertThat(obj.getString("children.0"), is(ModelWrapper.wrap(rootChild1).getCompleteModelOID())); assertThat(obj.getString("children.1"), is(ModelWrapper.wrap(rootChild2).getCompleteModelOID())); obj = objects.get(4); assertThat(obj.getString("id"), is("root_child2")); assertThat(obj.getString(EDBConstants.MODEL_TYPE), is(RecursiveModel.class.getName())); assertThat(obj.getString("children.0"), is(ModelWrapper.wrap(child2Child1).getCompleteModelOID())); assertThat(obj.getString("children.1"), is(ModelWrapper.wrap(child2Child2).getCompleteModelOID())); obj = objects.get(3); assertThat(obj.getString("id"), is("child2_child2")); assertThat(obj.getString(EDBConstants.MODEL_TYPE), is(RecursiveModel.class.getName())); obj = objects.get(2); assertThat(obj.getString("id"), is("child2_child1")); assertThat(obj.getString(EDBConstants.MODEL_TYPE), is(RecursiveModel.class.getName())); obj = objects.get(1); assertThat(obj.getString("id"), is("root_child1")); assertThat(obj.getString(EDBConstants.MODEL_TYPE), is(RecursiveModel.class.getName())); assertThat(obj.getString("child"), is(ModelWrapper.wrap(child1Child1).getCompleteModelOID())); obj = objects.get(0); assertThat(obj.getString("id"), is("child1_child1")); assertThat(obj.getString(EDBConstants.MODEL_TYPE), is(RecursiveModel.class.getName())); } @Test public void testIfEDBObjectsContainCorrectType_shouldWork() throws Exception { TestModel model = new TestModel(); model.setNumber(42); ConnectorInformation id = getTestConnectorInformation(); List<EDBObject> objects = converter.convertModelToEDBObject(model, id); EDBObject object = objects.get(0); EDBObjectEntry entry = object.get("number"); assertThat(entry.getType(), is(Integer.class.getName())); } @Test public void testComplexListModelToEDBObjectConversion_shouldWork() throws Exception { TestModel model = new TestModel(); model.setId("test"); SubModel sub1 = new SubModel(); sub1.setId("sub1"); sub1.setValue("teststring1"); SubModel sub2 = new SubModel(); sub2.setId("sub2"); sub2.setValue("teststring2"); List<SubModel> subs = new ArrayList<SubModel>(); subs.add(sub1); subs.add(sub2); model.setSubs(subs); ConnectorInformation id = getTestConnectorInformation(); List<EDBObject> objects = converter.convertModelToEDBObject(model, id); EDBObject object = objects.get(2); EDBObject subObject1 = objects.get(0); EDBObject subObject2 = objects.get(1); assertThat(object.getString(EDBConverter.getEntryNameForList("subs", 0)), is(ModelWrapper.wrap(sub1).getCompleteModelOID())); assertThat(object.getString(EDBConverter.getEntryNameForList("subs", 1)), is(ModelWrapper.wrap(sub2).getCompleteModelOID())); assertThat(subObject1.getString("id"), is("sub1")); assertThat(subObject1.getString(EDBConstants.MODEL_TYPE), is(SubModel.class.getName())); assertThat(subObject2.getString("id"), is("sub2")); assertThat(subObject2.getString(EDBConstants.MODEL_TYPE), is(SubModel.class.getName())); } @Test public void testMapModelToEDBObjectConversion_shouldWork() throws Exception { Map<String, String> map = new HashMap<String, String>(); map.put("keyA", "valueA"); map.put("keyB", "valueB"); TestModel model = new TestModel(); model.setId("test"); model.setMap(map); ConnectorInformation id = getTestConnectorInformation(); EDBObject object = converter.convertModelToEDBObject(model, id).get(0); assertThat(object.getString(EDBConverter.getEntryNameForMapKey("map", 0)), is("keyA")); assertThat(object.getString(EDBConverter.getEntryNameForMapValue("map", 0)), is("valueA")); assertThat(object.getString(EDBConverter.getEntryNameForMapKey("map", 1)), is("keyB")); assertThat(object.getString(EDBConverter.getEntryNameForMapValue("map", 1)), is("valueB")); } @Test public void testConversionInBothDirections_shouldWork() throws Exception { TestModel model = new TestModel(); model.setId("test"); Date date = new Date(); model.setDate(date); model.setEnumeration(ENUM.A); model.setName("testobject"); EDBObject object = converter.convertModelToEDBObject(model, getTestConnectorInformation()).get(0); TestModel result = converter.convertEDBObjectToModel(TestModel.class, object); assertThat(model.getId(), is(result.getId())); assertThat(model.getDate(), is(result.getDate())); assertThat(model.getEnumeration(), is(result.getEnumeration())); assertThat(model.getName(), is(result.getName())); } @Test public void testIfArraysAreSupported_shouldWork() throws Exception { TestModel model = new TestModel(); Integer[] numbers = new Integer[]{ 1, 2, 3, 4 }; model.setNumbers(numbers); EDBObject object = converter.convertModelToEDBObject(model, getTestConnectorInformation()).get(0); TestModel result = converter.convertEDBObjectToModel(TestModel.class, object); assertThat(result.getNumbers(), notNullValue()); assertThat(numbers[0], is(result.getNumbers()[0])); assertThat(numbers[1], is(result.getNumbers()[1])); assertThat(numbers[2], is(result.getNumbers()[2])); assertThat(numbers[3], is(result.getNumbers()[3])); } @Test public void testEDBObjectToModelConversion_shouldWork() throws Exception { EDBObject object = new EDBObject("test"); object.putEDBObjectEntry(EDBConstants.MODEL_TYPE, TestModel.class.getName()); object.putEDBObjectEntry(EDBConstants.MODEL_OID, "test"); object.putEDBObjectEntry(EDBConstants.MODEL_VERSION, Integer.valueOf(1)); object.putEDBObjectEntry("id", "test"); object.putEDBObjectEntry("name", "testname"); object.putEDBObjectEntry("number", 42); object.putEDBObjectEntry("check", false); object.putEDBObjectEntry("check2", true); TestModel model = converter.convertEDBObjectToModel(TestModel.class, object); assertThat(model.getId(), is("test")); assertThat(model.getName(), is("testname")); assertThat(model.isCheck(), is(false)); assertThat(model.isCheck2(), is(true)); Object version = ModelWrapper.wrap(model).retrieveInternalModelVersion(); assertThat(version, notNullValue()); assertThat((Integer) version, is(1)); } @Test public void testEDBObjectToRecursiveModelConversion_shouldWork() throws Exception { // prepare EDBObject root = new EDBObject("root"); root.putEDBObjectEntry(EDBConstants.MODEL_TYPE, RecursiveModel.class.getName()); root.putEDBObjectEntry(EDBConstants.MODEL_OID, "root"); root.putEDBObjectEntry(EDBConstants.MODEL_VERSION, Integer.valueOf(1)); root.putEDBObjectEntry("id", "root"); root.putEDBObjectEntry("child", "child1"); EDBObject child1 = new EDBObject("child1"); child1.putEDBObjectEntry(EDBConstants.MODEL_TYPE, RecursiveModel.class.getName()); child1.putEDBObjectEntry(EDBConstants.MODEL_OID, "child1"); child1.putEDBObjectEntry(EDBConstants.MODEL_VERSION, Integer.valueOf(1)); child1.putEDBObjectEntry("id", "child1"); child1.putEDBObjectEntry("child", "child2"); EDBObject child2 = new EDBObject("child2"); child2.putEDBObjectEntry(EDBConstants.MODEL_TYPE, RecursiveModel.class.getName()); child2.putEDBObjectEntry(EDBConstants.MODEL_OID, "child2"); child2.putEDBObjectEntry(EDBConstants.MODEL_VERSION, Integer.valueOf(1)); child2.putEDBObjectEntry("id", "child2"); child2.putEDBObjectEntry("child", "child3"); EDBObject child3 = new EDBObject("child3"); child3.putEDBObjectEntry(EDBConstants.MODEL_TYPE, RecursiveModel.class.getName()); child3.putEDBObjectEntry(EDBConstants.MODEL_OID, "child3"); child3.putEDBObjectEntry(EDBConstants.MODEL_VERSION, Integer.valueOf(1)); child3.putEDBObjectEntry("id", "child3"); when(mockedService.getObject(eq("child1"), anyLong())).thenReturn(child1); when(mockedService.getObject(eq("child2"), anyLong())).thenReturn(child2); when(mockedService.getObject(eq("child3"), anyLong())).thenReturn(child3); // test RecursiveModel mRoot = converter.convertEDBObjectToModel(RecursiveModel.class, root); // assert assertThat(mRoot.getId(), is("root")); RecursiveModel mChild1 = mRoot.getChild(); assertThat(mChild1, notNullValue()); assertThat(mChild1.getId(), is("child1")); RecursiveModel mChild2 = mChild1.getChild(); assertThat(mChild2, notNullValue()); assertThat(mChild2.getId(), is("child2")); RecursiveModel mChild3 = mChild2.getChild(); assertThat(mChild3, notNullValue()); assertThat(mChild3.getId(), is("child3")); } @Test public void testEDBObjectToRecursiveModelWithCompositionConversion_shouldWork() throws Exception { // prepare EDBObject root = new EDBObject("root"); root.putEDBObjectEntry(EDBConstants.MODEL_TYPE, RecursiveModel.class.getName()); root.putEDBObjectEntry(EDBConstants.MODEL_OID, "root"); root.putEDBObjectEntry(EDBConstants.MODEL_VERSION, Integer.valueOf(1)); root.putEDBObjectEntry("id", "root"); root.putEDBObjectEntry("children.0", "child1"); root.putEDBObjectEntry("children.1", "child2"); EDBObject child1 = new EDBObject("child1"); child1.putEDBObjectEntry(EDBConstants.MODEL_TYPE, RecursiveModel.class.getName()); child1.putEDBObjectEntry(EDBConstants.MODEL_OID, "child1"); child1.putEDBObjectEntry(EDBConstants.MODEL_VERSION, Integer.valueOf(1)); child1.putEDBObjectEntry("id", "child1"); child1.putEDBObjectEntry("children.0", "child3"); child1.putEDBObjectEntry("children.1", "child4"); EDBObject child2 = new EDBObject("child2"); child2.putEDBObjectEntry(EDBConstants.MODEL_TYPE, RecursiveModel.class.getName()); child2.putEDBObjectEntry(EDBConstants.MODEL_OID, "child2"); child2.putEDBObjectEntry(EDBConstants.MODEL_VERSION, Integer.valueOf(1)); child2.putEDBObjectEntry("id", "child2"); EDBObject child3 = new EDBObject("child3"); child3.putEDBObjectEntry(EDBConstants.MODEL_TYPE, RecursiveModel.class.getName()); child3.putEDBObjectEntry(EDBConstants.MODEL_OID, "child3"); child3.putEDBObjectEntry(EDBConstants.MODEL_VERSION, Integer.valueOf(1)); child3.putEDBObjectEntry("id", "child3"); EDBObject child4 = new EDBObject("child4"); child4.putEDBObjectEntry(EDBConstants.MODEL_TYPE, RecursiveModel.class.getName()); child4.putEDBObjectEntry(EDBConstants.MODEL_OID, "child4"); child4.putEDBObjectEntry(EDBConstants.MODEL_VERSION, Integer.valueOf(1)); child4.putEDBObjectEntry("id", "child4"); when(mockedService.getObject("child1")).thenReturn(child1); when(mockedService.getObject("child2")).thenReturn(child2); when(mockedService.getObject("child3")).thenReturn(child3); when(mockedService.getObject("child4")).thenReturn(child4); // test RecursiveModel mRoot = converter.convertEDBObjectToModel(RecursiveModel.class, root); // assert RecursiveModel mChild1; RecursiveModel mChild2; RecursiveModel mChild3; RecursiveModel mChild4; List<RecursiveModel> rootChildren; List<RecursiveModel> child1Children; assertThat(mRoot.getId(), is("root")); rootChildren = mRoot.getChildren(); assertThat(rootChildren, notNullValue()); assertThat(rootChildren.size(), is(2)); mChild1 = rootChildren.get(0); mChild2 = rootChildren.get(1); assertThat(mChild1.getId(), is("child1")); assertThat(mChild2.getId(), is("child2")); child1Children = mChild1.getChildren(); assertThat(child1Children, notNullValue()); assertThat(child1Children.size(), is(2)); mChild3 = child1Children.get(0); mChild4 = child1Children.get(1); assertThat(mChild3.getId(), is("child3")); assertThat(mChild4.getId(), is("child4")); } @Test public void testIfEngineeringObjectInformationIsAdded_shouldAddEOInformation() throws Exception { EngineeringObjectModel model = new EngineeringObjectModel(); model.setModelAId("testReferenceToModelA"); model.setModelBId("testReferenceToModelB"); List<EDBObject> objects = converter.convertModelToEDBObject(model, getTestConnectorInformation()); assertThat(objects.size(), is(1)); EDBObject result = objects.get(0); String key1 = getReferenceString(model.getClass(), "modelAId"); String key2 = getReferenceString(model.getClass(), "modelBId"); assertThat(result.getString(key1), is(CONTEXT_ID + "/testReferenceToModelA")); assertThat(result.getString(key2), is(CONTEXT_ID + "/testReferenceToModelB")); } @Test public void testIfEngineeringObjectInformationIsDeleted_shouldDeleteEOInformation() throws Exception { EDBObject object = new EDBObject("test"); object.putEDBObjectEntry(EDBConstants.MODEL_TYPE, EngineeringObjectModel.class.getName()); object.putEDBObjectEntry(EDBConstants.MODEL_OID, "test"); object.putEDBObjectEntry(EDBConstants.MODEL_VERSION, Integer.valueOf(1)); String key1 = getReferenceString(EngineeringObjectModel.class, "modelAId"); String key2 = getReferenceString(EngineeringObjectModel.class, "modelBId"); object.putEDBObjectEntry(key1, "testReferenceA"); object.putEDBObjectEntry(key2, "testReferenceB"); converter.convertEDBObjectToModel(EngineeringObjectModel.class, object); assertThat(object.get(key1), nullValue()); assertThat(object.get(key2), nullValue()); } private String getReferenceString(Class<?> model, String field) throws Exception { return EDBConverter.getEOReferenceStringFromAnnotation(model.getDeclaredField(field).getAnnotation( OpenEngSBForeignKey.class)); } private ConnectorInformation getTestConnectorInformation() { return new ConnectorInformation("testdomain", "testconnector", "testinstance"); } }