[OLINGO-530] New Edm Entity Type for Deserializer tests

This commit is contained in:
Christian Amend 2015-01-21 17:16:03 +01:00
parent 5e9fa5431d
commit a0ebaef72a
12 changed files with 407 additions and 58 deletions

View File

@ -35,7 +35,7 @@ public class DeserializerException extends ODataTranslatedException {
/** parameter: propertyName */ INVALID_NULL_PROPERTY,
/** parameter: keyName */ UNKOWN_CONTENT,
/** parameter: propertyName */ INVALID_VALUE_FOR_PROPERTY,
/** parameter: propertyName */ INVALID_TYPE_FOR_PROPERTY,
/** parameter: propertyName */ INVALID_JSON_TYPE_FOR_PROPERTY,
VALUE_ARRAY_NOT_PRESENT,
VALUE_TAG_MUST_BE_AN_ARRAY,
INVALID_ENTITY,

View File

@ -306,7 +306,7 @@ public class ODataJsonDeserializer implements ODataDeserializer {
if (edmProperty.isCollection()) {
if (!jsonNode.isArray()) {
throw new DeserializerException("Value for property: " + edmProperty.getName()
+ " must be an arrat but is not.", DeserializerException.MessageKeys.INVALID_VALUE_FOR_PROPERTY,
+ " must be an arrat but is not.", DeserializerException.MessageKeys.INVALID_JSON_TYPE_FOR_PROPERTY,
edmProperty.getName());
}
List<Object> valueArray = new ArrayList<Object>();
@ -370,7 +370,7 @@ public class ODataJsonDeserializer implements ODataDeserializer {
break;
default:
throw new DeserializerException("Invalid Type Kind for a property found: " + edmProperty.getType().getKind(),
DeserializerException.MessageKeys.INVALID_TYPE_FOR_PROPERTY, edmProperty.getName());
DeserializerException.MessageKeys.INVALID_JSON_TYPE_FOR_PROPERTY, edmProperty.getName());
}
} else {
@ -416,7 +416,7 @@ public class ODataJsonDeserializer implements ODataDeserializer {
break;
default:
throw new DeserializerException("Invalid Type Kind for a property found: " + edmProperty.getType().getKind(),
DeserializerException.MessageKeys.INVALID_TYPE_FOR_PROPERTY, edmProperty.getName());
DeserializerException.MessageKeys.INVALID_JSON_TYPE_FOR_PROPERTY, edmProperty.getName());
}
}
return property;
@ -426,7 +426,7 @@ public class ODataJsonDeserializer implements ODataDeserializer {
if (jsonNode.isArray() || !jsonNode.isContainerNode()) {
throw new DeserializerException(
"Inavlid value for property: " + edmComplexProperty.getName() + " must not be an array or primitive value.",
DeserializerException.MessageKeys.INVALID_VALUE_FOR_PROPERTY, edmComplexProperty.getName());
DeserializerException.MessageKeys.INVALID_JSON_TYPE_FOR_PROPERTY, edmComplexProperty.getName());
}
// Even if there are no properties defined we have to give back an empty list
List<Property> propertyList = new ArrayList<Property>();
@ -476,7 +476,7 @@ public class ODataJsonDeserializer implements ODataDeserializer {
if (!jsonNode.isValueNode()) {
throw new DeserializerException(
"Inavlid value for property: " + edmProperty.getName() + " must not be an object or array.",
DeserializerException.MessageKeys.INVALID_VALUE_FOR_PROPERTY, edmProperty.getName());
DeserializerException.MessageKeys.INVALID_JSON_TYPE_FOR_PROPERTY, edmProperty.getName());
}
try {
EdmEnumType edmEnumType = (EdmEnumType) edmProperty.getType();
@ -497,7 +497,7 @@ public class ODataJsonDeserializer implements ODataDeserializer {
if (!jsonNode.isValueNode()) {
throw new DeserializerException(
"Inavlid value for property: " + edmProperty.getName() + " must not be an object or array.",
DeserializerException.MessageKeys.INVALID_TYPE_FOR_PROPERTY, edmProperty.getName());
DeserializerException.MessageKeys.INVALID_JSON_TYPE_FOR_PROPERTY, edmProperty.getName());
}
try {
EdmPrimitiveType edmPrimitiveType = (EdmPrimitiveType) edmProperty.getType();

View File

@ -185,7 +185,7 @@ public class MetadataDocumentXmlSerializer {
for (EdmTypeDefinition definition : typeDefinitions) {
writer.writeEmptyElement(XML_TYPE_DEFINITION);
writer.writeAttribute(XML_NAME, definition.getName());
writer.writeAttribute(XML_TYPE, getFullQualifiedName(definition.getUnderlyingType(), false));
writer.writeAttribute(XML_UNDERLYING_TYPE, getFullQualifiedName(definition.getUnderlyingType(), false));
// Facets
if (definition.getMaxLength() != null) {

View File

@ -45,11 +45,12 @@ public class ComplexTypeProvider {
"CTNavFiveProp");
public static final FullQualifiedName nameCTPrim = new FullQualifiedName(SchemaProvider.NAMESPACE, "CTPrim");
public static final FullQualifiedName nameCTPrimComp = new FullQualifiedName(SchemaProvider.NAMESPACE, "CTPrimComp");
public static final FullQualifiedName nameCTPrimEnum = new FullQualifiedName(SchemaProvider.NAMESPACE, "CTPrimEnum");
public static final FullQualifiedName nameCTTwoBase = new FullQualifiedName(SchemaProvider.NAMESPACE, "CTTwoBase");
public static final FullQualifiedName nameCTTwoBasePrimCompNav =
new FullQualifiedName(SchemaProvider.NAMESPACE, "CTTwoBasePrimCompNav");
public static final FullQualifiedName nameCTTwoPrim = new FullQualifiedName(SchemaProvider.NAMESPACE, "CTTwoPrim");
public static final FullQualifiedName nameCTMixEnumTypeDefColl = new FullQualifiedName(SchemaProvider.NAMESPACE,
"CTMixEnumTypeDefColl");
public ComplexType getComplexType(final FullQualifiedName complexTypeName) throws ODataException {
@ -157,19 +158,21 @@ public class ComplexTypeProvider {
PropertyProvider.navPropertyETKeyNavOne_ETKeyNav,
PropertyProvider.collectionNavPropertyETKeyNavMany_ETKeyNav));
} else if (complexTypeName.equals(nameCTPrimEnum)) {
return new ComplexType()
.setName("CTPrimEnum")
.setProperties(Arrays.asList(PropertyProvider.propertyInt16, PropertyProvider.propertyEnumString_ENString));
} else if (complexTypeName.equals(nameCTTwoBasePrimCompNav)) {
return new ComplexType()
.setName("CTTwoBasePrimCompNav")
.setBaseType(nameCTBasePrimCompNav);
} else if (complexTypeName.equals(nameCTMixEnumTypeDefColl)) {
return new ComplexType()
.setName(nameCTMixEnumTypeDefColl.getName())
.setProperties(Arrays.asList(
PropertyProvider.propertyEnumString_ENString,
PropertyProvider.collPropertyEnumString_ENString,
PropertyProvider.propertyTypeDefinition_TDString,
PropertyProvider.collPropertyTypeDefinition_TDString));
}
return null;
}
}

View File

@ -95,6 +95,7 @@ public class ContainerProvider {
entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESBaseTwoKeyNav"));
entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESCompMixPrimCollComp"));
entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESFourKeyAlias"));
entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESMixEnumTypeDefCollComp"));
// Singletons
List<Singleton> singletons = new ArrayList<Singleton>();
@ -262,6 +263,9 @@ public class ContainerProvider {
return new EntitySet()
.setName("ESFourKeyAlias")
.setType(EntityTypeProvider.nameETFourKeyAlias);
} else if (name.equals("ESMixEnumTypeDefCollComp")) {
return new EntitySet().setName("ESMixEnumTypeDefCollComp").setType(
EntityTypeProvider.nameETMixEnumTypeDefCollComp);
}
}
@ -269,12 +273,12 @@ public class ContainerProvider {
}
public ActionImport getActionImport(final FullQualifiedName entityContainer, final String name)
throws ODataException {
throws ODataException {
if (entityContainer.equals(nameContainer)) {
if (name.equals(AIRT_STRING)) {
return new ActionImport()
.setName(AIRT_STRING)
.setAction(ActionProvider.nameUARTString);
.setName(AIRT_STRING)
.setAction(ActionProvider.nameUARTString);
} else if (name.equals(AIRT_COLL_STRING_TWO_PARAM)) {
return new ActionImport()

View File

@ -76,6 +76,9 @@ public class EntityTypeProvider {
public static final FullQualifiedName nameETAbstractBase = new FullQualifiedName(SchemaProvider.NAMESPACE,
"ETAbstractBase");
public static final FullQualifiedName nameETMixEnumTypeDefCollComp = new FullQualifiedName(SchemaProvider.NAMESPACE,
"ETMixEnumTypeDefCollComp");
public EntityType getEntityType(final FullQualifiedName entityTypeName) throws ODataException {
if (entityTypeName.equals(nameETAllPrim)) {
return new EntityType()
@ -336,12 +339,10 @@ public class EntityTypeProvider {
PropertyProvider.propertyComp_CTPrimComp_NotNullable,
new Property().setName("PropertyCompNav").setType(ComplexTypeProvider.nameCTBasePrimCompNav)
.setNullable(false),
PropertyProvider.propertyCompEnum_CTPrimEnum_NotNullable,
PropertyProvider.collPropertyComp_CTPrimComp,
new Property().setName("CollPropertyCompNav").setType(ComplexTypeProvider.nameCTNavFiveProp)
.setCollection(true),
PropertyProvider.collPropertyString, PropertyProvider.propertyCompTwoPrim_CTTwoPrim,
PropertyProvider.propertyEnumString_ENString
PropertyProvider.collPropertyString, PropertyProvider.propertyCompTwoPrim_CTTwoPrim
))
.setNavigationProperties(Arrays.asList(
new NavigationProperty()
@ -417,6 +418,18 @@ public class EntityTypeProvider {
.setKey(Arrays.asList(new PropertyRef().setPropertyName("PropertyInt16")))
.setProperties(Arrays.asList(
PropertyProvider.propertyInt16_NotNullable));
} else if (entityTypeName.equals(nameETMixEnumTypeDefCollComp)) {
return new EntityType()
.setName(nameETMixEnumTypeDefCollComp.getName())
.setKey(Arrays.asList(new PropertyRef().setPropertyName("PropertyInt16")))
.setProperties(Arrays.asList(
PropertyProvider.propertyInt16_NotNullable,
PropertyProvider.propertyEnumString_ENString,
PropertyProvider.collPropertyEnumString_ENString,
PropertyProvider.propertyTypeDefinition_TDString,
PropertyProvider.collPropertyTypeDefinition_TDString,
PropertyProvider.propertyComp_CTMixEnumTypeDefColl,
PropertyProvider.propertyCompColl_CTMixEnumTypeDefColl));
}
return null;

View File

@ -508,11 +508,6 @@ public class PropertyProvider {
.setName("PropertyCompComp")
.setType(ComplexTypeProvider.nameCTCompComp);
public static final Property propertyCompEnum_CTPrimEnum_NotNullable = new Property()
.setName("PropertyCompEnum")
.setType(ComplexTypeProvider.nameCTPrimEnum)
.setNullable(false);
public static final Property propertyCompTwoPrim_CTTwoPrim = new Property()
.setName("PropertyCompTwoPrim")
.setType(ComplexTypeProvider.nameCTTwoPrim);
@ -521,6 +516,15 @@ public class PropertyProvider {
.setName("PropertyMixedPrimCollComp")
.setType(ComplexTypeProvider.nameCTMixPrimCollComp);
public static final Property propertyComp_CTMixEnumTypeDefColl = new Property()
.setName("PropertyCTMixEnumTypeDefColl")
.setType(ComplexTypeProvider.nameCTMixEnumTypeDefColl);
public static final Property propertyCompColl_CTMixEnumTypeDefColl = new Property()
.setName("PropertyCTMixEnumTypeDefColl")
.setType(ComplexTypeProvider.nameCTMixEnumTypeDefColl)
.setCollection(true);
// Navigation Properties -------------------------------------------------------------------------------------------
public static final NavigationProperty collectionNavPropertyETKeyNavMany_ETKeyNav = new NavigationProperty()
.setName("NavPropertyETKeyNavMany")
@ -588,6 +592,18 @@ public class PropertyProvider {
.setName("PropertyEnumString")
.setType(EnumTypeProvider.nameENString);
// TypeDefinition Properties ---------------------------------------------------------------------------------------
public static final Property collPropertyEnumString_ENString = new Property()
.setName("PropertyEnumString")
.setType(EnumTypeProvider.nameENString)
.setCollection(true);
// TypeDefinition Properties ---------------------------------------------------------------------------------------
public static final Property propertyTypeDefinition_TDString = new Property()
.setName("PropertyTypeDefinitionString")
.setType(TypeDefinitionProvider.nameTDString);
public static final Property collPropertyTypeDefinition_TDString = new Property()
.setName("CollPropertyTypeDefinitionString")
.setType(TypeDefinitionProvider.nameTDString)
.setCollection(true);
}

View File

@ -25,6 +25,7 @@ import org.apache.olingo.server.api.edm.provider.EntityType;
import org.apache.olingo.server.api.edm.provider.EnumType;
import org.apache.olingo.server.api.edm.provider.Function;
import org.apache.olingo.server.api.edm.provider.Schema;
import org.apache.olingo.server.api.edm.provider.TypeDefinition;
import java.util.ArrayList;
import java.util.List;
@ -77,6 +78,7 @@ public class SchemaProvider {
entityTypes.add(prov.getEntityType(EntityTypeProvider.nameETKeyPrimNav));
entityTypes.add(prov.getEntityType(EntityTypeProvider.nameETAbstract));
entityTypes.add(prov.getEntityType(EntityTypeProvider.nameETAbstractBase));
entityTypes.add(prov.getEntityType(EntityTypeProvider.nameETMixEnumTypeDefCollComp));
// ComplexTypes
List<ComplexType> complexType = new ArrayList<ComplexType>();
@ -92,13 +94,16 @@ public class SchemaProvider {
complexType.add(prov.getComplexType(ComplexTypeProvider.nameCTCompCollComp));
complexType.add(prov.getComplexType(ComplexTypeProvider.nameCTPrimComp));
complexType.add(prov.getComplexType(ComplexTypeProvider.nameCTNavFiveProp));
complexType.add(prov.getComplexType(ComplexTypeProvider.nameCTPrimEnum));
complexType.add(prov.getComplexType(ComplexTypeProvider.nameCTBasePrimCompNav));
complexType.add(prov.getComplexType(ComplexTypeProvider.nameCTTwoBasePrimCompNav));
complexType.add(prov.getComplexType(ComplexTypeProvider.nameCTCompNav));
complexType.add(prov.getComplexType(ComplexTypeProvider.nameCTMixEnumTypeDefColl));
// TypeDefinitions
List<TypeDefinition> typeDefinitions = new ArrayList<TypeDefinition>();
schema.setTypeDefinitions(typeDefinitions);
typeDefinitions.add(prov.getTypeDefinition(TypeDefinitionProvider.nameTDString));
// Actions
List<Action> actions = new ArrayList<Action>();
schema.setActions(actions);

View File

@ -18,12 +18,19 @@
*/
package org.apache.olingo.server.tecsvc.provider;
import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
import org.apache.olingo.commons.api.edm.FullQualifiedName;
import org.apache.olingo.server.api.edm.provider.TypeDefinition;
public class TypeDefinitionProvider {
public static final FullQualifiedName nameTDString = new FullQualifiedName(SchemaProvider.NAMESPACE, "TDString");
public TypeDefinition getTypeDefinition(final FullQualifiedName typeDefinitionName) {
if (nameTDString.equals(typeDefinitionName)) {
return new TypeDefinition().setName(nameTDString.getName()).setUnderlyingType(
EdmPrimitiveTypeKind.String.getFullQualifiedName());
}
return null;
}

View File

@ -39,6 +39,7 @@ import org.apache.olingo.commons.api.format.ODataFormat;
import org.apache.olingo.server.api.OData;
import org.apache.olingo.server.api.deserializer.DeserializerException;
import org.apache.olingo.server.api.deserializer.ODataDeserializer;
import org.junit.Ignore;
import org.junit.Test;
public class ODataJsonDeserializerEntityTest extends AbstractODataDeserializerTest {
@ -240,6 +241,44 @@ public class ODataJsonDeserializerEntityTest extends AbstractODataDeserializerTe
}
}
@SuppressWarnings("unchecked")
@Test
public void eTMixPrimCollCompMIssingPropertyInComplexType() throws Exception {
final String entityString = "{"
+ "\"PropertyComp\":{\"PropertyInt16\":111},"
+ "\"CollPropertyComp\":["
+ "{\"PropertyInt16\":123},"
+ "{\"PropertyInt16\":456},"
+ "{\"PropertyInt16\":789}]}";
InputStream stream = new ByteArrayInputStream(entityString.getBytes());
ODataDeserializer deserializer = OData.newInstance().createDeserializer(ODataFormat.JSON);
Entity entity =
deserializer.entity(stream, edm.getEntityType(new FullQualifiedName("Namespace1_Alias", "ETMixPrimCollComp")));
assertNotNull(entity);
List<Property> properties = entity.getProperties();
assertNotNull(properties);
assertEquals(2, properties.size());
Property complexProperty = entity.getProperty("PropertyComp");
assertEquals(ValueType.COMPLEX, complexProperty.getValueType());
List<Property> complexPropertyValues = (List<Property>) complexProperty.getValue();
assertEquals(1, complexPropertyValues.size());
Property property = entity.getProperty("CollPropertyComp");
assertEquals(ValueType.COLLECTION_COMPLEX, property.getValueType());
assertTrue(property.getValue() instanceof List);
List<? extends Object> asCollection = property.asCollection();
assertEquals(3, asCollection.size());
for (Object arrayElement : asCollection) {
assertTrue(arrayElement instanceof List);
List<Object> castedArrayElement = (List<Object>) arrayElement;
assertEquals(1, castedArrayElement.size());
}
}
@Test
public void simpleEntityWithContextURL() throws Exception {
String entityString =
@ -377,6 +416,30 @@ public class ODataJsonDeserializerEntityTest extends AbstractODataDeserializerTe
assertTrue(bindingToMany.getBindingLinks().isEmpty());
}
@Ignore
@SuppressWarnings("unchecked")
@Test
public void eTTwoKeyNavEnumTest() throws Exception {
String entityString = "{"
+ "\"PropertyEnumString\" : 2,"
+ "\"PropertyCompEnum\" : {"
+ "\"PropertyEnumString\" : 2"
+ "}}";
InputStream stream = new ByteArrayInputStream(entityString.getBytes());
ODataDeserializer deserializer = OData.newInstance().createDeserializer(ODataFormat.JSON);
Entity entity =
deserializer.entity(stream, edm.getEntityType(new FullQualifiedName("Namespace1_Alias", "ETTwoKeyNav")));
Property enumProperty = entity.getProperty("PropertyEnumString");
assertNotNull(enumProperty);
assertEquals((short) 2, enumProperty.getValue());
Property complexProperty = entity.getProperty("PropertyCompEnum");
List<Property> value = (List<Property>) complexProperty.getValue();
assertEquals((short) 2, value.get(0).getValue());
}
// ---------------------------------- Negative Tests -----------------------------------------------------------
@Test(expected = DeserializerException.class)
@ -894,7 +957,6 @@ public class ODataJsonDeserializerEntityTest extends AbstractODataDeserializerTe
throw e;
}
}
@Test(expected = DeserializerException.class)
public void invalidJsonValueForPrimTypeArray() throws Exception {
@ -905,11 +967,11 @@ public class ODataJsonDeserializerEntityTest extends AbstractODataDeserializerTe
try {
deserializer.entity(stream, edm.getEntityType(new FullQualifiedName("Namespace1_Alias", "ETAllPrim")));
} catch (DeserializerException e) {
assertEquals(DeserializerException.MessageKeys.INVALID_TYPE_FOR_PROPERTY, e.getMessageKey());
assertEquals(DeserializerException.MessageKeys.INVALID_JSON_TYPE_FOR_PROPERTY, e.getMessageKey());
throw e;
}
}
@Test(expected = DeserializerException.class)
public void invalidJsonValueForPrimTypeObject() throws Exception {
String entityString =
@ -919,11 +981,237 @@ public class ODataJsonDeserializerEntityTest extends AbstractODataDeserializerTe
try {
deserializer.entity(stream, edm.getEntityType(new FullQualifiedName("Namespace1_Alias", "ETAllPrim")));
} catch (DeserializerException e) {
assertEquals(DeserializerException.MessageKeys.INVALID_TYPE_FOR_PROPERTY, e.getMessageKey());
assertEquals(DeserializerException.MessageKeys.INVALID_JSON_TYPE_FOR_PROPERTY, e.getMessageKey());
throw e;
}
}
@Test(expected = DeserializerException.class)
public void invalidJsonValueForPrimCollectionTypeObject() throws Exception {
final String entityString = "{"
+ "\"CollPropertyString\":"
+ "{\"Employee1@company.example\":1234}"
+ "}";
InputStream stream = new ByteArrayInputStream(entityString.getBytes());
ODataDeserializer deserializer = OData.newInstance().createDeserializer(ODataFormat.JSON);
try {
deserializer.entity(stream, edm.getEntityType(new FullQualifiedName("Namespace1_Alias", "ETMixPrimCollComp")));
} catch (DeserializerException e) {
assertEquals(DeserializerException.MessageKeys.INVALID_JSON_TYPE_FOR_PROPERTY, e.getMessageKey());
throw e;
}
}
@Test(expected = DeserializerException.class)
public void invalidJsonValueForComplexTypeTypeString() throws Exception {
final String entityString = "{"
+ "\"PropertyComp\":\"InvalidString\""
+ "}";
InputStream stream = new ByteArrayInputStream(entityString.getBytes());
ODataDeserializer deserializer = OData.newInstance().createDeserializer(ODataFormat.JSON);
try {
deserializer.entity(stream, edm.getEntityType(new FullQualifiedName("Namespace1_Alias", "ETMixPrimCollComp")));
} catch (DeserializerException e) {
assertEquals(DeserializerException.MessageKeys.INVALID_JSON_TYPE_FOR_PROPERTY, e.getMessageKey());
throw e;
}
}
@Test(expected = DeserializerException.class)
public void invalidJsonValueForComplexTypeNull() throws Exception {
final String entityString = "{"
+ "\"PropertyComp\":null"
+ "}";
InputStream stream = new ByteArrayInputStream(entityString.getBytes());
ODataDeserializer deserializer = OData.newInstance().createDeserializer(ODataFormat.JSON);
try {
deserializer.entity(stream, edm.getEntityType(new FullQualifiedName("Namespace1_Alias", "ETMixPrimCollComp")));
} catch (DeserializerException e) {
assertEquals(DeserializerException.MessageKeys.INVALID_NULL_PROPERTY, e.getMessageKey());
throw e;
}
}
@Test(expected = DeserializerException.class)
public void invalidJsonValueForComplexCollectionNullValue() throws Exception {
final String entityString = "{"
+ "\"CollPropertyComp\":["
+ "null,"
+ "{\"PropertyInt16\":789,\"PropertyString\":\"TEST 3\"}]}";
InputStream stream = new ByteArrayInputStream(entityString.getBytes());
ODataDeserializer deserializer = OData.newInstance().createDeserializer(ODataFormat.JSON);
try {
deserializer.entity(stream, edm.getEntityType(new FullQualifiedName("Namespace1_Alias", "ETMixPrimCollComp")));
} catch (DeserializerException e) {
assertEquals(DeserializerException.MessageKeys.INVALID_JSON_TYPE_FOR_PROPERTY, e.getMessageKey());
throw e;
}
}
@Test(expected = DeserializerException.class)
public void invalidJsonValueForPrimPropertyInComplexTypeNull() throws Exception {
final String entityString = "{"
+ "\"PropertyComp\":{\"PropertyInt16\":null,\"PropertyString\":\"TEST A\"}"
+ "}";
InputStream stream = new ByteArrayInputStream(entityString.getBytes());
ODataDeserializer deserializer = OData.newInstance().createDeserializer(ODataFormat.JSON);
try {
deserializer.entity(stream, edm.getEntityType(new FullQualifiedName("Namespace1_Alias", "ETMixPrimCollComp")));
} catch (DeserializerException e) {
assertEquals(DeserializerException.MessageKeys.INVALID_NULL_PROPERTY, e.getMessageKey());
throw e;
}
}
@Test(expected = DeserializerException.class)
public void provokedPrimitiveTypeException() throws Exception {
final String entityString = "{"
+ "\"PropertyInt16\":32767000000000000000000000000000000000000"
+ "}";
InputStream stream = new ByteArrayInputStream(entityString.getBytes());
ODataDeserializer deserializer = OData.newInstance().createDeserializer(ODataFormat.JSON);
try {
deserializer.entity(stream, edm.getEntityType(new FullQualifiedName("Namespace1_Alias", "ETMixPrimCollComp")));
} catch (DeserializerException e) {
assertEquals(DeserializerException.MessageKeys.INVALID_VALUE_FOR_PROPERTY, e.getMessageKey());
throw e;
}
}
@Ignore
@Test(expected = DeserializerException.class)
public void eTTwoKeyNavInvalidEnumValueNull() throws Exception {
String entityString = "{"
+ "\"PropertyEnumString\" : null,"
+ "\"PropertyCompEnum\" : {"
+ "\"PropertyEnumString\" : 2"
+ "}}";
InputStream stream = new ByteArrayInputStream(entityString.getBytes());
ODataDeserializer deserializer = OData.newInstance().createDeserializer(ODataFormat.JSON);
try {
deserializer.entity(stream, edm.getEntityType(new FullQualifiedName("Namespace1_Alias", "ETTwoKeyNav")));
} catch (DeserializerException e) {
assertEquals(DeserializerException.MessageKeys.INVALID_NULL_PROPERTY, e.getMessageKey());
throw e;
}
}
@Ignore
@Test(expected = DeserializerException.class)
public void eTTwoKeyNavInvalidComplexEnumValueNull() throws Exception {
String entityString = "{"
+ "\"PropertyEnumString\" : 2,"
+ "\"PropertyCompEnum\" : {"
+ "\"PropertyEnumString\" : null"
+ "}}";
InputStream stream = new ByteArrayInputStream(entityString.getBytes());
ODataDeserializer deserializer = OData.newInstance().createDeserializer(ODataFormat.JSON);
try {
deserializer.entity(stream, edm.getEntityType(new FullQualifiedName("Namespace1_Alias", "ETTwoKeyNav")));
} catch (DeserializerException e) {
assertEquals(DeserializerException.MessageKeys.INVALID_NULL_PROPERTY, e.getMessageKey());
throw e;
}
}
@Ignore
@Test(expected = DeserializerException.class)
public void eTTwoKeyNavInvalidEnumValueArray() throws Exception {
String entityString = "{"
+ "\"PropertyEnumString\" : [],"
+ "\"PropertyCompEnum\" : {"
+ "\"PropertyEnumString\" : 2"
+ "}}";
InputStream stream = new ByteArrayInputStream(entityString.getBytes());
ODataDeserializer deserializer = OData.newInstance().createDeserializer(ODataFormat.JSON);
try {
deserializer.entity(stream, edm.getEntityType(new FullQualifiedName("Namespace1_Alias", "ETTwoKeyNav")));
} catch (DeserializerException e) {
assertEquals(DeserializerException.MessageKeys.INVALID_JSON_TYPE_FOR_PROPERTY, e.getMessageKey());
throw e;
}
}
@Ignore
@Test(expected = DeserializerException.class)
public void eTTwoKeyNavInvalidEnumValueObject() throws Exception {
String entityString = "{"
+ "\"PropertyEnumString\" : {},"
+ "\"PropertyCompEnum\" : {"
+ "\"PropertyEnumString\" : 2"
+ "}}";
InputStream stream = new ByteArrayInputStream(entityString.getBytes());
ODataDeserializer deserializer = OData.newInstance().createDeserializer(ODataFormat.JSON);
try {
deserializer.entity(stream, edm.getEntityType(new FullQualifiedName("Namespace1_Alias", "ETTwoKeyNav")));
} catch (DeserializerException e) {
assertEquals(DeserializerException.MessageKeys.INVALID_JSON_TYPE_FOR_PROPERTY, e.getMessageKey());
throw e;
}
}
@Ignore
@Test(expected = DeserializerException.class)
public void eTTwoKeyNavInvalidEnumValue() throws Exception {
String entityString = "{"
+ "\"PropertyEnumString\" : \"invalid\","
+ "\"PropertyCompEnum\" : {"
+ "\"PropertyEnumString\" : 2"
+ "}}";
InputStream stream = new ByteArrayInputStream(entityString.getBytes());
ODataDeserializer deserializer = OData.newInstance().createDeserializer(ODataFormat.JSON);
try {
deserializer.entity(stream, edm.getEntityType(new FullQualifiedName("Namespace1_Alias", "ETTwoKeyNav")));
} catch (DeserializerException e) {
assertEquals(DeserializerException.MessageKeys.INVALID_VALUE_FOR_PROPERTY, e.getMessageKey());
throw e;
}
}
@Ignore
@Test(expected = DeserializerException.class)
public void eTTwoKeyNavInvalidEnumValueByPrimitiveTypeException() throws Exception {
String entityString = "{"
+ "\"PropertyEnumString\" : 18,"
+ "\"PropertyCompEnum\" : {"
+ "\"PropertyEnumString\" : 2"
+ "}}";
InputStream stream = new ByteArrayInputStream(entityString.getBytes());
ODataDeserializer deserializer = OData.newInstance().createDeserializer(ODataFormat.JSON);
try {
deserializer.entity(stream, edm.getEntityType(new FullQualifiedName("Namespace1_Alias", "ETTwoKeyNav")));
} catch (DeserializerException e) {
assertEquals(DeserializerException.MessageKeys.INVALID_VALUE_FOR_PROPERTY, e.getMessageKey());
throw e;
}
}
// @Test(expected = DeserializerException.class)
// public void invalidJsonValueForPrimCollectionTypeObject() throws Exception {
// final String entityString = "{"
// + "\"PropertyInt16\":32767,"
// + "\"CollPropertyString\":"
// + "[\"Employee1@company.example\",\"Employee2@company.example\",\"Employee3@company.example\"],"
// + "\"PropertyComp\":{\"PropertyInt16\":111,\"PropertyString\":\"TEST A\"},"
// + "\"CollPropertyComp\":["
// + "{\"PropertyInt16\":123,\"PropertyString\":\"TEST 1\"},"
// + "{\"PropertyInt16\":456,\"PropertyString\":\"TEST 2\"},"
// + "{\"PropertyInt16\":789,\"PropertyString\":\"TEST 3\"}]}";
// InputStream stream = new ByteArrayInputStream(entityString.getBytes());
// ODataDeserializer deserializer = OData.newInstance().createDeserializer(ODataFormat.JSON);
// try {
// deserializer.entity(stream, edm.getEntityType(new FullQualifiedName("Namespace1_Alias", "ETMixPrimCollComp")));
// } catch (DeserializerException e) {
// assertEquals(DeserializerException.MessageKeys.INVALID_JSON_TYPE_FOR_PROPERTY, e.getMessageKey());
// throw e;
// }
// }
private void checkPropertyJsonType(String entityString) throws DeserializerException {
InputStream stream = new ByteArrayInputStream(entityString.getBytes());

View File

@ -1127,10 +1127,10 @@ public class TestFullResourcePath {
@Test
public void runEsNameKeyCast() throws Exception {
// testUri.runEx("ESTwoPrim(1)/olingo.odata.test1.ETBase(1)")
// .isExSemantic(UriParserSemanticException.MessageKeys.xxx);
// .isExSemantic(UriParserSemanticException.MessageKeys.xxx);
// testUri.runEx("ESTwoPrim/olingo.odata.test1.ETBase(1)/olingo.odata.test1.ETTwoBase(1)")
// .isExSemantic(UriParserSemanticException.MessageKeys.xxx);
// .isExSemantic(UriParserSemanticException.MessageKeys.xxx);
testUri.runEx("ESBase/olingo.odata.test1.ETTwoPrim(1)")
.isExSemantic(UriParserSemanticException.MessageKeys.INCOMPATIBLE_TYPE_FILTER);
@ -2393,7 +2393,7 @@ public class TestFullResourcePath {
testUri.run("ESTwoKeyNav(PropertyInt16=1,PropertyString='2')",
"$expand=olingo.odata.test1.ETBaseTwoKeyNav"
+ "/NavPropertyETTwoKeyNavMany/olingo.odata.test1.ETTwoBaseTwoKeyNav")
+ "/NavPropertyETTwoKeyNavMany/olingo.odata.test1.ETTwoBaseTwoKeyNav")
.isKind(UriInfoKind.resource).goPath().first()
.isKeyPredicate(0, "PropertyInt16", "1")
.isKeyPredicate(1, "PropertyString", "'2'")
@ -4452,36 +4452,39 @@ public class TestFullResourcePath {
@Test
public void testHas() throws ExpressionVisitException, ODataApplicationException, UriParserException {
testFilter.runOnETTwoKeyNav("PropertyEnumString has olingo.odata.test1.ENString'String1'")
testFilter.runOnETMixEnumTypeDefCollComp("PropertyEnumString has olingo.odata.test1.ENString'String1'")
.is("<<PropertyEnumString> has <olingo.odata.test1.ENString<String1>>>")
.isBinary(BinaryOperatorKind.HAS)
.root().left().goPath().isComplex("PropertyEnumString").isType(EnumTypeProvider.nameENString)
.goUpFilterValidator()
.root().right().isEnum(EnumTypeProvider.nameENString, Arrays.asList("String1"));
testFilter.runOnETTwoKeyNav("PropertyCompEnum/PropertyEnumString has olingo.odata.test1.ENString'String2'")
.is("<<PropertyCompEnum/PropertyEnumString> has <olingo.odata.test1.ENString<String2>>>")
testFilter.runOnETMixEnumTypeDefCollComp(
"PropertyCTMixEnumTypeDefColl/PropertyEnumString has olingo.odata.test1.ENString'String2'")
.is("<<PropertyCTMixEnumTypeDefColl/PropertyEnumString> has <olingo.odata.test1.ENString<String2>>>")
.isBinary(BinaryOperatorKind.HAS)
.root().left().goPath()
.first().isComplex("PropertyCompEnum")
.first().isComplex("PropertyCTMixEnumTypeDefColl")
.n().isComplex("PropertyEnumString").isType(EnumTypeProvider.nameENString)
.isType(EnumTypeProvider.nameENString)
.goUpFilterValidator()
.root().right().isEnum(EnumTypeProvider.nameENString, Arrays.asList("String2"));
testFilter.runOnETTwoKeyNav(
"PropertyCompEnum/PropertyEnumString has olingo.odata.test1.ENString'String2' eq true")
.is("<<<PropertyCompEnum/PropertyEnumString> has <olingo.odata.test1.ENString<String2>>> eq <true>>")
testFilter
.runOnETMixEnumTypeDefCollComp(
"PropertyCTMixEnumTypeDefColl/PropertyEnumString has olingo.odata.test1.ENString'String2' eq true")
.is("<<<PropertyCTMixEnumTypeDefColl/PropertyEnumString> has " +
"<olingo.odata.test1.ENString<String2>>> eq <true>>")
.isBinary(BinaryOperatorKind.EQ)
.root().left()
.isBinary(BinaryOperatorKind.HAS)
.root().left().left().goPath()
.first().isComplex("PropertyCompEnum")
.first().isComplex("PropertyCTMixEnumTypeDefColl")
.n().isComplex("PropertyEnumString").isType(EnumTypeProvider.nameENString)
.goUpFilterValidator()
.root().left().right().isEnum(EnumTypeProvider.nameENString, Arrays.asList("String2"));
testFilter.runOnETTwoKeyNav("PropertyEnumString has olingo.odata.test1.ENString'String3'")
testFilter.runOnETMixEnumTypeDefCollComp("PropertyEnumString has olingo.odata.test1.ENString'String3'")
.is("<<PropertyEnumString> has <olingo.odata.test1.ENString<String3>>>")
.isBinary(BinaryOperatorKind.HAS)
.root().left().goPath()
@ -4490,7 +4493,7 @@ public class TestFullResourcePath {
.goUpFilterValidator()
.root().right().isEnum(EnumTypeProvider.nameENString, Arrays.asList("String3"));
testFilter.runOnETTwoKeyNav("PropertyEnumString has olingo.odata.test1.ENString'String,String3'")
testFilter.runOnETMixEnumTypeDefCollComp("PropertyEnumString has olingo.odata.test1.ENString'String,String3'")
.is("<<PropertyEnumString> has <olingo.odata.test1.ENString<String,String3>>>")
.isBinary(BinaryOperatorKind.HAS)
.root().left().goPath()
@ -4499,7 +4502,7 @@ public class TestFullResourcePath {
.goUpFilterValidator()
.root().right().isEnum(EnumTypeProvider.nameENString, Arrays.asList("String", "String3"));
testFilter.runOnETTwoKeyNav("PropertyEnumString has null")
testFilter.runOnETMixEnumTypeDefCollComp("PropertyEnumString has null")
.is("<<PropertyEnumString> has <null>>")
.root()
.isBinary(BinaryOperatorKind.HAS)
@ -4716,36 +4719,38 @@ public class TestFullResourcePath {
.goUpFilterValidator()
.root().right().isLiteral("12:34:55.12345678901");
testFilter.runOnETTwoKeyNav("PropertyEnumString eq olingo.odata.test1.ENString'String1'")
testFilter.runOnETMixEnumTypeDefCollComp("PropertyEnumString eq olingo.odata.test1.ENString'String1'")
.is("<<PropertyEnumString> eq <olingo.odata.test1.ENString<String1>>>")
.isBinary(BinaryOperatorKind.EQ)
.root().left().goPath().isComplex("PropertyEnumString").isType(EnumTypeProvider.nameENString)
.goUpFilterValidator()
.root().right().isEnum(EnumTypeProvider.nameENString, Arrays.asList("String1"));
testFilter.runOnETTwoKeyNav("PropertyEnumString eq olingo.odata.test1.ENString'String2'")
testFilter.runOnETMixEnumTypeDefCollComp("PropertyEnumString eq olingo.odata.test1.ENString'String2'")
.is("<<PropertyEnumString> eq <olingo.odata.test1.ENString<String2>>>")
.isBinary(BinaryOperatorKind.EQ)
.root().left().goPath().isComplex("PropertyEnumString").isType(EnumTypeProvider.nameENString)
.goUpFilterValidator()
.root().right().isEnum(EnumTypeProvider.nameENString, Arrays.asList("String2"));
testFilter.runOnETTwoKeyNav("PropertyCompEnum/PropertyEnumString eq olingo.odata.test1.ENString'String3'")
.is("<<PropertyCompEnum/PropertyEnumString> eq <olingo.odata.test1.ENString<String3>>>")
testFilter.runOnETMixEnumTypeDefCollComp(
"PropertyCTMixEnumTypeDefColl/PropertyEnumString eq olingo.odata.test1.ENString'String3'")
.is("<<PropertyCTMixEnumTypeDefColl/PropertyEnumString> eq <olingo.odata.test1.ENString<String3>>>")
.isBinary(BinaryOperatorKind.EQ)
.root().left().goPath()
.first().isComplex("PropertyCompEnum")
.first().isComplex("PropertyCTMixEnumTypeDefColl")
.n().isComplex("PropertyEnumString").isType(EnumTypeProvider.nameENString).goUpFilterValidator()
.root().right().isEnum(EnumTypeProvider.nameENString, Arrays.asList("String3"));
testFilter.runOnETTwoKeyNav("PropertyCompEnum/PropertyEnumString eq PropertyCompEnum/PropertyEnumString")
.is("<<PropertyCompEnum/PropertyEnumString> eq <PropertyCompEnum/PropertyEnumString>>")
testFilter.runOnETMixEnumTypeDefCollComp(
"PropertyCTMixEnumTypeDefColl/PropertyEnumString eq PropertyCTMixEnumTypeDefColl/PropertyEnumString")
.is("<<PropertyCTMixEnumTypeDefColl/PropertyEnumString> eq <PropertyCTMixEnumTypeDefColl/PropertyEnumString>>")
.isBinary(BinaryOperatorKind.EQ)
.root().left().goPath()
.first().isComplex("PropertyCompEnum")
.first().isComplex("PropertyCTMixEnumTypeDefColl")
.n().isComplex("PropertyEnumString").isType(EnumTypeProvider.nameENString).goUpFilterValidator()
.root().right().goPath()
.first().isComplex("PropertyCompEnum")
.first().isComplex("PropertyCTMixEnumTypeDefColl")
.n().isComplex("PropertyEnumString").isType(EnumTypeProvider.nameENString).goUpFilterValidator();
}
@ -5065,12 +5070,12 @@ public class TestFullResourcePath {
.goUpFilterValidator()
.goOrder(0).right().isLiteral("12:34:55.123456789012");
testFilter.runOrderByOnETTwoKeyNav("PropertyEnumString eq olingo.odata.test1.ENString'String1'")
testFilter.runOrderByOnETMixEnumTypeDefCollComp("PropertyEnumString eq olingo.odata.test1.ENString'String1'")
.isSortOrder(0, false)
.goOrder(0).left().goPath().isComplex("PropertyEnumString").goUpFilterValidator()
.goOrder(0).right().isEnum(EnumTypeProvider.nameENString, Arrays.asList("String1"));
testFilter.runOrderByOnETTwoKeyNav("PropertyEnumString eq olingo.odata.test1.ENString'String1' desc")
testFilter.runOrderByOnETMixEnumTypeDefCollComp("PropertyEnumString eq olingo.odata.test1.ENString'String1' desc")
.isSortOrder(0, true)
.goOrder(0).left().goPath().isComplex("PropertyEnumString").goUpFilterValidator()
.goOrder(0).right().isEnum(EnumTypeProvider.nameENString, Arrays.asList("String1"));

View File

@ -112,6 +112,10 @@ public class FilterValidator implements TestValidator {
public FilterValidator runOrderByOnETTwoKeyNav(final String orderBy) throws UriParserException {
return runUriOrderBy("ESTwoKeyNav", "$orderby=" + orderBy.trim());
}
public FilterValidator runOrderByOnETMixEnumTypeDefCollComp(final String orderBy) throws UriParserException {
return runUriOrderBy("ESMixEnumTypeDefCollComp", "$orderby=" + orderBy.trim());
}
public FilterValidator runOrderByOnETTwoKeyNavEx(final String orderBy) throws UriParserException {
return runUriOrderByEx("ESTwoKeyNav", "$orderby=" + orderBy.trim());
@ -120,6 +124,10 @@ public class FilterValidator implements TestValidator {
public FilterValidator runOnETTwoKeyNav(final String filter) throws UriParserException {
return runUri("ESTwoKeyNav", "$filter=" + filter.trim());
}
public FilterValidator runOnETMixEnumTypeDefCollComp(final String filter) throws UriParserException {
return runUri("ESMixEnumTypeDefCollComp", "$filter=" + filter.trim());
}
public FilterValidator runOnETTwoKeyNavSingle(final String filter) throws UriParserException {
return runUri("SINav", "$filter=" + filter.trim());