Repository: olingo-odata4 Updated Branches: refs/heads/master 4cd8752e1 -> a604fa78f
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/a604fa78/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializerTest.java ---------------------------------------------------------------------- diff --git a/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializerTest.java b/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializerTest.java index 2295d81..311ec08 100644 --- a/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializerTest.java +++ b/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializerTest.java @@ -30,14 +30,12 @@ import org.apache.olingo.commons.api.data.Entity; import org.apache.olingo.commons.api.data.EntityCollection; import org.apache.olingo.commons.api.data.Property; import org.apache.olingo.commons.api.data.ValueType; -import org.apache.olingo.commons.api.edm.Edm; import org.apache.olingo.commons.api.edm.EdmComplexType; import org.apache.olingo.commons.api.edm.EdmEntityContainer; import org.apache.olingo.commons.api.edm.EdmEntitySet; import org.apache.olingo.commons.api.edm.EdmEntityType; import org.apache.olingo.commons.api.edm.EdmPrimitiveType; import org.apache.olingo.commons.api.edm.EdmProperty; -import org.apache.olingo.commons.api.edm.FullQualifiedName; import org.apache.olingo.commons.api.format.ODataFormat; import org.apache.olingo.server.api.OData; import org.apache.olingo.server.api.ServiceMetadata; @@ -57,6 +55,7 @@ import org.apache.olingo.server.api.uri.queryoption.SelectItem; import org.apache.olingo.server.api.uri.queryoption.SelectOption; import org.apache.olingo.server.core.serializer.ExpandSelectMock; import org.apache.olingo.server.core.uri.UriHelperImpl; +import org.apache.olingo.server.tecsvc.MetadataETagSupport; import org.apache.olingo.server.tecsvc.data.DataProvider; import org.apache.olingo.server.tecsvc.provider.EdmTechProvider; import org.hamcrest.CoreMatchers; @@ -66,10 +65,8 @@ import org.mockito.Mockito; public class ODataJsonSerializerTest { private static final ServiceMetadata metadata = OData.newInstance().createServiceMetadata( - new EdmTechProvider(), Collections.<EdmxReference> emptyList()); - private static final Edm edm = metadata.getEdm(); - private static final EdmEntityContainer entityContainer = edm.getEntityContainer( - new FullQualifiedName("olingo.odata.test1", "Container")); + new EdmTechProvider(), Collections.<EdmxReference> emptyList(), new MetadataETagSupport("W/\"metadataETag\"")); + private static final EdmEntityContainer entityContainer = metadata.getEdm().getEntityContainer(); private final DataProvider data = new DataProvider(); private final ODataSerializer serializer = new ODataJsonSerializer(ODataFormat.JSON); private final UriHelper helper = new UriHelperImpl(); @@ -80,11 +77,12 @@ public class ODataJsonSerializerTest { final Entity entity = data.readAll(edmEntitySet).getEntities().get(0); InputStream result = serializer.entity(metadata, edmEntitySet.getEntityType(), entity, EntitySerializerOptions.with() - .contextURL(ContextURL.with().entitySet(edmEntitySet).suffix(Suffix.ENTITY).build()) - .build()).getContent(); + .contextURL(ContextURL.with().entitySet(edmEntitySet).suffix(Suffix.ENTITY).build()) + .build()).getContent(); final String resultString = IOUtils.toString(result); final String expectedResult = "{" + "\"@odata.context\":\"$metadata#ESAllPrim/$entity\"," + + "\"@odata.metadataEtag\":\"W/\\\"metadataETag\\\"\"," + "\"PropertyInt16\":32767," + "\"PropertyString\":\"First Resource - positive values\"," + "\"PropertyBoolean\":true," @@ -113,9 +111,10 @@ public class ODataJsonSerializerTest { final String resultString = IOUtils.toString(serializer.entity(metadata, edmEntitySet.getEntityType(), entity, EntitySerializerOptions.with() - .contextURL(ContextURL.with().entitySet(edmEntitySet).suffix(Suffix.ENTITY).build()) - .build()).getContent()); + .contextURL(ContextURL.with().entitySet(edmEntitySet).suffix(Suffix.ENTITY).build()) + .build()).getContent()); final String expectedResult = "{\"@odata.context\":\"$metadata#ESAllPrim/$entity\"," + + "\"@odata.metadataEtag\":\"W/\\\"metadataETag\\\"\"," + "\"PropertyInt16\":32767," + "\"PropertyString\":null,\"PropertyBoolean\":null," + "\"PropertyByte\":null,\"PropertySByte\":null," @@ -134,8 +133,8 @@ public class ODataJsonSerializerTest { entity.getProperties().clear(); serializer.entity(metadata, edmEntitySet.getEntityType(), entity, EntitySerializerOptions.with() - .contextURL(ContextURL.with().entitySet(edmEntitySet).suffix(Suffix.ENTITY).build()) - .build()); + .contextURL(ContextURL.with().entitySet(edmEntitySet).suffix(Suffix.ENTITY).build()) + .build()); } @Test @@ -146,8 +145,8 @@ public class ODataJsonSerializerTest { try { serializer.entity(metadata, edmEntitySet.getEntityType(), entity, EntitySerializerOptions.with() - .contextURL(ContextURL.with().entitySet(edmEntitySet).suffix(Suffix.ENTITY).build()) - .build()); + .contextURL(ContextURL.with().entitySet(edmEntitySet).suffix(Suffix.ENTITY).build()) + .build()); Assert.fail("Expected exception not thrown!"); } catch (final SerializerException e) { Assert.assertEquals(SerializerException.MessageKeys.WRONG_PROPERTY_VALUE, e.getMessageKey()); @@ -167,13 +166,14 @@ public class ODataJsonSerializerTest { Mockito.when(countOption.getValue()).thenReturn(true); InputStream result = serializer.entityCollection(metadata, edmEntitySet.getEntityType(), entitySet, EntityCollectionSerializerOptions.with() - .contextURL(ContextURL.with().entitySet(edmEntitySet).build()) - .count(countOption) - .build()).getContent(); + .contextURL(ContextURL.with().entitySet(edmEntitySet).build()) + .count(countOption) + .build()).getContent(); final String resultString = IOUtils.toString(result); Assert.assertThat(resultString, CoreMatchers.startsWith("{" + "\"@odata.context\":\"$metadata#ESAllPrim\"," + + "\"@odata.metadataEtag\":\"W/\\\"metadataETag\\\"\"," + "\"@odata.count\":3,\"value\":[")); Assert.assertThat(resultString, CoreMatchers.endsWith("]," + "\"@odata.nextLink\":\"/next\"}")); @@ -192,12 +192,13 @@ public class ODataJsonSerializerTest { final Entity entity = data.readAll(edmEntitySet).getEntities().get(0); InputStream result = serializer.entity(metadata, edmEntitySet.getEntityType(), entity, EntitySerializerOptions.with() - .contextURL(ContextURL.with().serviceRoot(URI.create("http://host/service/")) - .entitySet(edmEntitySet).suffix(Suffix.ENTITY).build()) + .contextURL(ContextURL.with().serviceRoot(URI.create("http://host/service/")) + .entitySet(edmEntitySet).suffix(Suffix.ENTITY).build()) .build()).getContent(); final String resultString = IOUtils.toString(result); final String expectedResult = "{" + "\"@odata.context\":\"http://host/service/$metadata#ESCollAllPrim/$entity\"," + + "\"@odata.metadataEtag\":\"W/\\\"metadataETag\\\"\"," + "\"PropertyInt16\":1," + "\"CollPropertyString\":" + "[\"[email protected]\",\"[email protected]\",\"[email protected]\"]," @@ -228,11 +229,12 @@ public class ODataJsonSerializerTest { final Entity entity = data.readAll(edmEntitySet).getEntities().get(0); InputStream result = serializer.entity(metadata, edmEntitySet.getEntityType(), entity, EntitySerializerOptions.with() - .contextURL(ContextURL.with().entitySet(edmEntitySet).suffix(Suffix.ENTITY).build()) - .build()).getContent(); + .contextURL(ContextURL.with().entitySet(edmEntitySet).suffix(Suffix.ENTITY).build()) + .build()).getContent(); final String resultString = IOUtils.toString(result); final String expectedResult = "{" + "\"@odata.context\":\"$metadata#ESCompAllPrim/$entity\"," + + "\"@odata.metadataEtag\":\"W/\\\"metadataETag\\\"\"," + "\"@odata.etag\":\"W/\\\"32767\\\"\"," + "\"PropertyInt16\":32767," + "\"PropertyComp\":{" @@ -262,11 +264,12 @@ public class ODataJsonSerializerTest { final Entity entity = data.readAll(edmEntitySet).getEntities().get(0); InputStream result = serializer.entity(metadata, edmEntitySet.getEntityType(), entity, EntitySerializerOptions.with() - .contextURL(ContextURL.with().entitySet(edmEntitySet).suffix(Suffix.ENTITY).build()) - .build()).getContent(); + .contextURL(ContextURL.with().entitySet(edmEntitySet).suffix(Suffix.ENTITY).build()) + .build()).getContent(); final String resultString = IOUtils.toString(result); final String expectedResult = "{" + "\"@odata.context\":\"$metadata#ESMixPrimCollComp/$entity\"," + + "\"@odata.metadataEtag\":\"W/\\\"metadataETag\\\"\"," + "\"PropertyInt16\":32767," + "\"CollPropertyString\":" + "[\"[email protected]\",\"[email protected]\",\"[email protected]\"]," @@ -285,9 +288,10 @@ public class ODataJsonSerializerTest { entity.getProperties().retainAll(Arrays.asList(entity.getProperties().get(0))); final String resultString = IOUtils.toString(serializer.entity(metadata, edmEntitySet.getEntityType(), entity, EntitySerializerOptions.with() - .contextURL(ContextURL.with().entitySet(edmEntitySet).suffix(Suffix.ENTITY).build()) - .build()).getContent()); + .contextURL(ContextURL.with().entitySet(edmEntitySet).suffix(Suffix.ENTITY).build()) + .build()).getContent()); final String expectedResult = "{\"@odata.context\":\"$metadata#ESMixPrimCollComp/$entity\"," + + "\"@odata.metadataEtag\":\"W/\\\"metadataETag\\\"\"," + "\"PropertyInt16\":32767," + "\"CollPropertyString\":null,\"PropertyComp\":null,\"CollPropertyComp\":null}"; Assert.assertEquals(expectedResult, resultString); @@ -298,7 +302,7 @@ public class ODataJsonSerializerTest { final EdmEntitySet edmEntitySet = entityContainer.getEntitySet("ESTwoPrim"); final Entity entity = data.readAll(edmEntitySet).getEntities().get(0); InputStream result = new ODataJsonSerializer(ODataFormat.JSON_NO_METADATA) - .entity(metadata, edmEntitySet.getEntityType(), entity, null).getContent(); + .entity(metadata, edmEntitySet.getEntityType(), entity, null).getContent(); final String resultString = IOUtils.toString(result); final String expectedResult = "{\"PropertyInt16\":32766,\"PropertyString\":\"Test String1\"}"; Assert.assertEquals(expectedResult, resultString); @@ -309,9 +313,9 @@ public class ODataJsonSerializerTest { final EdmEntitySet edmEntitySet = entityContainer.getEntitySet("ESTwoPrim"); final EntityCollection entitySet = data.readAll(edmEntitySet); InputStream result = new ODataJsonSerializer(ODataFormat.JSON_NO_METADATA) - .entityCollection(metadata, edmEntitySet.getEntityType(), entitySet, - EntityCollectionSerializerOptions.with() - .contextURL(ContextURL.with().entitySet(edmEntitySet).build()).build()).getContent(); + .entityCollection(metadata, edmEntitySet.getEntityType(), entitySet, + EntityCollectionSerializerOptions.with() + .contextURL(ContextURL.with().entitySet(edmEntitySet).build()).build()).getContent(); final String resultString = IOUtils.toString(result); final String expectedResult = "{\"value\":[" + "{\"PropertyInt16\":32766,\"PropertyString\":\"Test String1\"}," @@ -328,9 +332,10 @@ public class ODataJsonSerializerTest { final String resultString = IOUtils.toString(serializer.entity(metadata, edmEntitySet.getEntityType(), entity, EntitySerializerOptions.with() - .contextURL(ContextURL.with().entitySet(edmEntitySet).suffix(Suffix.ENTITY).build()) - .build()).getContent()); + .contextURL(ContextURL.with().entitySet(edmEntitySet).suffix(Suffix.ENTITY).build()) + .build()).getContent()); final String expectedResult = "{\"@odata.context\":\"$metadata#ESMedia/$entity\"," + + "\"@odata.metadataEtag\":\"W/\\\"metadataETag\\\"\"," + "\"@odata.mediaEtag\":\"W/\\\"1\\\"\",\"@odata.mediaContentType\":\"image/svg+xml\"," + "\"PropertyInt16\":1}"; Assert.assertEquals(expectedResult, resultString); @@ -343,15 +348,17 @@ public class ODataJsonSerializerTest { final String resultString = IOUtils.toString(serializer.entityCollection(metadata, edmEntitySet.getEntityType(), entitySet, EntityCollectionSerializerOptions.with() - .contextURL(ContextURL.with().entitySet(edmEntitySet).build()).build()).getContent()); - final String expectedResult = "{\"@odata.context\":\"$metadata#ESMedia\",\"value\":[" + .contextURL(ContextURL.with().entitySet(edmEntitySet).build()).build()).getContent()); + final String expectedResult = "{\"@odata.context\":\"$metadata#ESMedia\"," + + "\"@odata.metadataEtag\":\"W/\\\"metadataETag\\\"\"," + + "\"value\":[" + "{\"@odata.mediaEtag\":\"W/\\\"1\\\"\",\"@odata.mediaContentType\":\"image/svg+xml\",\"PropertyInt16\":1}," + "{\"@odata.mediaEtag\":\"W/\\\"2\\\"\",\"@odata.mediaContentType\":\"image/svg+xml\",\"PropertyInt16\":2}," + "{\"@odata.mediaEtag\":\"W/\\\"3\\\"\",\"@odata.mediaContentType\":\"image/svg+xml\",\"PropertyInt16\":3}," + "{\"@odata.mediaEtag\":\"W/\\\"4\\\"\",\"@odata.mediaContentType\":\"image/svg+xml\",\"PropertyInt16\":4}]}"; Assert.assertEquals(expectedResult, resultString); } - + @Test public void primitiveValuesAllNull() throws Exception { final EdmEntitySet edmEntitySet = entityContainer.getEntitySet("ESAllNullable"); @@ -359,27 +366,29 @@ public class ODataJsonSerializerTest { final String resultString = IOUtils.toString(serializer.entityCollection(metadata, edmEntitySet.getEntityType(), entitySet, EntityCollectionSerializerOptions.with() - .contextURL(ContextURL.with().entitySet(edmEntitySet).build()).build()).getContent()); - - final String expected = "{\"@odata.context\":\"$metadata#ESAllNullable\",\"value\":[{\"PropertyKey\":1," - + "\"PropertyInt16\":null,\"PropertyString\":null,\"PropertyBoolean\":null,\"PropertyByte\":null," - + "\"PropertySByte\":null,\"PropertyInt32\":null,\"PropertyInt64\":null,\"PropertySingle\":null," - + "\"PropertyDouble\":null,\"PropertyDecimal\":null,\"PropertyBinary\":null,\"PropertyDate\":null," - + "\"PropertyDateTimeOffset\":null,\"PropertyDuration\":null,\"PropertyGuid\":null,\"PropertyTimeOfDay\":null," - + "\"CollPropertyString\":[\"[email protected]\",null,\"[email protected]\"]," - + "\"CollPropertyBoolean\":[true,null,false],\"CollPropertyByte\":[50,null,249]," - + "\"CollPropertySByte\":[-120,null,126],\"CollPropertyInt16\":[1000,null,30112]," - + "\"CollPropertyInt32\":[23232323,null,10000001],\"CollPropertyInt64\":[929292929292,null,444444444444]," - + "\"CollPropertySingle\":[1790,null,3210],\"CollPropertyDouble\":[-17900,null,3210],\"CollPropertyDecimal\":" - + "[12,null,1234],\"CollPropertyBinary\":[\"q83v\",null,\"VGeJ\"],\"CollPropertyDate\":" - + "[\"1958-12-03\",null,\"2013-06-25\"],\"CollPropertyDateTimeOffset\":[\"2015-08-12T03:08:34Z\",null," - + "\"1948-02-17T09:09:09Z\"],\"CollPropertyDuration\":[\"PT13S\",null,\"PT1H0S\"],\"CollPropertyGuid\":" - + "[\"ffffff67-89ab-cdef-0123-456789aaaaaa\",null,\"cccccc67-89ab-cdef-0123-456789cccccc\"]," - + "\"CollPropertyTimeOfDay\":[\"04:14:13\",null,\"00:37:13\"]}]}"; - + .contextURL(ContextURL.with().entitySet(edmEntitySet).build()).build()).getContent()); + + final String expected = "{\"@odata.context\":\"$metadata#ESAllNullable\"," + + "\"@odata.metadataEtag\":\"W/\\\"metadataETag\\\"\"," + + "\"value\":[{\"PropertyKey\":1," + + "\"PropertyInt16\":null,\"PropertyString\":null,\"PropertyBoolean\":null,\"PropertyByte\":null," + + "\"PropertySByte\":null,\"PropertyInt32\":null,\"PropertyInt64\":null,\"PropertySingle\":null," + + "\"PropertyDouble\":null,\"PropertyDecimal\":null,\"PropertyBinary\":null,\"PropertyDate\":null," + + "\"PropertyDateTimeOffset\":null,\"PropertyDuration\":null,\"PropertyGuid\":null,\"PropertyTimeOfDay\":null," + + "\"CollPropertyString\":[\"[email protected]\",null,\"[email protected]\"]," + + "\"CollPropertyBoolean\":[true,null,false],\"CollPropertyByte\":[50,null,249]," + + "\"CollPropertySByte\":[-120,null,126],\"CollPropertyInt16\":[1000,null,30112]," + + "\"CollPropertyInt32\":[23232323,null,10000001],\"CollPropertyInt64\":[929292929292,null,444444444444]," + + "\"CollPropertySingle\":[1790,null,3210],\"CollPropertyDouble\":[-17900,null,3210],\"CollPropertyDecimal\":" + + "[12,null,1234],\"CollPropertyBinary\":[\"q83v\",null,\"VGeJ\"],\"CollPropertyDate\":" + + "[\"1958-12-03\",null,\"2013-06-25\"],\"CollPropertyDateTimeOffset\":[\"2015-08-12T03:08:34Z\",null," + + "\"1948-02-17T09:09:09Z\"],\"CollPropertyDuration\":[\"PT13S\",null,\"PT1H0S\"],\"CollPropertyGuid\":" + + "[\"ffffff67-89ab-cdef-0123-456789aaaaaa\",null,\"cccccc67-89ab-cdef-0123-456789cccccc\"]," + + "\"CollPropertyTimeOfDay\":[\"04:14:13\",null,\"00:37:13\"]}]}"; + Assert.assertEquals(expected, resultString); } - + @Test public void select() throws Exception { final EdmEntitySet edmEntitySet = entityContainer.getEntitySet("ESAllPrim"); @@ -392,14 +401,15 @@ public class ODataJsonSerializerTest { InputStream result = serializer .entity(metadata, entityType, entity, EntitySerializerOptions.with() - .contextURL(ContextURL.with().entitySet(edmEntitySet) - .selectList(helper.buildContextURLSelectList(entityType, null, select)) - .suffix(Suffix.ENTITY).build()) + .contextURL(ContextURL.with().entitySet(edmEntitySet) + .selectList(helper.buildContextURLSelectList(entityType, null, select)) + .suffix(Suffix.ENTITY).build()) .select(select) .build()).getContent(); final String resultString = IOUtils.toString(result); final String expectedResult = "{" + "\"@odata.context\":\"$metadata#ESAllPrim(PropertyBoolean,PropertyDate)/$entity\"," + + "\"@odata.metadataEtag\":\"W/\\\"metadataETag\\\"\"," + "\"PropertyBoolean\":true,\"PropertyDate\":\"2012-12-03\"}"; Assert.assertEquals(expectedResult, resultString); } @@ -414,11 +424,12 @@ public class ODataJsonSerializerTest { final SelectOption select = ExpandSelectMock.mockSelectOption(Arrays.asList(selectItem1, selectItem2)); InputStream result = serializer.entity(metadata, edmEntitySet.getEntityType(), entity, EntitySerializerOptions.with() - .contextURL(ContextURL.with().entitySet(edmEntitySet).suffix(Suffix.ENTITY).build()) - .select(select) - .build()).getContent(); + .contextURL(ContextURL.with().entitySet(edmEntitySet).suffix(Suffix.ENTITY).build()) + .select(select) + .build()).getContent(); final String resultString = IOUtils.toString(result); final String expectedResult = "{\"@odata.context\":\"$metadata#ESTwoPrim/$entity\"," + + "\"@odata.metadataEtag\":\"W/\\\"metadataETag\\\"\"," + "\"PropertyInt16\":32766,\"PropertyString\":\"Test String1\"}"; Assert.assertEquals(expectedResult, resultString); } @@ -433,14 +444,15 @@ public class ODataJsonSerializerTest { InputStream result = serializer .entityCollection(metadata, entityType, entitySet, EntityCollectionSerializerOptions.with() - .contextURL(ContextURL.with().entitySet(edmEntitySet) - .selectList(helper.buildContextURLSelectList(entityType, null, select)) - .build()) + .contextURL(ContextURL.with().entitySet(edmEntitySet) + .selectList(helper.buildContextURLSelectList(entityType, null, select)) + .build()) .select(select) .build()).getContent(); final String resultString = IOUtils.toString(result); Assert.assertEquals("{" + "\"@odata.context\":\"$metadata#ESCompComp(PropertyComp/PropertyComp/PropertyString)\"," + + "\"@odata.metadataEtag\":\"W/\\\"metadataETag\\\"\"," + "\"value\":[" + "{\"PropertyComp\":{\"PropertyComp\":{\"PropertyString\":\"String 1\"}}}," + "{\"PropertyComp\":{\"PropertyComp\":{\"PropertyString\":\"String 2\"}}}]}", @@ -458,13 +470,14 @@ public class ODataJsonSerializerTest { final String resultString = IOUtils.toString(serializer .entityCollection(metadata, entityType, entitySet, EntityCollectionSerializerOptions.with() - .contextURL(ContextURL.with().entitySet(edmEntitySet) - .selectList(helper.buildContextURLSelectList(entityType, null, select)) - .build()) + .contextURL(ContextURL.with().entitySet(edmEntitySet) + .selectList(helper.buildContextURLSelectList(entityType, null, select)) + .build()) .select(select) .build()).getContent()); Assert.assertEquals("{" + "\"@odata.context\":\"$metadata#ESCompComp(PropertyComp/PropertyComp)\"," + + "\"@odata.metadataEtag\":\"W/\\\"metadataETag\\\"\"," + "\"value\":[" + "{\"PropertyComp\":{\"PropertyComp\":{\"PropertyInt16\":123,\"PropertyString\":\"String 1\"}}}," + "{\"PropertyComp\":{\"PropertyComp\":{\"PropertyInt16\":987,\"PropertyString\":\"String 2\"}}}]}", @@ -479,11 +492,12 @@ public class ODataJsonSerializerTest { ExpandSelectMock.mockExpandItem(edmEntitySet, "NavPropertyETAllPrimOne"))); InputStream result = serializer.entity(metadata, edmEntitySet.getEntityType(), entity, EntitySerializerOptions.with() - .contextURL(ContextURL.with().entitySet(edmEntitySet).suffix(Suffix.ENTITY).build()) - .expand(expand) - .build()).getContent(); + .contextURL(ContextURL.with().entitySet(edmEntitySet).suffix(Suffix.ENTITY).build()) + .expand(expand) + .build()).getContent(); final String resultString = IOUtils.toString(result); Assert.assertEquals("{\"@odata.context\":\"$metadata#ESTwoPrim/$entity\"," + + "\"@odata.metadataEtag\":\"W/\\\"metadataETag\\\"\"," + "\"PropertyInt16\":32767,\"PropertyString\":\"Test String4\"," + "\"NavPropertyETAllPrimOne\":{" + "\"PropertyInt16\":32767," @@ -518,13 +532,14 @@ public class ODataJsonSerializerTest { final String resultString = IOUtils.toString(serializer .entity(metadata, entityType, entity, EntitySerializerOptions.with() - .contextURL(ContextURL.with().entitySet(edmEntitySet) - .selectList(helper.buildContextURLSelectList(entityType, expand, select)) - .suffix(Suffix.ENTITY).build()) + .contextURL(ContextURL.with().entitySet(edmEntitySet) + .selectList(helper.buildContextURLSelectList(entityType, expand, select)) + .suffix(Suffix.ENTITY).build()) .expand(expand) .build()).getContent()); Assert.assertEquals("{" + "\"@odata.context\":\"$metadata#ESTwoPrim(NavPropertyETAllPrimOne(PropertyDate))/$entity\"," + + "\"@odata.metadataEtag\":\"W/\\\"metadataETag\\\"\"," + "\"PropertyInt16\":32767,\"PropertyString\":\"Test String4\"," + "\"NavPropertyETAllPrimOne\":{\"PropertyDate\":\"2012-12-03\"}}", resultString); @@ -545,14 +560,15 @@ public class ODataJsonSerializerTest { final String resultString = IOUtils.toString(serializer .entity(metadata, entityType, entity, EntitySerializerOptions.with() - .contextURL(ContextURL.with().entitySet(edmEntitySet) - .selectList(helper.buildContextURLSelectList(entityType, expand, select)) - .suffix(Suffix.ENTITY).build()) + .contextURL(ContextURL.with().entitySet(edmEntitySet) + .selectList(helper.buildContextURLSelectList(entityType, expand, select)) + .suffix(Suffix.ENTITY).build()) .expand(expand) .select(select) .build()).getContent()); Assert.assertEquals("{" + "\"@odata.context\":\"$metadata#ESAllPrim(PropertySByte)/$entity\"," + + "\"@odata.metadataEtag\":\"W/\\\"metadataETag\\\"\"," + "\"PropertySByte\":127," + "\"NavPropertyETTwoPrimOne\":{\"PropertyInt16\":32767,\"PropertyString\":\"Test String4\"}," + "\"NavPropertyETTwoPrimMany\":[{\"PropertyInt16\":-365,\"PropertyString\":\"Test String2\"}]}", @@ -572,14 +588,15 @@ public class ODataJsonSerializerTest { final String resultString = IOUtils.toString(serializer .entity(metadata, entityType, entity, EntitySerializerOptions.with() - .contextURL(ContextURL.with().entitySet(edmEntitySet) - .selectList(helper.buildContextURLSelectList(entityType, expand, select)) - .suffix(Suffix.ENTITY).build()) + .contextURL(ContextURL.with().entitySet(edmEntitySet) + .selectList(helper.buildContextURLSelectList(entityType, expand, select)) + .suffix(Suffix.ENTITY).build()) .expand(expand) .select(select) .build()).getContent()); Assert.assertEquals("{" + "\"@odata.context\":\"$metadata#ESAllPrim(PropertyTimeOfDay)/$entity\"," + + "\"@odata.metadataEtag\":\"W/\\\"metadataETag\\\"\"," + "\"PropertyTimeOfDay\":\"23:49:14\"," + "\"NavPropertyETTwoPrimOne\":null,\"NavPropertyETTwoPrimMany\":[]}", resultString); @@ -603,13 +620,14 @@ public class ODataJsonSerializerTest { final String resultString = IOUtils.toString(serializer .entity(metadata, entityType, entity, EntitySerializerOptions.with() - .contextURL(ContextURL.with().entitySet(edmEntitySet) - .selectList(helper.buildContextURLSelectList(entityType, expand, select)) - .suffix(Suffix.ENTITY).build()) + .contextURL(ContextURL.with().entitySet(edmEntitySet) + .selectList(helper.buildContextURLSelectList(entityType, expand, select)) + .suffix(Suffix.ENTITY).build()) .expand(expand) .build()).getContent()); Assert.assertEquals("{" + "\"@odata.context\":\"$metadata#ESTwoPrim(NavPropertyETAllPrimMany(PropertyInt32))/$entity\"," + + "\"@odata.metadataEtag\":\"W/\\\"metadataETag\\\"\"," + "\"PropertyInt16\":-365,\"PropertyString\":\"Test String2\"," + "\"NavPropertyETAllPrimMany\":[" + "{\"PropertyInt32\":-2147483648,\"NavPropertyETTwoPrimOne\":null,\"NavPropertyETTwoPrimMany\":[]}," @@ -627,14 +645,15 @@ public class ODataJsonSerializerTest { final EdmProperty edmProperty = (EdmProperty) edmEntitySet.getEntityType().getProperty("PropertyString"); final Property property = data.readAll(edmEntitySet).getEntities().get(0).getProperty(edmProperty.getName()); final String resultString = IOUtils.toString(serializer - .primitive((EdmPrimitiveType) edmProperty.getType(), property, + .primitive(metadata, (EdmPrimitiveType) edmProperty.getType(), property, PrimitiveSerializerOptions.with() - .contextURL(ContextURL.with() - .entitySet(edmEntitySet).keyPath("32767").navOrPropertyPath(edmProperty.getName()) - .build()) + .contextURL(ContextURL.with() + .entitySet(edmEntitySet).keyPath("32767").navOrPropertyPath(edmProperty.getName()) + .build()) .build()).getContent()); Assert.assertEquals("{" + "\"@odata.context\":\"$metadata#ESAllPrim(32767)/PropertyString\"," + + "\"@odata.metadataEtag\":\"W/\\\"metadataETag\\\"\"," + "\"value\":\"First Resource - positive values\"}", resultString); } @@ -644,11 +663,11 @@ public class ODataJsonSerializerTest { final EdmEntitySet edmEntitySet = entityContainer.getEntitySet("ESAllPrim"); final EdmProperty edmProperty = (EdmProperty) edmEntitySet.getEntityType().getProperty("PropertyString"); final Property property = new Property("Edm.String", edmProperty.getName(), ValueType.PRIMITIVE, null); - serializer.primitive((EdmPrimitiveType) edmProperty.getType(), property, + serializer.primitive(metadata, (EdmPrimitiveType) edmProperty.getType(), property, PrimitiveSerializerOptions.with() - .contextURL(ContextURL.with() - .entitySet(edmEntitySet).keyPath("4242").navOrPropertyPath(edmProperty.getName()) - .build()) + .contextURL(ContextURL.with() + .entitySet(edmEntitySet).keyPath("4242").navOrPropertyPath(edmProperty.getName()) + .build()) .build()); } @@ -659,14 +678,15 @@ public class ODataJsonSerializerTest { final Property property = data.readAll(edmEntitySet).getEntities().get(0).getProperty(edmProperty.getName()); final String resultString = IOUtils.toString(serializer - .primitiveCollection((EdmPrimitiveType) edmProperty.getType(), property, + .primitiveCollection(metadata, (EdmPrimitiveType) edmProperty.getType(), property, PrimitiveSerializerOptions.with() - .contextURL(ContextURL.with() - .entitySet(edmEntitySet).keyPath("1").navOrPropertyPath(edmProperty.getName()) - .build()) + .contextURL(ContextURL.with() + .entitySet(edmEntitySet).keyPath("1").navOrPropertyPath(edmProperty.getName()) + .build()) .build()).getContent()); Assert.assertEquals("{" + "\"@odata.context\":\"$metadata#ESCollAllPrim(1)/CollPropertyString\"," + + "\"@odata.metadataEtag\":\"W/\\\"metadataETag\\\"\"," + "\"value\":[\"[email protected]\",\"[email protected]\",\"[email protected]\"]}", resultString); } @@ -680,12 +700,13 @@ public class ODataJsonSerializerTest { final String resultString = IOUtils.toString(serializer .complex(metadata, (EdmComplexType) edmProperty.getType(), property, ComplexSerializerOptions.with() - .contextURL(ContextURL.with() - .entitySet(edmEntitySet).keyPath("32767").navOrPropertyPath(edmProperty.getName()) - .build()) + .contextURL(ContextURL.with() + .entitySet(edmEntitySet).keyPath("32767").navOrPropertyPath(edmProperty.getName()) + .build()) .build()).getContent()); Assert.assertEquals("{" + "\"@odata.context\":\"$metadata#ESMixPrimCollComp(32767)/PropertyComp\"," + + "\"@odata.metadataEtag\":\"W/\\\"metadataETag\\\"\"," + "\"PropertyInt16\":111,\"PropertyString\":\"TEST A\"}", resultString); } @@ -699,61 +720,68 @@ public class ODataJsonSerializerTest { final String resultString = IOUtils.toString(serializer .complexCollection(metadata, (EdmComplexType) edmProperty.getType(), property, ComplexSerializerOptions.with() - .contextURL(ContextURL.with() - .entitySet(edmEntitySet).keyPath("32767").navOrPropertyPath(edmProperty.getName()) - .build()) + .contextURL(ContextURL.with() + .entitySet(edmEntitySet).keyPath("32767").navOrPropertyPath(edmProperty.getName()) + .build()) .build()).getContent()); Assert.assertEquals("{" + "\"@odata.context\":\"$metadata#ESMixPrimCollComp(32767)/CollPropertyComp\"," + + "\"@odata.metadataEtag\":\"W/\\\"metadataETag\\\"\"," + "\"value\":[{\"PropertyInt16\":123,\"PropertyString\":\"TEST 1\"}," + "{\"PropertyInt16\":456,\"PropertyString\":\"TEST 2\"}," + "{\"PropertyInt16\":789,\"PropertyString\":\"TEST 3\"}]}", resultString); } - + @Test public void entityReference() throws Exception { final EdmEntitySet edmEntitySet = entityContainer.getEntitySet("ESAllPrim"); final Entity entity = data.readAll(edmEntitySet).getEntities().get(0); - + final SerializerResult serializerResult = serializer.reference(metadata, edmEntitySet, entity, ContextURL.with().suffix(Suffix.REFERENCE).build()); final String resultString = IOUtils.toString(serializerResult.getContent()); - - Assert.assertEquals("{\"@odata.context\":\"$metadata#$ref\",\"@odata.id\":\"ESAllPrim(32767)\"}", resultString); + + Assert.assertEquals("{\"@odata.context\":\"$metadata#$ref\"," + + "\"@odata.metadataEtag\":\"W/\\\"metadataETag\\\"\"," + + "\"@odata.id\":\"ESAllPrim(32767)\"}", + resultString); } - + @Test public void entityCollectionReference() throws Exception { final EdmEntitySet edmEntitySet = entityContainer.getEntitySet("ESAllPrim"); final EntityCollection entityCollection = data.readAll(edmEntitySet); - final SerializerResult serializerResult = serializer.referenceCollection(metadata, - edmEntitySet, - entityCollection, - ContextURL.with().asCollection() - .suffix(Suffix.REFERENCE).build()); - + final SerializerResult serializerResult = serializer.referenceCollection(metadata, + edmEntitySet, + entityCollection, + ContextURL.with().asCollection().suffix(Suffix.REFERENCE).build()); + final String resultString = IOUtils.toString(serializerResult.getContent()); - Assert.assertEquals("{\"@odata.context\":\"$metadata#Collection($ref)\",\"value\":[{\"@odata.id\":" + - "\"ESAllPrim(32767)\"},{\"@odata.id\":\"ESAllPrim(-32768)\"},{\"@odata.id\":" + - "\"ESAllPrim(0)\"}]}", resultString); + Assert.assertEquals("{\"@odata.context\":\"$metadata#Collection($ref)\"," + + "\"@odata.metadataEtag\":\"W/\\\"metadataETag\\\"\"," + + "\"value\":[{\"@odata.id\":\"ESAllPrim(32767)\"}," + + "{\"@odata.id\":\"ESAllPrim(-32768)\"}," + + "{\"@odata.id\":\"ESAllPrim(0)\"}]}", + resultString); } - + @Test public void entityCollectionReferenceEmpty() throws Exception { final EdmEntitySet edmEntitySet = entityContainer.getEntitySet("ESAllPrim"); final EntityCollection entityCollection = new EntityCollection(); - - final SerializerResult serializerResult = serializer.referenceCollection(metadata, - edmEntitySet, - entityCollection, - ContextURL.with().asCollection() - .suffix(Suffix.REFERENCE).build()); - + + final SerializerResult serializerResult = serializer.referenceCollection(metadata, + edmEntitySet, + entityCollection, + ContextURL.with().asCollection().suffix(Suffix.REFERENCE).build()); + final String resultString = IOUtils.toString(serializerResult.getContent()); - Assert.assertEquals("{\"@odata.context\":\"$metadata#Collection($ref)\",\"value\":[]}", resultString); + Assert.assertEquals("{\"@odata.context\":\"$metadata#Collection($ref)\"," + + "\"@odata.metadataEtag\":\"W/\\\"metadataETag\\\"\"," + + "\"value\":[]}", resultString); } } http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/a604fa78/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/json/ServiceDocumentTest.java ---------------------------------------------------------------------- diff --git a/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/json/ServiceDocumentTest.java b/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/json/ServiceDocumentTest.java index 4d6ac45..ae9e314 100644 --- a/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/json/ServiceDocumentTest.java +++ b/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/json/ServiceDocumentTest.java @@ -21,92 +21,28 @@ package org.apache.olingo.server.core.serializer.json; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; import java.io.InputStream; -import java.util.ArrayList; -import java.util.List; +import java.util.Collections; import org.apache.commons.io.IOUtils; -import org.apache.olingo.commons.api.edm.Edm; -import org.apache.olingo.commons.api.edm.EdmEntityContainer; -import org.apache.olingo.commons.api.edm.EdmEntitySet; -import org.apache.olingo.commons.api.edm.EdmFunctionImport; -import org.apache.olingo.commons.api.edm.EdmSingleton; import org.apache.olingo.commons.api.format.ODataFormat; import org.apache.olingo.server.api.OData; +import org.apache.olingo.server.api.ServiceMetadata; +import org.apache.olingo.server.api.edmx.EdmxReference; import org.apache.olingo.server.api.serializer.ODataSerializer; -import org.junit.Before; +import org.apache.olingo.server.tecsvc.MetadataETagSupport; +import org.apache.olingo.server.tecsvc.provider.EdmTechProvider; import org.junit.Test; public class ServiceDocumentTest { - private Edm edm; - - @Before - public void before() { - - EdmEntitySet edmEntitySet1 = mock(EdmEntitySet.class); - when(edmEntitySet1.getName()).thenReturn("entitySetName1"); - when(edmEntitySet1.isIncludeInServiceDocument()).thenReturn(true); - - EdmEntitySet edmEntitySet2 = mock(EdmEntitySet.class); - when(edmEntitySet2.getName()).thenReturn("entitySetName2"); - when(edmEntitySet2.isIncludeInServiceDocument()).thenReturn(true); - - EdmEntitySet edmEntitySet3 = mock(EdmEntitySet.class); - when(edmEntitySet3.getName()).thenReturn("entitySetName3"); - when(edmEntitySet3.isIncludeInServiceDocument()).thenReturn(false); - - List<EdmEntitySet> entitySets = new ArrayList<EdmEntitySet>(); - entitySets.add(edmEntitySet1); - entitySets.add(edmEntitySet2); - entitySets.add(edmEntitySet3); - - EdmFunctionImport functionImport1 = mock(EdmFunctionImport.class); - when(functionImport1.getName()).thenReturn("functionImport1"); - when(functionImport1.isIncludeInServiceDocument()).thenReturn(true); - - EdmFunctionImport functionImport2 = mock(EdmFunctionImport.class); - when(functionImport2.getName()).thenReturn("functionImport2"); - when(functionImport2.isIncludeInServiceDocument()).thenReturn(true); - - EdmFunctionImport functionImport3 = mock(EdmFunctionImport.class); - when(functionImport3.getName()).thenReturn("functionImport3"); - when(functionImport3.isIncludeInServiceDocument()).thenReturn(false); - - List<EdmFunctionImport> functionImports = new ArrayList<EdmFunctionImport>(); - functionImports.add(functionImport1); - functionImports.add(functionImport2); - functionImports.add(functionImport3); - - EdmSingleton singleton1 = mock(EdmSingleton.class); - when(singleton1.getName()).thenReturn("singleton1"); - - EdmSingleton singleton2 = mock(EdmSingleton.class); - when(singleton2.getName()).thenReturn("singleton2"); - - EdmSingleton singleton3 = mock(EdmSingleton.class); - when(singleton3.getName()).thenReturn("singleton3"); - - List<EdmSingleton> singletons = new ArrayList<EdmSingleton>(); - singletons.add(singleton1); - singletons.add(singleton2); - singletons.add(singleton3); - - EdmEntityContainer edmEntityContainer = mock(EdmEntityContainer.class); - when(edmEntityContainer.getEntitySets()).thenReturn(entitySets); - when(edmEntityContainer.getFunctionImports()).thenReturn(functionImports); - when(edmEntityContainer.getSingletons()).thenReturn(singletons); - - edm = mock(Edm.class); - when(edm.getEntityContainer(null)).thenReturn(edmEntityContainer); - } + private static final ServiceMetadata metadata = OData.newInstance().createServiceMetadata( + new EdmTechProvider(), Collections.<EdmxReference> emptyList(), new MetadataETagSupport("W/\"metadataETag\"")); @Test public void writeServiceDocumentJson() throws Exception { - String serviceRoot = "http://localhost:8080/odata.svc"; + final String serviceRoot = "http://localhost:8080/odata.svc"; OData server = OData.newInstance(); assertNotNull(server); @@ -114,20 +50,26 @@ public class ServiceDocumentTest { ODataSerializer serializer = server.createSerializer(ODataFormat.JSON); assertNotNull(serializer); - InputStream result = serializer.serviceDocument(edm, serviceRoot).getContent(); + InputStream result = serializer.serviceDocument(metadata, serviceRoot).getContent(); assertNotNull(result); - String jsonString = IOUtils.toString(result); + final String jsonString = IOUtils.toString(result); + + assertTrue(jsonString.contains(metadata.getServiceMetadataETagSupport().getMetadataETag().replace("\"", "\\\""))); - assertTrue(jsonString.contains("entitySetName1")); - assertTrue(jsonString.contains("entitySetName2")); - assertFalse(jsonString.contains("entitySetName3")); + assertTrue(jsonString.contains("ESAllPrim")); + assertTrue(jsonString.contains("ESCollAllPrim")); + assertTrue(jsonString.contains("ESKeyNavCont")); + assertFalse(jsonString.contains("ESInvisible")); - assertTrue(jsonString.contains("functionImport1")); - assertTrue(jsonString.contains("functionImport2")); - assertFalse(jsonString.contains("functionImport3")); + assertTrue(jsonString.contains("FINRTInt16")); + assertTrue(jsonString.contains("FINRTCollETMixPrimCollCompTwoParam")); + assertTrue(jsonString.contains("FICRTCollESKeyNavContParam")); + assertFalse(jsonString.contains("FINInvisibleRTInt16")); + assertTrue(jsonString.contains("FunctionImport")); - assertTrue(jsonString.contains("singleton1")); - assertTrue(jsonString.contains("singleton2")); - assertTrue(jsonString.contains("singleton3")); + assertTrue(jsonString.contains("SI")); + assertTrue(jsonString.contains("SINav")); + assertTrue(jsonString.contains("SIMedia")); + assertTrue(jsonString.contains("Singleton")); } } http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/a604fa78/samples/server/src/main/java/org/apache/olingo/server/sample/processor/CarsProcessor.java ---------------------------------------------------------------------- diff --git a/samples/server/src/main/java/org/apache/olingo/server/sample/processor/CarsProcessor.java b/samples/server/src/main/java/org/apache/olingo/server/sample/processor/CarsProcessor.java index 4305415..17c9a29 100644 --- a/samples/server/src/main/java/org/apache/olingo/server/sample/processor/CarsProcessor.java +++ b/samples/server/src/main/java/org/apache/olingo/server/sample/processor/CarsProcessor.java @@ -260,7 +260,7 @@ public class CarsProcessor implements EntityCollectionProcessor, EntityProcessor InputStream serializerContent = complex ? serializer.complex(edm, (EdmComplexType) edmProperty.getType(), property, ComplexSerializerOptions.with().contextURL(contextURL).build()).getContent() : - serializer.primitive((EdmPrimitiveType) edmProperty.getType(), property, + serializer.primitive(edm, (EdmPrimitiveType) edmProperty.getType(), property, PrimitiveSerializerOptions.with() .contextURL(contextURL) .scale(edmProperty.getScale())
