blob: 0ade205e3bd4bebded9c69ac8fa855977da7976c [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF 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.apache.olingo.server.core.serializer.json;
import java.io.InputStream;
import java.net.URI;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.apache.commons.io.IOUtils;
import org.apache.olingo.commons.api.data.ContextURL;
import org.apache.olingo.commons.api.data.DeletedEntity;
import org.apache.olingo.commons.api.data.DeletedEntity.Reason;
import org.apache.olingo.commons.api.data.Delta;
import org.apache.olingo.commons.api.data.DeltaLink;
import org.apache.olingo.commons.api.data.Entity;
import org.apache.olingo.commons.api.data.ContextURL.Suffix;
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.edmx.EdmxReference;
import org.apache.olingo.commons.api.format.ContentType;
import org.apache.olingo.server.api.OData;
import org.apache.olingo.server.api.ServiceMetadata;
import org.apache.olingo.server.api.serializer.EdmDeltaSerializer;
import org.apache.olingo.server.api.serializer.EntityCollectionSerializerOptions;
import org.apache.olingo.server.api.serializer.SerializerException;
import org.apache.olingo.server.api.uri.UriHelper;
import org.apache.olingo.server.api.uri.queryoption.CountOption;
import org.apache.olingo.server.api.uri.queryoption.ExpandOption;
import org.apache.olingo.server.api.uri.queryoption.SelectOption;
import org.apache.olingo.server.core.serializer.ExpandSelectMock;
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.junit.Assert;
import org.junit.Test;
import org.mockito.Mockito;
public class JsonDeltaSerializerTest {
final EdmDeltaSerializer ser;
private static final OData odata = OData.newInstance();
private static final ServiceMetadata metadata = odata.createServiceMetadata(
new EdmTechProvider(), Collections.<EdmxReference> emptyList(), new MetadataETagSupport("W/\"metadataETag\""));
private static final EdmEntityContainer entityContainer = metadata.getEdm().getEntityContainer();
private final DataProvider data = new DataProvider(odata, metadata.getEdm());
public JsonDeltaSerializerTest() throws SerializerException {
List<String> versions = new ArrayList<String>();
versions.add("4.0");
ser = OData.newInstance().createEdmDeltaSerializer(ContentType.JSON, versions);
}
@Test
public void addedDeltaLink() throws Exception {
final EdmEntitySet edmEntitySet = entityContainer.getEntitySet("ESDelta");
Delta delta = new Delta();
List<DeltaLink> addedLinks = new ArrayList<DeltaLink>();
DeltaLink link1 = new DeltaLink();
link1.setRelationship("NavPropertyETAllPrimOne");
link1.setSource(new URI("ESDelta(100)"));
link1.setTarget(new URI("ESAllPrim(0)"));
addedLinks.add(link1 );
delta.getAddedLinks().addAll(addedLinks );
InputStream stream = ser.entityCollection(metadata, edmEntitySet.getEntityType(), delta ,
EntityCollectionSerializerOptions.with()
.contextURL(ContextURL.with().entitySet(edmEntitySet).build())
.build()).getContent();
String jsonString = IOUtils.toString(stream);
final String expectedResult = "{"
+ "\"@odata.context\":\"$metadata#ESDelta/$delta\",\"value\":[{"
+ "\"@odata.context\":\"#ESDelta/$link\",\"source\":\"ESDelta(100)\","
+ "\"relationship\":\"NavPropertyETAllPrimOne\","
+ "\"target\":\"ESAllPrim(0)\"}]"
+ "}";
Assert.assertNotNull(jsonString);
Assert.assertEquals(expectedResult, jsonString);
}
@Test
public void deletedDeltaLink() throws Exception {
final EdmEntitySet edmEntitySet = entityContainer.getEntitySet("ESDelta");
Delta delta = new Delta();
List<DeltaLink> deletedLinks = new ArrayList<DeltaLink>();
DeltaLink link1 = new DeltaLink();
link1.setRelationship("NavPropertyETAllPrimOne");
link1.setSource(new URI("ESDelta(100)"));
link1.setTarget(new URI("ESAllPrim(0)"));
deletedLinks.add(link1 );
delta.getDeletedLinks().addAll(deletedLinks);
InputStream stream = ser.entityCollection(metadata, edmEntitySet.getEntityType(), delta ,
EntityCollectionSerializerOptions.with()
.contextURL(ContextURL.with().entitySet(edmEntitySet).build())
.build()).getContent();
String jsonString = IOUtils.toString(stream);
final String expectedResult = "{"
+ "\"@odata.context\":\"$metadata#ESDelta/$delta\",\"value\":[{"
+ "\"@odata.context\":\"#ESDelta/$deletedLink\",\"source\":\"ESDelta(100)\","
+ "\"relationship\":\"NavPropertyETAllPrimOne\","
+ "\"target\":\"ESAllPrim(0)\"}]"
+ "}";
Assert.assertNotNull(jsonString);
Assert.assertEquals(expectedResult, jsonString);
}
@Test
public void deletedEntity() throws Exception {
final EdmEntitySet edmEntitySet = entityContainer.getEntitySet("ESDelta");
Delta delta = new Delta();
List<DeletedEntity> deletedEntity = new ArrayList<DeletedEntity>();
DeletedEntity entity1 = new DeletedEntity();
entity1.setId(new URI("ESDelta(100)"));
entity1.setReason(Reason.deleted);
DeletedEntity entity2 = new DeletedEntity();
entity2.setId(new URI("ESDelta(-32768)"));
entity2.setReason(Reason.changed);
deletedEntity.add(entity1);
deletedEntity.add(entity2);
delta.getDeletedEntities().addAll(deletedEntity);
InputStream stream = ser.entityCollection(metadata, edmEntitySet.getEntityType(), delta ,
EntityCollectionSerializerOptions.with()
.contextURL(ContextURL.with().entitySet(edmEntitySet).build())
.build()).getContent();
String jsonString = IOUtils.toString(stream);
final String expectedResult = "{"
+"\"@odata.context\":\"$metadata#ESDelta/$delta\",\"value\":[{"
+ "\"@odata.context\":\"#ESDelta(100)/$deletedEntity\","
+ "\"id\":\"ESDelta(100)\",\"reason\":\"deleted\"},{"
+ "\"@odata.context\":\"#ESDelta(-32768)/$deletedEntity\","
+ "\"id\":\"ESDelta(-32768)\",\"reason\":\"changed\"}]"
+ "}";
Assert.assertNotNull(jsonString);
Assert.assertEquals(expectedResult, jsonString);
}
@Test
public void addedChangedDeltaEntity() throws Exception {
final EdmEntitySet edmEntitySet = entityContainer.getEntitySet("ESDelta");
Delta delta = new Delta();
final Entity entity = data.readAll(edmEntitySet).getEntities().get(0);
final Entity entity2 = data.readAll(edmEntitySet).getEntities().get(1);
List<Entity> addedEntity = new ArrayList<Entity>();
Entity changedEntity = new Entity();
changedEntity.setId(entity2.getId());
changedEntity.addProperty(entity2.getProperty("PropertyString"));
addedEntity.add(entity);
addedEntity.add(changedEntity);
delta.getEntities().addAll(addedEntity);
InputStream stream = ser.entityCollection(metadata, edmEntitySet.getEntityType(), delta ,
EntityCollectionSerializerOptions.with()
.contextURL(ContextURL.with().entitySet(edmEntitySet).build())
.build()).getContent();
String jsonString = IOUtils.toString(stream);
final String expectedResult = "{"
+ "\"@odata.context\":\"$metadata#ESDelta/$delta\",\"value\":[{"
+ "\"@odata.id\":\"ESDelta(32767)\",\"PropertyInt16\":32767,"
+ "\"PropertyString\":\"Number:32767\"},{\"@odata.id\":\"ESDelta(-32768)\","
+ "\"PropertyString\":\"Number:-32768\"}]"
+ "}";
Assert.assertNotNull(jsonString);
Assert.assertEquals(expectedResult, jsonString);
}
@Test
public void basicDeltaTest() throws Exception {
final EdmEntitySet edmEntitySet = entityContainer.getEntitySet("ESDelta");
Delta delta = new Delta();
List<DeltaLink> addedLinks = new ArrayList<DeltaLink>();
DeltaLink link1 = new DeltaLink();
link1.setRelationship("NavPropertyETAllPrimOne");
link1.setSource(new URI("ESDelta(100)"));
link1.setTarget(new URI("ESAllPrim(0)"));
addedLinks.add(link1 );
delta.getAddedLinks().addAll(addedLinks );
List<DeltaLink> deletedLinks = new ArrayList<DeltaLink>();
DeltaLink delLink = new DeltaLink();
delLink.setRelationship("NavPropertyETAllPrimOne");
delLink.setSource(new URI("ESDelta(100)"));
delLink.setTarget(new URI("ESAllPrim(0)"));
deletedLinks.add(delLink );
delta.getDeletedLinks().addAll(deletedLinks);
List<DeletedEntity> deletedEntity = new ArrayList<DeletedEntity>();
DeletedEntity delEntity1 = new DeletedEntity();
delEntity1.setId(new URI("ESDelta(100)"));
delEntity1.setReason(Reason.deleted);
DeletedEntity delEntity2 = new DeletedEntity();
delEntity2.setId(new URI("ESDelta(-32768)"));
delEntity2.setReason(Reason.changed);
deletedEntity.add(delEntity1);
deletedEntity.add(delEntity2);
delta.getDeletedEntities().addAll(deletedEntity);
final Entity entity = data.readAll(edmEntitySet).getEntities().get(0);
final Entity entity2 = data.readAll(edmEntitySet).getEntities().get(1);
List<Entity> addedEntity = new ArrayList<Entity>();
Entity changedEntity = new Entity();
changedEntity.setId(entity2.getId());
changedEntity.addProperty(entity2.getProperty("PropertyString"));
addedEntity.add(entity);
addedEntity.add(changedEntity);
delta.getEntities().addAll(addedEntity);
InputStream stream = ser.entityCollection(metadata, edmEntitySet.getEntityType(), delta ,
EntityCollectionSerializerOptions.with()
.contextURL(ContextURL.with().entitySet(edmEntitySet).build())
.build()).getContent();
String jsonString = IOUtils.toString(stream);
final String expectedResult = "{"
+"\"@odata.context\":\"$metadata#ESDelta/$delta\",\"value\":[{"
+ "\"@odata.id\":\"ESDelta(32767)\",\"PropertyInt16\":32767,"
+ "\"PropertyString\":\"Number:32767\"},{\"@odata.id\":\"ESDelta(-32768)\","
+ "\"PropertyString\":\"Number:-32768\"},{\"@odata.context\":\"#ESDelta(100)/$deletedEntity\","
+ "\"id\":\"ESDelta(100)\",\"reason\":\"deleted\"},"
+ "{\"@odata.context\":\"#ESDelta(-32768)/$deletedEntity\",\"id\":\"ESDelta(-32768)\","
+ "\"reason\":\"changed\"},{\"@odata.context\":\"#ESDelta/$link\",\"source\":\"ESDelta(100)\","
+ "\"relationship\":\"NavPropertyETAllPrimOne\",\"target\":\"ESAllPrim(0)\"},{\"@odata.context\":"
+ "\"#ESDelta/$deletedLink\",\"source\":\"ESDelta(100)\",\"relationship\":\"NavPropertyETAllPrimOne\","
+ "\"target\":\"ESAllPrim(0)\"}]"
+ "}";
Assert.assertNotNull(jsonString);
Assert.assertEquals(expectedResult, jsonString);
}
@Test
public void addedDifferentdDeltaEntity() throws Exception {
final EdmEntitySet edmEntitySet = entityContainer.getEntitySet("ESAllPrim");
final EdmEntitySet edmEntitySet2 = entityContainer.getEntitySet("ESDelta");
Delta delta = new Delta();
final Entity entity = data.readAll(edmEntitySet).getEntities().get(0);
List<Entity> addedEntity = new ArrayList<Entity>();
addedEntity.add(entity);
delta.getEntities().addAll(addedEntity);
InputStream stream = ser.entityCollection(metadata, edmEntitySet2.getEntityType(), delta ,
EntityCollectionSerializerOptions.with()
.contextURL(ContextURL.with().entitySet(edmEntitySet2).build())
.build()).getContent();
String jsonString = IOUtils.toString(stream);
final String expectedResult = "{"
+"\"@odata.context\":\"$metadata#ESDelta/$delta\",\"value\":[{"
+ "\"@odata.context\":\"#ESAllPrim/$entity\",\"@odata.id\":\"ESAllPrim(32767)\","
+ "\"PropertyInt16\":32767,\"PropertyString\":\"First Resource - positive values\"}]"
+ "}";
Assert.assertNotNull(jsonString);
Assert.assertEquals(expectedResult, jsonString);
}
@Test
public void testDeltaToken() throws Exception {
final EdmEntitySet edmEntitySet = entityContainer.getEntitySet("ESDelta");
Delta delta = new Delta();
List<DeltaLink> addedLinks = new ArrayList<DeltaLink>();
DeltaLink link1 = new DeltaLink();
link1.setRelationship("NavPropertyETAllPrimOne");
link1.setSource(new URI("ESDelta(100)"));
link1.setTarget(new URI("ESAllPrim(0)"));
addedLinks.add(link1 );
delta.getAddedLinks().addAll(addedLinks );
delta.setDeltaLink(new URI("23042017"));
InputStream stream = ser.entityCollection(metadata, edmEntitySet.getEntityType(), delta ,
EntityCollectionSerializerOptions.with()
.contextURL(ContextURL.with().entitySet(edmEntitySet).build())
.build()).getContent();
String jsonString = IOUtils.toString(stream);
final String expectedResult = "{"
+ "\"@odata.context\":\"$metadata#ESDelta/$delta\",\"value\":[{"
+ "\"@odata.context\":\"#ESDelta/$link\",\"source\":\"ESDelta(100)\","
+ "\"relationship\":\"NavPropertyETAllPrimOne\","
+ "\"target\":\"ESAllPrim(0)\"}],"
+ "\"@odata.deltaLink\":\"23042017\""
+ "}";
Assert.assertNotNull(jsonString);
Assert.assertEquals(expectedResult, jsonString);
}
@Test
public void testSkipToken() throws Exception {
final EdmEntitySet edmEntitySet = entityContainer.getEntitySet("ESDelta");
Delta delta = new Delta();
List<DeltaLink> addedLinks = new ArrayList<DeltaLink>();
DeltaLink link1 = new DeltaLink();
link1.setRelationship("NavPropertyETAllPrimOne");
link1.setSource(new URI("ESDelta(100)"));
link1.setTarget(new URI("ESAllPrim(0)"));
addedLinks.add(link1 );
delta.getAddedLinks().addAll(addedLinks );
delta.setNext(new URI("23042017"));
InputStream stream = ser.entityCollection(metadata, edmEntitySet.getEntityType(), delta ,
EntityCollectionSerializerOptions.with()
.contextURL(ContextURL.with().entitySet(edmEntitySet).build())
.build()).getContent();
String jsonString = IOUtils.toString(stream);
final String expectedResult = "{"
+ "\"@odata.context\":\"$metadata#ESDelta/$delta\",\"value\":[{"
+ "\"@odata.context\":\"#ESDelta/$link\",\"source\":\"ESDelta(100)\","
+ "\"relationship\":\"NavPropertyETAllPrimOne\","
+ "\"target\":\"ESAllPrim(0)\"}],"
+ "\"@odata.nextLink\":\"23042017\""
+ "}";
Assert.assertNotNull(jsonString);
Assert.assertEquals(expectedResult, jsonString);
}
@Test
public void testSkipDeltaToken() throws Exception {
final EdmEntitySet edmEntitySet = entityContainer.getEntitySet("ESDelta");
Delta delta = new Delta();
List<DeltaLink> addedLinks = new ArrayList<DeltaLink>();
DeltaLink link1 = new DeltaLink();
link1.setRelationship("NavPropertyETAllPrimOne");
link1.setSource(new URI("ESDelta(100)"));
link1.setTarget(new URI("ESAllPrim(0)"));
addedLinks.add(link1 );
delta.getAddedLinks().addAll(addedLinks );
delta.setNext(new URI("23042017"));
delta.setDeltaLink(new URI("02052017"));
InputStream stream = ser.entityCollection(metadata, edmEntitySet.getEntityType(), delta ,
EntityCollectionSerializerOptions.with()
.contextURL(ContextURL.with().entitySet(edmEntitySet).build())
.build()).getContent();
String jsonString = IOUtils.toString(stream);
final String expectedResult = "{"
+ "\"@odata.context\":\"$metadata#ESDelta/$delta\",\"value\":[{"
+ "\"@odata.context\":\"#ESDelta/$link\",\"source\":\"ESDelta(100)\","
+ "\"relationship\":\"NavPropertyETAllPrimOne\","
+ "\"target\":\"ESAllPrim(0)\"}],"
+ "\"@odata.nextLink\":\"23042017\""
+ "}";
Assert.assertNotNull(jsonString);
Assert.assertEquals(expectedResult, jsonString);
}
@Test
public void testDeltaCount() throws Exception {
final EdmEntitySet edmEntitySet = entityContainer.getEntitySet("ESDelta");
CountOption countOption = Mockito.mock(CountOption.class);
Mockito.when(countOption.getValue()).thenReturn(true);
Delta delta = new Delta();
delta.setCount(1);
List<DeltaLink> addedLinks = new ArrayList<DeltaLink>();
DeltaLink link1 = new DeltaLink();
link1.setRelationship("NavPropertyETAllPrimOne");
link1.setSource(new URI("ESDelta(100)"));
link1.setTarget(new URI("ESAllPrim(0)"));
addedLinks.add(link1 );
delta.getAddedLinks().addAll(addedLinks );
delta.setDeltaLink(new URI("23042017"));
InputStream stream = ser.entityCollection(metadata, edmEntitySet.getEntityType(), delta ,
EntityCollectionSerializerOptions.with()
.contextURL(ContextURL.with().entitySet(edmEntitySet).build())
.count(countOption)
.build()).getContent();
String jsonString = IOUtils.toString(stream);
final String expectedResult = "{"
+ "\"@odata.context\":\"$metadata#ESDelta/$delta\","
+ "\"@odata.count\":\"1\","
+ "\"value\":[{"
+ "\"@odata.context\":\"#ESDelta/$link\",\"source\":\"ESDelta(100)\","
+ "\"relationship\":\"NavPropertyETAllPrimOne\","
+ "\"target\":\"ESAllPrim(0)\"}],"
+ "\"@odata.deltaLink\":\"23042017\""
+ "}";
Assert.assertNotNull(jsonString);
Assert.assertEquals(expectedResult, jsonString);
}
@Test
public void testEmptyDelta() throws Exception {
final EdmEntitySet edmEntitySet = entityContainer.getEntitySet("ESDelta");
Delta delta = new Delta();
InputStream stream = ser.entityCollection(metadata, edmEntitySet.getEntityType(), delta ,
EntityCollectionSerializerOptions.with()
.contextURL(ContextURL.with().entitySet(edmEntitySet).build())
.build()).getContent();
String jsonString = IOUtils.toString(stream);
final String expectedResult = "{"
+ "\"@odata.context\":\"$metadata#ESDelta/$delta\",\"value\":[]"
+ "}";
Assert.assertNotNull(jsonString);
Assert.assertEquals(expectedResult, jsonString);
}
@Test
public void testDeltaForStream() throws Exception {
final EdmEntitySet edmEntitySet = entityContainer.getEntitySet("ESWithStream");
Delta delta = new Delta();
List<DeltaLink> addedLinks = new ArrayList<DeltaLink>();
DeltaLink link1 = new DeltaLink();
link1.setRelationship("NavPropertyETAllPrimOne");
link1.setSource(new URI("ESDelta(100)"));
link1.setTarget(new URI("ESAllPrim(0)"));
addedLinks.add(link1 );
delta.getAddedLinks().addAll(addedLinks );
InputStream stream = ser.entityCollection(metadata, edmEntitySet.getEntityType(), delta ,
EntityCollectionSerializerOptions.with()
.contextURL(ContextURL.with().entitySet(edmEntitySet).build())
.build()).getContent();
String jsonString = IOUtils.toString(stream);
final String expectedResult = "{"
+ "\"@odata.context\":\"$metadata#ESWithStream/$delta\","
+ "\"value\":[{\"@odata.context\":\"#ESWithStream/$link\","
+ "\"source\":\"ESDelta(100)\",\"relationship\":\"NavPropertyETAllPrimOne\","
+ "\"target\":\"ESAllPrim(0)\"}]"
+ "}";
Assert.assertNotNull(jsonString);
Assert.assertEquals(expectedResult, jsonString);
}
@Test
public void selectInDelta() throws Exception {
final EdmEntitySet edmEntitySet = entityContainer.getEntitySet("ESDelta");
final EdmEntityType entityType = edmEntitySet.getEntityType();
final UriHelper helper = odata.createUriHelper();
final SelectOption select = ExpandSelectMock.mockSelectOption(Collections.singletonList(
ExpandSelectMock.mockSelectItem(entityContainer.getEntitySet("ESAllPrim"), "PropertyString")));
final Entity entity = data.readAll(edmEntitySet).getEntities().get(0);
final Entity entity2 = data.readAll(edmEntitySet).getEntities().get(1);
Delta delta = new Delta();
List<Entity> addedEntity = new ArrayList<Entity>();
Entity changedEntity = new Entity();
changedEntity.setId(entity2.getId());
changedEntity.addProperty(entity2.getProperty("PropertyString"));
changedEntity.addProperty(entity2.getProperty("PropertyInt16"));
addedEntity.add(entity);
addedEntity.add(changedEntity);
delta.getEntities().addAll(addedEntity);
InputStream stream = ser.entityCollection(metadata, edmEntitySet.getEntityType(), delta ,
EntityCollectionSerializerOptions.with()
.contextURL(ContextURL.with().entitySet(edmEntitySet)
.selectList(helper.buildContextURLSelectList(entityType, null, select))
.suffix(Suffix.ENTITY).build())
.select(select).build()).getContent();
String jsonString = IOUtils.toString(stream);
Assert.assertEquals("{"
+"\"@odata.context\":\"$metadata#ESDelta(PropertyInt16,PropertyString)/$entity/$delta\","
+ "\"value\":[{\"@odata.id\":\"ESDelta(32767)\",\"PropertyString\":\"Number:32767\"},"
+ "{\"@odata.id\":\"ESDelta(-32768)\",\"PropertyString\":\"Number:-32768\"}]}",
jsonString);
}
@Test
public void testCollPropertyInDelta() throws Exception {
final EdmEntitySet edmEntitySet = entityContainer.getEntitySet("ESCollAllPrim");
final Entity entity = data.readAll(edmEntitySet).getEntities().get(0);
Delta delta = new Delta();
List<DeltaLink> addedLinks = new ArrayList<DeltaLink>();
List<Entity> addedEntities = new ArrayList<Entity>();
DeltaLink link1 = new DeltaLink();
link1.setRelationship("NavPropertyETAllPrimOne");
link1.setSource(new URI("ESDelta(100)"));
link1.setTarget(new URI("ESAllPrim(0)"));
addedLinks.add(link1 );
addedEntities.add(entity);
delta.getAddedLinks().addAll(addedLinks );
delta.getEntities().addAll(addedEntities);
InputStream stream = ser.entityCollection(metadata, edmEntitySet.getEntityType(), delta ,
EntityCollectionSerializerOptions.with()
.contextURL(ContextURL.with().entitySet(edmEntitySet).build())
.build()).getContent();
String jsonString = IOUtils.toString(stream);
final String expectedResult = "{"
+ "\"@odata.context\":\"$metadata#ESCollAllPrim/$delta\","
+ "\"value\":[{\"@odata.id\":\"ESCollAllPrim(1)\",\"PropertyInt16\":1,"
+ "\"CollPropertyString\":[\"Employee1@company.example\",\"Employee2@company.example\","
+ "\"Employee3@company.example\"],\"CollPropertyBoolean\":[true,false,true],"
+ "\"CollPropertyByte\":[50,200,249],\"CollPropertySByte\":[-120,120,126],\"CollPropertyInt16\":"
+ "[1000,2000,30112],\"CollPropertyInt32\":[23232323,11223355,10000001],\"CollPropertyInt64\":"
+ "[929292929292,333333333333,444444444444],\"CollPropertySingle\":[1790.0,26600.0,3210.0],"
+ "\"CollPropertyDouble\":[-17900.0,-2.78E7,3210.0],\"CollPropertyDecimal\":"
+ "[12,-2,1234],\"CollPropertyBinary\":"
+ "[\"q83v\",\"ASNF\",\"VGeJ\"],\"CollPropertyDate\":[\"1958-12-03\",\"1999-08-05\",\"2013-06-25\"],"
+ "\"CollPropertyDateTimeOffset\":[\"2015-08-12T03:08:34Z\",\"1970-03-28T12:11:10Z\","
+ "\"1948-02-17T09:09:09Z\"],"
+ "\"CollPropertyDuration\":[\"PT13S\",\"PT5H28M0S\",\"PT1H0S\"],\"CollPropertyGuid\":"
+ "[\"ffffff67-89ab-cdef-0123-456789aaaaaa\",\"eeeeee67-89ab-cdef-0123-456789bbbbbb\","
+ "\"cccccc67-89ab-cdef-0123-456789cccccc\"],\"CollPropertyTimeOfDay\":[\"04:14:13\",\"23:59:59\","
+ "\"01:12:33\"]},{\"@odata.context\":\"#ESCollAllPrim/$link\",\"source\":\"ESDelta(100)\",\"relationship\":"
+ "\"NavPropertyETAllPrimOne\",\"target\":\"ESAllPrim(0)\"}]"
+ "}";
Assert.assertNotNull(jsonString);
Assert.assertEquals(expectedResult, jsonString);
}
@Test
public void testComplexCollPropertyInDelta() throws Exception {
final EdmEntitySet edmEntitySet = entityContainer.getEntitySet("ESKeyNav");
final Entity entity = data.readAll(edmEntitySet).getEntities().get(0);
Delta delta = new Delta();
List<DeltaLink> addedLinks = new ArrayList<DeltaLink>();
List<Entity> addedEntities = new ArrayList<Entity>();
DeltaLink link1 = new DeltaLink();
link1.setRelationship("NavPropertyETAllPrimOne");
link1.setSource(new URI("ESDelta(100)"));
link1.setTarget(new URI("ESAllPrim(0)"));
addedLinks.add(link1 );
addedEntities.add(entity);
delta.getAddedLinks().addAll(addedLinks );
delta.getEntities().addAll(addedEntities);
InputStream stream = ser.entityCollection(metadata, edmEntitySet.getEntityType(), delta ,
EntityCollectionSerializerOptions.with()
.contextURL(ContextURL.with().entitySet(edmEntitySet).build())
.build()).getContent();
String jsonString = IOUtils.toString(stream);
final String expectedResult = "{"
+"\"@odata.context\":\"$metadata#ESKeyNav/$delta\","
+ "\"value\":[{\"@odata.id\":\"ESKeyNav(1)\",\"PropertyInt16\":1,"
+ "\"PropertyString\":\"I am String Property 1\",\"PropertyCompNav\":"
+ "{\"PropertyInt16\":1},\"PropertyCompAllPrim\":{\"PropertyString\":"
+ "\"First Resource - positive values\",\"PropertyBinary\":"
+ "\"ASNFZ4mrze8=\",\"PropertyBoolean\":true,\"PropertyByte\":"
+ "255,\"PropertyDate\":\"2012-12-03\",\"PropertyDateTimeOffset\":"
+ "\"2012-12-03T07:16:23Z\",\"PropertyDecimal\":"
+ "34,\"PropertySingle\":1.79E20,\"PropertyDouble\":-1.79E20,\"PropertyDuration\":\"PT6S\",\"PropertyGuid\":"
+ "\"01234567-89ab-cdef-0123-456789abcdef\",\"PropertyInt16\":32767,"
+ "\"PropertyInt32\":2147483647,\"PropertyInt64\":"
+ "9223372036854775807,\"PropertySByte\":127,\"PropertyTimeOfDay\":\"21:05:59\"},\"PropertyCompTwoPrim\":"
+ "{\"PropertyInt16\":16,\"PropertyString\":\"Test123\"},\"CollPropertyString\":"
+ "[\"Employee1@company.example\","
+ "\"Employee2@company.example\",\"Employee3@company.example\"],\"CollPropertyInt16\":[1000,2000,30112],"
+ "\"CollPropertyComp\":[{\"PropertyInt16\":1,\"PropertyComp\":{\"PropertyString\":"
+ "\"First Resource - positive values\","
+ "\"PropertyBinary\":\"ASNFZ4mrze8=\",\"PropertyBoolean\":true,\"PropertyByte\":"
+ "255,\"PropertyDate\":\"2012-12-03\","
+ "\"PropertyDateTimeOffset\":\"2012-12-03T07:16:23Z\",\"PropertyDecimal\":34,\"PropertySingle\":1.79E20,"
+ "\"PropertyDouble\":-1.79E20,\"PropertyDuration\":\"PT6S\",\"PropertyGuid\":"
+ "\"01234567-89ab-cdef-0123-456789abcdef\","
+ "\"PropertyInt16\":32767,\"PropertyInt32\":2147483647,\"PropertyInt64\":"
+ "9223372036854775807,\"PropertySByte\":127,"
+ "\"PropertyTimeOfDay\":\"21:05:59\"}},{\"PropertyInt16\":2,\"PropertyComp\":{\"PropertyString\":"
+ "\"First Resource - positive values\",\"PropertyBinary\":\"ASNFZ4mrze8=\",\"PropertyBoolean\":true,"
+ "\"PropertyByte\":255,\"PropertyDate\":\"2012-12-03\",\"PropertyDateTimeOffset\":\"2012-12-03T07:16:23Z\","
+ "\"PropertyDecimal\":34,\"PropertySingle\":1.79E20,\"PropertyDouble\":-1.79E20,"
+ "\"PropertyDuration\":\"PT6S\","
+ "\"PropertyGuid\":\"01234567-89ab-cdef-0123-456789abcdef\","
+ "\"PropertyInt16\":32767,\"PropertyInt32\":2147483647,"
+ "\"PropertyInt64\":9223372036854775807,\"PropertySByte\":127,"
+ "\"PropertyTimeOfDay\":\"21:05:59\"}},{\"PropertyInt16\":3,"
+ "\"PropertyComp\":{\"PropertyString\":\"First Resource - positive values\","
+ "\"PropertyBinary\":\"ASNFZ4mrze8=\","
+ "\"PropertyBoolean\":true,\"PropertyByte\":255,\"PropertyDate\":\"2012-12-03\",\"PropertyDateTimeOffset\":"
+ "\"2012-12-03T07:16:23Z\",\"PropertyDecimal\":34,\"PropertySingle\":1.79E20,\"PropertyDouble\":-1.79E20,"
+ "\"PropertyDuration\":\"PT6S\",\"PropertyGuid\":"
+ "\"01234567-89ab-cdef-0123-456789abcdef\",\"PropertyInt16\":32767,"
+ "\"PropertyInt32\":2147483647,\"PropertyInt64\":9223372036854775807,"
+ "\"PropertySByte\":127,\"PropertyTimeOfDay\":"
+ "\"21:05:59\"}}],\"PropertyCompCompNav\":{\"PropertyString\":\"1\","
+ "\"PropertyCompNav\":{\"PropertyInt16\":1}}},"
+ "{\"@odata.context\":\"#ESKeyNav/$link\",\"source\":\"ESDelta(100)\","
+ "\"relationship\":\"NavPropertyETAllPrimOne\","
+ "\"target\":\"ESAllPrim(0)\"}]"
+ "}";
Assert.assertNotNull(jsonString);
Assert.assertEquals(expectedResult, jsonString);
}
@Test
public void navigationEntityInDeltaEntity() throws Exception {
final EdmEntitySet edmEntitySet = entityContainer.getEntitySet("ESDelta");
Delta delta = new Delta();
final Entity entity = data.readAll(edmEntitySet).getEntities().get(0);
final Entity entity2 = data.readAll(edmEntitySet).getEntities().get(3);
final ExpandOption expand = ExpandSelectMock.mockExpandOption(Collections.singletonList(
ExpandSelectMock.mockExpandItem(edmEntitySet, "NavPropertyETAllPrimOne")));
List<Entity> addedEntity = new ArrayList<Entity>();
Entity changedEntity = new Entity();
changedEntity.setId(entity.getId());
changedEntity.addProperty(entity.getProperty("PropertyString"));
addedEntity.add(entity);
addedEntity.add(entity2);
delta.getEntities().addAll(addedEntity);
InputStream stream = ser.entityCollection(metadata, edmEntitySet.getEntityType(), delta ,
EntityCollectionSerializerOptions.with()
.contextURL(ContextURL.with().entitySet(edmEntitySet).build()).expand(expand)
.build()).getContent();
String jsonString = IOUtils.toString(stream);
final String expectedResult = "{"
+ "\"@odata.context\":\"$metadata#ESDelta/$delta\",\"value\":"
+ "[{\"@odata.id\":\"ESDelta(32767)\",\"PropertyInt16\":32767,\"PropertyString\":"
+ "\"Number:32767\"},{\"@odata.id\":\"ESDelta(100)\",\"PropertyInt16\":100,"
+ "\"PropertyString\":\"Number:100\"}]"
+ "}";
Assert.assertNotNull(jsonString);
Assert.assertEquals(expectedResult, jsonString);
}
@Test(expected = SerializerException.class)
public void negativeDeltaEntityTest() throws Exception {
final EdmEntitySet edmEntitySet = entityContainer.getEntitySet("ESDelta");
Delta delta = new Delta();
final Entity entity2 = data.readAll(edmEntitySet).getEntities().get(1);
List<Entity> addedEntity = new ArrayList<Entity>();
Entity changedEntity = new Entity();
changedEntity.addProperty(entity2.getProperty("PropertyString"));
addedEntity.add(changedEntity);
delta.getEntities().addAll(addedEntity);
ser.entityCollection(metadata, edmEntitySet.getEntityType(), delta ,
EntityCollectionSerializerOptions.with()
.contextURL(ContextURL.with().entitySet(edmEntitySet).build())
.build()).getContent();
}
@Test(expected = SerializerException.class)
public void negativeLinkDeltaTest1() throws Exception {
final EdmEntitySet edmEntitySet = entityContainer.getEntitySet("ESDelta");
Delta delta = new Delta();
List<DeltaLink> addedLinks = new ArrayList<DeltaLink>();
DeltaLink link1 = new DeltaLink();
link1.setSource(new URI("ESDelta(100)"));
link1.setTarget(new URI("ESAllPrim(0)"));
addedLinks.add(link1 );
delta.getAddedLinks().addAll(addedLinks );
ser.entityCollection(metadata, edmEntitySet.getEntityType(), delta ,
EntityCollectionSerializerOptions.with()
.contextURL(ContextURL.with().entitySet(edmEntitySet).build())
.build()).getContent();
}
@Test(expected = SerializerException.class)
public void negativeLinkDeltaTest2() throws Exception {
final EdmEntitySet edmEntitySet = entityContainer.getEntitySet("ESDelta");
Delta delta = new Delta();
List<DeltaLink> addedLinks = new ArrayList<DeltaLink>();
DeltaLink link1 = new DeltaLink();
link1.setRelationship("NavPropertyETAllPrimOne");
link1.setTarget(new URI("ESAllPrim(0)"));
addedLinks.add(link1 );
delta.getAddedLinks().addAll(addedLinks );
ser.entityCollection(metadata, edmEntitySet.getEntityType(), delta ,
EntityCollectionSerializerOptions.with()
.contextURL(ContextURL.with().entitySet(edmEntitySet).build())
.build()).getContent();
}
@Test(expected = SerializerException.class)
public void negativeLinkDeltaTest3() throws Exception {
final EdmEntitySet edmEntitySet = entityContainer.getEntitySet("ESDelta");
Delta delta = new Delta();
List<DeltaLink> addedLinks = new ArrayList<DeltaLink>();
DeltaLink link1 = new DeltaLink();
link1.setRelationship("NavPropertyETAllPrimOne");
link1.setSource(new URI("ESDelta(100)"));
addedLinks.add(link1 );
delta.getAddedLinks().addAll(addedLinks );
ser.entityCollection(metadata, edmEntitySet.getEntityType(), delta ,
EntityCollectionSerializerOptions.with()
.contextURL(ContextURL.with().entitySet(edmEntitySet).build())
.build()).getContent();
}
@Test(expected = SerializerException.class)
public void negativeLinkDeltaTest4() throws Exception {
final EdmEntitySet edmEntitySet = entityContainer.getEntitySet("ESDelta");
Delta delta = new Delta();
List<DeltaLink> addedLinks = new ArrayList<DeltaLink>();
DeltaLink link1 = null;
addedLinks.add(link1 );
delta.getAddedLinks().addAll(addedLinks );
ser.entityCollection(metadata, edmEntitySet.getEntityType(), delta ,
EntityCollectionSerializerOptions.with()
.contextURL(ContextURL.with().entitySet(edmEntitySet).build())
.build()).getContent();
}
@Test(expected = SerializerException.class)
public void negativeDeltaDeletedEntityTest1() throws Exception {
final EdmEntitySet edmEntitySet = entityContainer.getEntitySet("ESDelta");
Delta delta = new Delta();
List<DeletedEntity> deletedEntity = new ArrayList<DeletedEntity>();
DeletedEntity delEntity1 = new DeletedEntity();
delEntity1.setReason(Reason.deleted);
deletedEntity.add(delEntity1);
delta.getDeletedEntities().addAll(deletedEntity);
ser.entityCollection(metadata, edmEntitySet.getEntityType(), delta ,
EntityCollectionSerializerOptions.with()
.contextURL(ContextURL.with().entitySet(edmEntitySet).build())
.build()).getContent();
}
@Test(expected = SerializerException.class)
public void negativeDeltaDeletedEntityTest2() throws Exception {
final EdmEntitySet edmEntitySet = entityContainer.getEntitySet("ESDelta");
Delta delta = new Delta();
List<DeletedEntity> deletedEntity = new ArrayList<DeletedEntity>();
DeletedEntity delEntity1 = new DeletedEntity();
delEntity1.setId(new URI("ESDelta(100)"));
deletedEntity.add(delEntity1);
delta.getDeletedEntities().addAll(deletedEntity);
ser.entityCollection(metadata, edmEntitySet.getEntityType(), delta ,
EntityCollectionSerializerOptions.with()
.contextURL(ContextURL.with().entitySet(edmEntitySet).build())
.build()).getContent();
}
}