public void ApplyProperty_DoesNotIgnoreKeyProperty() { // Arrange ODataProperty property = new ODataProperty { Name = "Key1", Value = "Value1" }; EdmEntityType entityType = new EdmEntityType("namespace", "name"); entityType.AddKeys(entityType.AddStructuralProperty("Key1", EdmLibHelpers.GetEdmPrimitiveTypeReferenceOrNull(typeof(string)))); EdmEntityTypeReference entityTypeReference = new EdmEntityTypeReference(entityType, isNullable: false); ODataDeserializerProvider provider = new DefaultODataDeserializerProvider(); var resource = new Mock <IDelta>(MockBehavior.Strict); Type propertyType = typeof(string); resource.Setup(r => r.TryGetPropertyType("Key1", out propertyType)).Returns(true).Verifiable(); resource.Setup(r => r.TrySetPropertyValue("Key1", "Value1")).Returns(true).Verifiable(); // Act DeserializationHelpers.ApplyProperty(property, entityTypeReference, resource.Object, provider, new ODataDeserializerContext { Model = new EdmModel() }); // Assert resource.Verify(); }
public void Property_Instance_IsCached() { DefaultODataDeserializerProvider instance1 = DefaultODataDeserializerProvider.Instance; DefaultODataDeserializerProvider instance2 = DefaultODataDeserializerProvider.Instance; Assert.Same(instance1, instance2); }
public void GetEdmTypeDeserializer_ThrowsArgument_EdmType() { DefaultODataDeserializerProvider deserializerProvider = new DefaultODataDeserializerProvider(); Assert.ThrowsArgumentNull( () => deserializerProvider.GetEdmTypeDeserializer(edmType: null), "edmType"); }
public void GetODataDeserializer_Throws_ArgumentNullForType() { DefaultODataDeserializerProvider deserializerProvider = new DefaultODataDeserializerProvider(); HttpRequestMessage request = new HttpRequestMessage(); Assert.ThrowsArgumentNull( () => deserializerProvider.GetODataDeserializer(model: EdmCoreModel.Instance, type: null, request: request), "type"); }
public void GetODataDeserializer_Throws_ArgumentNullForModel() { DefaultODataDeserializerProvider deserializerProvider = new DefaultODataDeserializerProvider(); HttpRequestMessage request = new HttpRequestMessage(); Assert.ThrowsArgumentNull( () => deserializerProvider.GetODataDeserializer(model: null, type: typeof(int), request: request), "model"); }
public void GetODataDeserializer_ActionPayload(Type resourceType) { ODataDeserializerProvider deserializerProvider = new DefaultODataDeserializerProvider(); HttpRequestMessage request = new HttpRequestMessage(); ODataActionPayloadDeserializer basicActionPayload = deserializerProvider.GetODataDeserializer(_edmModel, resourceType, request) as ODataActionPayloadDeserializer; Assert.NotNull(basicActionPayload); }
public void GetODataDeserializer_Primitive(Type type, EdmPrimitiveTypeKind primitiveKind) { ODataDeserializerProvider deserializerProvider = new DefaultODataDeserializerProvider(); HttpRequestMessage request = new HttpRequestMessage(); ODataDeserializer deserializer = deserializerProvider.GetODataDeserializer(_edmModel, type, request); Assert.NotNull(deserializer); ODataPrimitiveDeserializer rawValueDeserializer = Assert.IsType<ODataPrimitiveDeserializer>(deserializer); Assert.Equal(ODataPayloadKind.Property, rawValueDeserializer.ODataPayloadKind); }
public void GetODataDeserializer_Uri() { ODataDeserializerProvider deserializerProvider = new DefaultODataDeserializerProvider(); HttpRequestMessage request = new HttpRequestMessage(); ODataDeserializer deserializer = deserializerProvider.GetODataDeserializer(_edmModel, typeof(Uri), request); Assert.NotNull(deserializer); var referenceLinkDeserializer = Assert.IsType<ODataEntityReferenceLinkDeserializer>(deserializer); Assert.Equal(ODataPayloadKind.EntityReferenceLink, referenceLinkDeserializer.ODataPayloadKind); }
public void GetEdmTypeDeserializer_ReturnODataEnumDeserializer_ForEnumType() { // Arrange IEdmTypeReference edmType = new EdmEnumTypeReference(new EdmEnumType("TestModel", "Color"), isNullable: false); // Act ODataEdmTypeDeserializer deserializer = new DefaultODataDeserializerProvider().GetEdmTypeDeserializer(edmType); // Assert Assert.NotNull(deserializer); Assert.IsType<ODataEnumDeserializer>(deserializer); }
public void GetODataDeserializer_ReturnsSameDeserializer_ForSameType() { ODataDeserializerProvider deserializerProvider = new DefaultODataDeserializerProvider(); HttpRequestMessage request = new HttpRequestMessage(); ODataDeserializer firstCallDeserializer = deserializerProvider.GetODataDeserializer(_edmModel, typeof(ODataEntityDeserializerTests.Supplier), request); ODataDeserializer secondCallDeserializer = deserializerProvider.GetODataDeserializer(_edmModel, typeof(ODataEntityDeserializerTests.Supplier), request); Assert.Same(firstCallDeserializer, secondCallDeserializer); }
public void GetODataDeserializer_Primitive(Type type, EdmPrimitiveTypeKind primitiveKind) { ODataDeserializerProvider deserializerProvider = new DefaultODataDeserializerProvider(); HttpRequestMessage request = new HttpRequestMessage(); ODataDeserializer deserializer = deserializerProvider.GetODataDeserializer(_edmModel, type, request); Assert.NotNull(deserializer); ODataPrimitiveDeserializer rawValueDeserializer = Assert.IsType <ODataPrimitiveDeserializer>(deserializer); Assert.Equal(ODataPayloadKind.Property, rawValueDeserializer.ODataPayloadKind); }
public void GetODataDeserializer_Uri() { ODataDeserializerProvider deserializerProvider = new DefaultODataDeserializerProvider(); HttpRequestMessage request = new HttpRequestMessage(); ODataDeserializer deserializer = deserializerProvider.GetODataDeserializer(_edmModel, typeof(Uri), request); Assert.NotNull(deserializer); var referenceLinkDeserializer = Assert.IsType <ODataEntityReferenceLinkDeserializer>(deserializer); Assert.Equal(ODataPayloadKind.EntityReferenceLink, referenceLinkDeserializer.ODataPayloadKind); }
public void GetEdmTypeDeserializer_Caches_CreateDeserializerOutput() { // Arrange DefaultODataDeserializerProvider deserializerProvider = new DefaultODataDeserializerProvider(); IEdmTypeReference edmType = new Mock <IEdmTypeReference>().Object; // Act var deserializer1 = deserializerProvider.GetEdmTypeDeserializer(edmType); var deserializer2 = deserializerProvider.GetEdmTypeDeserializer(edmType); // Assert Assert.Same(deserializer1, deserializer2); }
public void GetODataDeserializer_Complex() { ODataDeserializerProvider deserializerProvider = new DefaultODataDeserializerProvider(); HttpRequestMessage request = new HttpRequestMessage(); ODataDeserializer deserializer = deserializerProvider.GetODataDeserializer(_edmModel, typeof(ODataEntityDeserializerTests.Address), request); Assert.NotNull(deserializer); ODataComplexTypeDeserializer complexDeserializer = Assert.IsType<ODataComplexTypeDeserializer>(deserializer); Assert.Equal(deserializer.ODataPayloadKind, ODataPayloadKind.Property); Assert.Equal(complexDeserializer.DeserializerProvider, deserializerProvider); }
public void GetODataDeserializer_Entity() { ODataDeserializerProvider deserializerProvider = new DefaultODataDeserializerProvider(); HttpRequestMessage request = new HttpRequestMessage(); ODataDeserializer deserializer = deserializerProvider.GetODataDeserializer(_edmModel, typeof(ODataEntityDeserializerTests.Product), request); Assert.NotNull(deserializer); ODataEntityDeserializer entityDeserializer = Assert.IsType<ODataEntityDeserializer>(deserializer); Assert.Equal(deserializer.ODataPayloadKind, ODataPayloadKind.Entry); Assert.Equal(entityDeserializer.DeserializerProvider, deserializerProvider); }
public void GetODataDeserializer_Entity() { ODataDeserializerProvider deserializerProvider = new DefaultODataDeserializerProvider(); HttpRequestMessage request = new HttpRequestMessage(); ODataDeserializer deserializer = deserializerProvider.GetODataDeserializer(_edmModel, typeof(ODataEntityDeserializerTests.Product), request); Assert.NotNull(deserializer); ODataEntityDeserializer entityDeserializer = Assert.IsType <ODataEntityDeserializer>(deserializer); Assert.Equal(deserializer.ODataPayloadKind, ODataPayloadKind.Entry); Assert.Equal(entityDeserializer.DeserializerProvider, deserializerProvider); }
public void GetODataDeserializer_Complex() { ODataDeserializerProvider deserializerProvider = new DefaultODataDeserializerProvider(); HttpRequestMessage request = new HttpRequestMessage(); ODataDeserializer deserializer = deserializerProvider.GetODataDeserializer(_edmModel, typeof(ODataEntityDeserializerTests.Address), request); Assert.NotNull(deserializer); ODataComplexTypeDeserializer complexDeserializer = Assert.IsType <ODataComplexTypeDeserializer>(deserializer); Assert.Equal(deserializer.ODataPayloadKind, ODataPayloadKind.Property); Assert.Equal(complexDeserializer.DeserializerProvider, deserializerProvider); }
public void ReadComplexValue_CanReadDerivedComplexValue() { // Arrange ODataConventionModelBuilder builder = new ODataConventionModelBuilder(); builder.ComplexType <Address>(); IEdmModel model = builder.GetEdmModel(); IEdmComplexTypeReference addressEdmType = model.GetEdmTypeReference(typeof(Address)).AsComplex(); DefaultODataDeserializerProvider deserializerProvider = new DefaultODataDeserializerProvider(); ODataComplexTypeDeserializer deserializer = new ODataComplexTypeDeserializer(deserializerProvider); ODataComplexValue complexValue = new ODataComplexValue { Properties = new[] { new ODataProperty { Name = "Street", Value = "12" }, new ODataProperty { Name = "City", Value = "Redmond" }, new ODataProperty { Name = "UsProp", Value = "UsPropertyValue" } }, TypeName = typeof(UsAddress).FullName }; ODataDeserializerContext readContext = new ODataDeserializerContext { Model = model }; // Act object address = deserializer.ReadComplexValue(complexValue, addressEdmType, readContext); // Assert Assert.NotNull(address); UsAddress usAddress = Assert.IsType <UsAddress>(address); Assert.Equal(usAddress.Street, "12"); Assert.Equal(usAddress.City, "Redmond"); Assert.Null(usAddress.Country); Assert.Null(usAddress.State); Assert.Null(usAddress.ZipCode); Assert.Equal("UsPropertyValue", usAddress.UsProp); }
public void ReadInline_Calls_ReadComplexValue() { // Arrange ODataDeserializerProvider deserializerProvider = new DefaultODataDeserializerProvider(); Mock <ODataComplexTypeDeserializer> deserializer = new Mock <ODataComplexTypeDeserializer>(deserializerProvider); ODataComplexValue item = new ODataComplexValue(); ODataDeserializerContext readContext = new ODataDeserializerContext(); deserializer.CallBase = true; deserializer.Setup(d => d.ReadComplexValue(item, _addressEdmType, readContext)).Returns(42).Verifiable(); // Act object result = deserializer.Object.ReadInline(item, _addressEdmType, readContext); // Assert deserializer.Verify(); Assert.Equal(42, result); }
public void ReadInline_Calls_ReadComplexValue() { // Arrange ODataDeserializerProvider deserializerProvider = new DefaultODataDeserializerProvider(); Mock<ODataComplexTypeDeserializer> deserializer = new Mock<ODataComplexTypeDeserializer>(deserializerProvider); ODataComplexValue item = new ODataComplexValue(); ODataDeserializerContext readContext = new ODataDeserializerContext(); deserializer.CallBase = true; deserializer.Setup(d => d.ReadComplexValue(item, _addressEdmType, readContext)).Returns(42).Verifiable(); // Act object result = deserializer.Object.ReadInline(item, _addressEdmType, readContext); // Assert deserializer.Verify(); Assert.Equal(42, result); }
public void ReadEntry_CanReadDatTimeRelatedProperties() { // Arrange ODataConventionModelBuilder builder = new ODataConventionModelBuilder(); builder.EntityType <MyCustomer>().Namespace = "NS"; IEdmModel model = builder.GetEdmModel(); IEdmEntityTypeReference vipCustomerTypeReference = model.GetEdmTypeReference(typeof(MyCustomer)).AsEntity(); var deserializerProvider = new DefaultODataDeserializerProvider(); var deserializer = new ODataEntityDeserializer(deserializerProvider); ODataEntry odataEntry = new ODataEntry { Properties = new[] { new ODataProperty { Name = "Id", Value = 121 }, new ODataProperty { Name = "Birthday", Value = new Date(2015, 12, 12) }, new ODataProperty { Name = "ReleaseTime", Value = new TimeOfDay(1, 2, 3, 4) }, }, TypeName = "NS.MyCustomer" }; ODataDeserializerContext readContext = new ODataDeserializerContext { Model = model }; ODataEntryWithNavigationLinks entry = new ODataEntryWithNavigationLinks(odataEntry); // Act var customer = deserializer.ReadEntry(entry, vipCustomerTypeReference, readContext) as MyCustomer; // Assert Assert.NotNull(customer); Assert.Equal(121, customer.Id); Assert.Equal(new DateTime(2015, 12, 12), customer.Birthday); Assert.Equal(new TimeSpan(0, 1, 2, 3, 4), customer.ReleaseTime); }
public void ReadInline_Calls_ReadFeed() { // Arrange ODataDeserializerProvider deserializerProvider = new DefaultODataDeserializerProvider(); Mock<ODataFeedDeserializer> deserializer = new Mock<ODataFeedDeserializer>(deserializerProvider); ODataFeedWithEntries feedWrapper = new ODataFeedWithEntries(new ODataFeed()); ODataDeserializerContext readContext = new ODataDeserializerContext(); IEnumerable expectedResult = new object[0]; deserializer.CallBase = true; deserializer.Setup(f => f.ReadFeed(feedWrapper, _customerType, readContext)).Returns(expectedResult).Verifiable(); // Act var result = deserializer.Object.ReadInline(feedWrapper, _customersType, readContext); // Assert deserializer.Verify(); Assert.Same(expectedResult, result); }
public void ReadInline_Calls_ReadFeed() { // Arrange ODataDeserializerProvider deserializerProvider = new DefaultODataDeserializerProvider(); Mock <ODataFeedDeserializer> deserializer = new Mock <ODataFeedDeserializer>(deserializerProvider); ODataFeedWithEntries feedWrapper = new ODataFeedWithEntries(new ODataFeed()); ODataDeserializerContext readContext = new ODataDeserializerContext(); IEnumerable expectedResult = new object[0]; deserializer.CallBase = true; deserializer.Setup(f => f.ReadFeed(feedWrapper, _customerType, readContext)).Returns(expectedResult).Verifiable(); // Act var result = deserializer.Object.ReadInline(feedWrapper, _customersType, readContext); // Assert deserializer.Verify(); Assert.Same(expectedResult, result); }
public void ReadComplexValue_CanReadDynamicCollectionPropertiesForOpenComplexType() { // Arrange ODataConventionModelBuilder builder = new ODataConventionModelBuilder(); builder.ComplexType<SimpleOpenAddress>(); builder.EnumType<SimpleEnum>(); IEdmModel model = builder.GetEdmModel(); IEdmComplexTypeReference addressTypeReference = model.GetEdmTypeReference(typeof(SimpleOpenAddress)).AsComplex(); var deserializerProvider = new DefaultODataDeserializerProvider(); var deserializer = new ODataComplexTypeDeserializer(deserializerProvider); ODataEnumValue enumValue = new ODataEnumValue("Third", typeof(SimpleEnum).FullName); ODataCollectionValue collectionValue = new ODataCollectionValue { TypeName = "Collection(" + typeof(SimpleEnum).FullName + ")", Items = new[] { enumValue, enumValue } }; ODataComplexValue complexValue = new ODataComplexValue { Properties = new[] { // declared properties new ODataProperty { Name = "Street", Value = "My Way #599" }, // dynamic properties new ODataProperty { Name = "CollectionProperty", Value = collectionValue } }, TypeName = typeof(SimpleOpenAddress).FullName }; ODataDeserializerContext readContext = new ODataDeserializerContext() { Model = model }; // Act SimpleOpenAddress address = deserializer.ReadComplexValue(complexValue, addressTypeReference, readContext) as SimpleOpenAddress; // Assert Assert.NotNull(address); // Verify the declared properties Assert.Equal("My Way #599", address.Street); Assert.Null(address.City); // Verify the dynamic properties Assert.NotNull(address.Properties); Assert.Equal(1, address.Properties.Count()); var collectionValues = Assert.IsType<List<SimpleEnum>>(address.Properties["CollectionProperty"]); Assert.NotNull(collectionValues); Assert.Equal(2, collectionValues.Count()); Assert.Equal(SimpleEnum.Third, collectionValues[0]); Assert.Equal(SimpleEnum.Third, collectionValues[1]); }
public void ReadComplexValue_CanReadNestedOpenComplexType() { // Arrange ODataConventionModelBuilder builder = new ODataConventionModelBuilder(); builder.ComplexType<SimpleOpenAddress>(); builder.ComplexType<SimpleOpenZipCode>(); IEdmModel model = builder.GetEdmModel(); IEdmComplexTypeReference addressTypeReference = model.GetEdmTypeReference(typeof(SimpleOpenAddress)).AsComplex(); var deserializerProvider = new DefaultODataDeserializerProvider(); var deserializer = new ODataComplexTypeDeserializer(deserializerProvider); ODataComplexValue zipCodeComplexValue = new ODataComplexValue { Properties = new[] { // declared property new ODataProperty { Name = "Code", Value = 101 }, // dynamic property new ODataProperty { Name = "DateTimeProperty", Value = new DateTimeOffset(new DateTime(2014, 4, 22)) } }, TypeName = typeof(SimpleOpenZipCode).FullName }; ODataComplexValue addressComplexValue = new ODataComplexValue { Properties = new[] { // declared properties new ODataProperty { Name = "Street", Value = "TopStreet" }, new ODataProperty { Name = "City", Value = "TopCity" }, // dynamic properties new ODataProperty { Name = "DoubleProperty", Value = 1.179 }, new ODataProperty { Name = "ZipCodeProperty", Value = zipCodeComplexValue } }, TypeName = typeof(SimpleOpenAddress).FullName }; ODataDeserializerContext readContext = new ODataDeserializerContext() { Model = model }; // Act SimpleOpenAddress address = deserializer.ReadComplexValue(addressComplexValue, addressTypeReference, readContext) as SimpleOpenAddress; // Assert Assert.NotNull(address); // Verify the declared properties Assert.Equal("TopStreet", address.Street); Assert.Equal("TopCity", address.City); // Verify the dynamic properties Assert.NotNull(address.Properties); Assert.Equal(2, address.Properties.Count()); Assert.Equal(1.179, address.Properties["DoubleProperty"]); // nested open complex type SimpleOpenZipCode zipCode = Assert.IsType<SimpleOpenZipCode>(address.Properties["ZipCodeProperty"]); Assert.Equal(101, zipCode.Code); Assert.Equal(1, zipCode.Properties.Count()); Assert.Equal(new DateTimeOffset(new DateTime(2014, 4, 22)), zipCode.Properties["DateTimeProperty"]); }
public void ReadComplexValue_CanReadDerivedComplexValue() { // Arrange ODataConventionModelBuilder builder = new ODataConventionModelBuilder(); builder.ComplexType<Address>(); IEdmModel model = builder.GetEdmModel(); IEdmComplexTypeReference addressEdmType = model.GetEdmTypeReference(typeof(Address)).AsComplex(); DefaultODataDeserializerProvider deserializerProvider = new DefaultODataDeserializerProvider(); ODataComplexTypeDeserializer deserializer = new ODataComplexTypeDeserializer(deserializerProvider); ODataComplexValue complexValue = new ODataComplexValue { Properties = new[] { new ODataProperty { Name = "Street", Value = "12"}, new ODataProperty { Name = "City", Value = "Redmond"}, new ODataProperty { Name = "UsProp", Value = "UsPropertyValue"} }, TypeName = typeof(UsAddress).FullName }; ODataDeserializerContext readContext = new ODataDeserializerContext { Model = model }; // Act object address = deserializer.ReadComplexValue(complexValue, addressEdmType, readContext); // Assert Assert.NotNull(address); UsAddress usAddress = Assert.IsType<UsAddress>(address); Assert.Equal(usAddress.Street, "12"); Assert.Equal(usAddress.City, "Redmond"); Assert.Null(usAddress.Country); Assert.Null(usAddress.State); Assert.Null(usAddress.ZipCode); Assert.Equal("UsPropertyValue", usAddress.UsProp); }
public void ReadEntry_CanReadDynamicPropertiesForInheritanceOpenEntityType() { // Arrange ODataConventionModelBuilder builder = new ODataConventionModelBuilder(); builder.EntityType <SimpleOpenCustomer>(); builder.EnumType <SimpleEnum>(); IEdmModel model = builder.GetEdmModel(); IEdmEntityTypeReference vipCustomerTypeReference = model.GetEdmTypeReference(typeof(SimpleVipCustomer)).AsEntity(); var deserializerProvider = new DefaultODataDeserializerProvider(); var deserializer = new ODataEntityDeserializer(deserializerProvider); ODataEntry odataEntry = new ODataEntry { Properties = new[] { // declared properties new ODataProperty { Name = "CustomerId", Value = 121 }, new ODataProperty { Name = "Name", Value = "VipName #121" }, new ODataProperty { Name = "VipNum", Value = "Vip Num 001" }, // dynamic properties new ODataProperty { Name = "GuidProperty", Value = new Guid("181D3A20-B41A-489F-9F15-F91F0F6C9ECA") }, }, TypeName = typeof(SimpleVipCustomer).FullName }; ODataDeserializerContext readContext = new ODataDeserializerContext() { Model = model }; ODataEntryWithNavigationLinks entry = new ODataEntryWithNavigationLinks(odataEntry); // Act SimpleVipCustomer customer = deserializer.ReadEntry(entry, vipCustomerTypeReference, readContext) as SimpleVipCustomer; // Assert Assert.NotNull(customer); // Verify the declared properties Assert.Equal(121, customer.CustomerId); Assert.Equal("VipName #121", customer.Name); Assert.Equal("Vip Num 001", customer.VipNum); // Verify the dynamic properties Assert.NotNull(customer.CustomerProperties); Assert.Equal(1, customer.CustomerProperties.Count()); Assert.Equal(new Guid("181D3A20-B41A-489F-9F15-F91F0F6C9ECA"), customer.CustomerProperties["GuidProperty"]); }
public void ReadComplexValue_CanReadDynamicPropertiesForOpenComplexType() { // Arrange ODataConventionModelBuilder builder = new ODataConventionModelBuilder(); builder.ComplexType <SimpleOpenAddress>(); builder.EnumType <SimpleEnum>(); IEdmModel model = builder.GetEdmModel(); IEdmComplexTypeReference addressTypeReference = model.GetEdmTypeReference(typeof(SimpleOpenAddress)).AsComplex(); var deserializerProvider = new DefaultODataDeserializerProvider(); var deserializer = new ODataComplexTypeDeserializer(deserializerProvider); ODataEnumValue enumValue = new ODataEnumValue("Third", typeof(SimpleEnum).FullName); ODataComplexValue complexValue = new ODataComplexValue { Properties = new[] { // declared properties new ODataProperty { Name = "Street", Value = "My Way #599" }, new ODataProperty { Name = "City", Value = "Redmond & Shanghai" }, // dynamic properties new ODataProperty { Name = "GuidProperty", Value = new Guid("181D3A20-B41A-489F-9F15-F91F0F6C9ECA") }, new ODataProperty { Name = "EnumValue", Value = enumValue }, new ODataProperty { Name = "DateTimeProperty", Value = new DateTimeOffset(new DateTime(1992, 1, 1)) }, new ODataProperty { Name = "DateProperty", Value = new Date(1997, 7, 1) } }, TypeName = typeof(SimpleOpenAddress).FullName }; ODataDeserializerContext readContext = new ODataDeserializerContext() { Model = model }; // Act SimpleOpenAddress address = deserializer.ReadComplexValue(complexValue, addressTypeReference, readContext) as SimpleOpenAddress; // Assert Assert.NotNull(address); // Verify the declared properties Assert.Equal("My Way #599", address.Street); Assert.Equal("Redmond & Shanghai", address.City); // Verify the dynamic properties Assert.NotNull(address.Properties); Assert.Equal(4, address.Properties.Count()); Assert.Equal(new Guid("181D3A20-B41A-489F-9F15-F91F0F6C9ECA"), address.Properties["GuidProperty"]); Assert.Equal(SimpleEnum.Third, address.Properties["EnumValue"]); Assert.Equal(new DateTimeOffset(new DateTime(1992, 1, 1)), address.Properties["DateTimeProperty"]); Assert.Equal(new Date(1997, 7, 1), address.Properties["DateProperty"]); }
public void GetEdmTypeDeserializer_Caches_CreateDeserializerOutput() { // Arrange DefaultODataDeserializerProvider deserializerProvider = new DefaultODataDeserializerProvider(); IEdmTypeReference edmType = new Mock<IEdmTypeReference>().Object; // Act var deserializer1 = deserializerProvider.GetEdmTypeDeserializer(edmType); var deserializer2 = deserializerProvider.GetEdmTypeDeserializer(edmType); // Assert Assert.Same(deserializer1, deserializer2); }
public ODataJsonParser(Uri serviceRootUri, IEdmModel model) { _model = model; _settings = new ODataMessageReaderSettings() { BaseUri = serviceRootUri }; var provider = new DefaultODataDeserializerProvider(); _deserializer = new ODataEntityDeserializer(provider); }
public void ReadEntry_CanReadDynamicPropertiesForOpenEntityType() { // Arrange ODataConventionModelBuilder builder = new ODataConventionModelBuilder(); builder.EntityType<SimpleOpenCustomer>(); builder.EnumType<SimpleEnum>(); IEdmModel model = builder.GetEdmModel(); IEdmEntityTypeReference customerTypeReference = model.GetEdmTypeReference(typeof(SimpleOpenCustomer)).AsEntity(); var deserializerProvider = new DefaultODataDeserializerProvider(); var deserializer = new ODataEntityDeserializer(deserializerProvider); ODataEnumValue enumValue = new ODataEnumValue("Third", typeof(SimpleEnum).FullName); ODataComplexValue[] complexValues = { new ODataComplexValue { TypeName = typeof(SimpleOpenAddress).FullName, Properties = new[] { // declared properties new ODataProperty { Name = "Street", Value = "Street 1" }, new ODataProperty { Name = "City", Value = "City 1" }, // dynamic properties new ODataProperty { Name = "DateTimeProperty", Value = new DateTimeOffset(new DateTime(2014, 5, 6)) } } }, new ODataComplexValue { TypeName = typeof(SimpleOpenAddress).FullName, Properties = new[] { // declared properties new ODataProperty { Name = "Street", Value = "Street 2" }, new ODataProperty { Name = "City", Value = "City 2" }, // dynamic properties new ODataProperty { Name = "ArrayProperty", Value = new ODataCollectionValue { TypeName = "Collection(Edm.Int32)", Items = new[] {1, 2, 3, 4} } } } } }; ODataCollectionValue collectionValue = new ODataCollectionValue { TypeName = "Collection(" + typeof(SimpleOpenAddress).FullName + ")", Items = complexValues }; ODataEntry odataEntry = new ODataEntry { Properties = new[] { // declared properties new ODataProperty { Name = "CustomerId", Value = 991 }, new ODataProperty { Name = "Name", Value = "Name #991" }, // dynamic properties new ODataProperty { Name = "GuidProperty", Value = new Guid("181D3A20-B41A-489F-9F15-F91F0F6C9ECA") }, new ODataProperty { Name = "EnumValue", Value = enumValue }, new ODataProperty { Name = "CollectionProperty", Value = collectionValue } }, TypeName = typeof(SimpleOpenCustomer).FullName }; ODataDeserializerContext readContext = new ODataDeserializerContext() { Model = model }; ODataEntryWithNavigationLinks entry = new ODataEntryWithNavigationLinks(odataEntry); // Act SimpleOpenCustomer customer = deserializer.ReadEntry(entry, customerTypeReference, readContext) as SimpleOpenCustomer; // Assert Assert.NotNull(customer); // Verify the declared properties Assert.Equal(991, customer.CustomerId); Assert.Equal("Name #991", customer.Name); // Verify the dynamic properties Assert.NotNull(customer.CustomerProperties); Assert.Equal(3, customer.CustomerProperties.Count()); Assert.Equal(new Guid("181D3A20-B41A-489F-9F15-F91F0F6C9ECA"), customer.CustomerProperties["GuidProperty"]); Assert.Equal(SimpleEnum.Third, customer.CustomerProperties["EnumValue"]); // Verify the dynamic collection property var collectionValues = Assert.IsType<List<SimpleOpenAddress>>(customer.CustomerProperties["CollectionProperty"]); Assert.NotNull(collectionValues); Assert.Equal(2, collectionValues.Count()); Assert.Equal(new DateTimeOffset(new DateTime(2014, 5, 6)), collectionValues[0].Properties["DateTimeProperty"]); Assert.Equal(new List<int> { 1, 2, 3, 4 }, collectionValues[1].Properties["ArrayProperty"]); }
public void ReadEntry_CanReadDynamicPropertiesForInheritanceOpenEntityType() { // Arrange ODataConventionModelBuilder builder = new ODataConventionModelBuilder(); builder.EntityType<SimpleOpenCustomer>(); builder.EnumType<SimpleEnum>(); IEdmModel model = builder.GetEdmModel(); IEdmEntityTypeReference vipCustomerTypeReference = model.GetEdmTypeReference(typeof(SimpleVipCustomer)).AsEntity(); var deserializerProvider = new DefaultODataDeserializerProvider(); var deserializer = new ODataEntityDeserializer(deserializerProvider); ODataEntry odataEntry = new ODataEntry { Properties = new[] { // declared properties new ODataProperty { Name = "CustomerId", Value = 121 }, new ODataProperty { Name = "Name", Value = "VipName #121" }, new ODataProperty { Name = "VipNum", Value = "Vip Num 001" }, // dynamic properties new ODataProperty { Name = "GuidProperty", Value = new Guid("181D3A20-B41A-489F-9F15-F91F0F6C9ECA") }, }, TypeName = typeof(SimpleVipCustomer).FullName }; ODataDeserializerContext readContext = new ODataDeserializerContext() { Model = model }; ODataEntryWithNavigationLinks entry = new ODataEntryWithNavigationLinks(odataEntry); // Act SimpleVipCustomer customer = deserializer.ReadEntry(entry, vipCustomerTypeReference, readContext) as SimpleVipCustomer; // Assert Assert.NotNull(customer); // Verify the declared properties Assert.Equal(121, customer.CustomerId); Assert.Equal("VipName #121", customer.Name); Assert.Equal("Vip Num 001", customer.VipNum); // Verify the dynamic properties Assert.NotNull(customer.CustomerProperties); Assert.Equal(1, customer.CustomerProperties.Count()); Assert.Equal(new Guid("181D3A20-B41A-489F-9F15-F91F0F6C9ECA"), customer.CustomerProperties["GuidProperty"]); }
public void ReadEntry_CanReadDatTimeRelatedProperties() { // Arrange ODataConventionModelBuilder builder = new ODataConventionModelBuilder(); builder.EntityType<MyCustomer>().Namespace = "NS"; IEdmModel model = builder.GetEdmModel(); IEdmEntityTypeReference vipCustomerTypeReference = model.GetEdmTypeReference(typeof(MyCustomer)).AsEntity(); var deserializerProvider = new DefaultODataDeserializerProvider(); var deserializer = new ODataEntityDeserializer(deserializerProvider); ODataEntry odataEntry = new ODataEntry { Properties = new[] { new ODataProperty { Name = "Id", Value = 121 }, new ODataProperty { Name = "Birthday", Value = new Date(2015, 12, 12) }, new ODataProperty { Name = "ReleaseTime", Value = new TimeOfDay(1, 2, 3, 4) }, }, TypeName = "NS.MyCustomer" }; ODataDeserializerContext readContext = new ODataDeserializerContext { Model = model }; ODataEntryWithNavigationLinks entry = new ODataEntryWithNavigationLinks(odataEntry); // Act var customer = deserializer.ReadEntry(entry, vipCustomerTypeReference, readContext) as MyCustomer; // Assert Assert.NotNull(customer); Assert.Equal(121, customer.Id); Assert.Equal(new DateTime(2015, 12, 12), customer.Birthday); Assert.Equal(new TimeSpan(0, 1, 2, 3, 4), customer.ReleaseTime); }
public void ReadComplexValue_CanReadDynamicCollectionPropertiesForOpenComplexType() { // Arrange ODataConventionModelBuilder builder = new ODataConventionModelBuilder(); builder.ComplexType <SimpleOpenAddress>(); builder.EnumType <SimpleEnum>(); IEdmModel model = builder.GetEdmModel(); IEdmComplexTypeReference addressTypeReference = model.GetEdmTypeReference(typeof(SimpleOpenAddress)).AsComplex(); var deserializerProvider = new DefaultODataDeserializerProvider(); var deserializer = new ODataComplexTypeDeserializer(deserializerProvider); ODataEnumValue enumValue = new ODataEnumValue("Third", typeof(SimpleEnum).FullName); ODataCollectionValue collectionValue = new ODataCollectionValue { TypeName = "Collection(" + typeof(SimpleEnum).FullName + ")", Items = new[] { enumValue, enumValue } }; ODataComplexValue complexValue = new ODataComplexValue { Properties = new[] { // declared properties new ODataProperty { Name = "Street", Value = "My Way #599" }, // dynamic properties new ODataProperty { Name = "CollectionProperty", Value = collectionValue } }, TypeName = typeof(SimpleOpenAddress).FullName }; ODataDeserializerContext readContext = new ODataDeserializerContext() { Model = model }; // Act SimpleOpenAddress address = deserializer.ReadComplexValue(complexValue, addressTypeReference, readContext) as SimpleOpenAddress; // Assert Assert.NotNull(address); // Verify the declared properties Assert.Equal("My Way #599", address.Street); Assert.Null(address.City); // Verify the dynamic properties Assert.NotNull(address.Properties); Assert.Equal(1, address.Properties.Count()); var collectionValues = Assert.IsType <List <SimpleEnum> >(address.Properties["CollectionProperty"]); Assert.NotNull(collectionValues); Assert.Equal(2, collectionValues.Count()); Assert.Equal(SimpleEnum.Third, collectionValues[0]); Assert.Equal(SimpleEnum.Third, collectionValues[1]); }
public void ReadComplexValue_CanReadNestedOpenComplexType() { // Arrange ODataConventionModelBuilder builder = new ODataConventionModelBuilder(); builder.ComplexType <SimpleOpenAddress>(); builder.ComplexType <SimpleOpenZipCode>(); IEdmModel model = builder.GetEdmModel(); IEdmComplexTypeReference addressTypeReference = model.GetEdmTypeReference(typeof(SimpleOpenAddress)).AsComplex(); var deserializerProvider = new DefaultODataDeserializerProvider(); var deserializer = new ODataComplexTypeDeserializer(deserializerProvider); ODataComplexValue zipCodeComplexValue = new ODataComplexValue { Properties = new[] { // declared property new ODataProperty { Name = "Code", Value = 101 }, // dynamic property new ODataProperty { Name = "DateTimeProperty", Value = new DateTimeOffset(new DateTime(2014, 4, 22)) } }, TypeName = typeof(SimpleOpenZipCode).FullName }; ODataComplexValue addressComplexValue = new ODataComplexValue { Properties = new[] { // declared properties new ODataProperty { Name = "Street", Value = "TopStreet" }, new ODataProperty { Name = "City", Value = "TopCity" }, // dynamic properties new ODataProperty { Name = "DoubleProperty", Value = 1.179 }, new ODataProperty { Name = "ZipCodeProperty", Value = zipCodeComplexValue } }, TypeName = typeof(SimpleOpenAddress).FullName }; ODataDeserializerContext readContext = new ODataDeserializerContext() { Model = model }; // Act SimpleOpenAddress address = deserializer.ReadComplexValue(addressComplexValue, addressTypeReference, readContext) as SimpleOpenAddress; // Assert Assert.NotNull(address); // Verify the declared properties Assert.Equal("TopStreet", address.Street); Assert.Equal("TopCity", address.City); // Verify the dynamic properties Assert.NotNull(address.Properties); Assert.Equal(2, address.Properties.Count()); Assert.Equal(1.179, address.Properties["DoubleProperty"]); // nested open complex type SimpleOpenZipCode zipCode = Assert.IsType <SimpleOpenZipCode>(address.Properties["ZipCodeProperty"]); Assert.Equal(101, zipCode.Code); Assert.Equal(1, zipCode.Properties.Count()); Assert.Equal(new DateTimeOffset(new DateTime(2014, 4, 22)), zipCode.Properties["DateTimeProperty"]); }
public void ReadEntry_CanReadDynamicPropertiesForOpenEntityType() { // Arrange ODataConventionModelBuilder builder = new ODataConventionModelBuilder(); builder.EntityType <SimpleOpenCustomer>(); builder.EnumType <SimpleEnum>(); IEdmModel model = builder.GetEdmModel(); IEdmEntityTypeReference customerTypeReference = model.GetEdmTypeReference(typeof(SimpleOpenCustomer)).AsEntity(); var deserializerProvider = new DefaultODataDeserializerProvider(); var deserializer = new ODataEntityDeserializer(deserializerProvider); ODataEnumValue enumValue = new ODataEnumValue("Third", typeof(SimpleEnum).FullName); ODataComplexValue[] complexValues = { new ODataComplexValue { TypeName = typeof(SimpleOpenAddress).FullName, Properties = new[] { // declared properties new ODataProperty { Name = "Street", Value = "Street 1" }, new ODataProperty { Name = "City", Value = "City 1" }, // dynamic properties new ODataProperty { Name = "DateTimeProperty", Value = new DateTimeOffset(new DateTime(2014, 5, 6)) } } }, new ODataComplexValue { TypeName = typeof(SimpleOpenAddress).FullName, Properties = new[] { // declared properties new ODataProperty { Name = "Street", Value = "Street 2" }, new ODataProperty { Name = "City", Value = "City 2" }, // dynamic properties new ODataProperty { Name = "ArrayProperty", Value = new ODataCollectionValue{ TypeName = "Collection(Edm.Int32)", Items = new[]{ 1, 2, 3, 4 } } } } } }; ODataCollectionValue collectionValue = new ODataCollectionValue { TypeName = "Collection(" + typeof(SimpleOpenAddress).FullName + ")", Items = complexValues }; ODataEntry odataEntry = new ODataEntry { Properties = new[] { // declared properties new ODataProperty { Name = "CustomerId", Value = 991 }, new ODataProperty { Name = "Name", Value = "Name #991" }, // dynamic properties new ODataProperty { Name = "GuidProperty", Value = new Guid("181D3A20-B41A-489F-9F15-F91F0F6C9ECA") }, new ODataProperty { Name = "EnumValue", Value = enumValue }, new ODataProperty { Name = "CollectionProperty", Value = collectionValue } }, TypeName = typeof(SimpleOpenCustomer).FullName }; ODataDeserializerContext readContext = new ODataDeserializerContext() { Model = model }; ODataEntryWithNavigationLinks entry = new ODataEntryWithNavigationLinks(odataEntry); // Act SimpleOpenCustomer customer = deserializer.ReadEntry(entry, customerTypeReference, readContext) as SimpleOpenCustomer; // Assert Assert.NotNull(customer); // Verify the declared properties Assert.Equal(991, customer.CustomerId); Assert.Equal("Name #991", customer.Name); // Verify the dynamic properties Assert.NotNull(customer.CustomerProperties); Assert.Equal(3, customer.CustomerProperties.Count()); Assert.Equal(new Guid("181D3A20-B41A-489F-9F15-F91F0F6C9ECA"), customer.CustomerProperties["GuidProperty"]); Assert.Equal(SimpleEnum.Third, customer.CustomerProperties["EnumValue"]); // Verify the dynamic collection property var collectionValues = Assert.IsType <List <SimpleOpenAddress> >(customer.CustomerProperties["CollectionProperty"]); Assert.NotNull(collectionValues); Assert.Equal(2, collectionValues.Count()); Assert.Equal(new DateTimeOffset(new DateTime(2014, 5, 6)), collectionValues[0].Properties["DateTimeProperty"]); Assert.Equal(new List <int> { 1, 2, 3, 4 }, collectionValues[1].Properties["ArrayProperty"]); }
public void Posting_NonDerivedType_To_Action_Expecting_BaseType_Throws() { // Arrange StringContent content = new StringContent("{ '@odata.type' : '#System.Web.OData.Builder.TestModels.Motorcycle' }"); content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json"); IODataRequestMessage oDataRequest = new ODataMessageWrapper(content.ReadAsStreamAsync().Result, content.Headers); ODataMessageReader reader = new ODataMessageReader(oDataRequest, new ODataMessageReaderSettings(), _model); ODataDeserializerProvider deserializerProvider = new DefaultODataDeserializerProvider(); ODataDeserializerContext context = new ODataDeserializerContext { Model = _model }; IEdmActionImport action = _model.EntityContainer .OperationImports() .Single(f => f.Name == "PostMotorcycle_When_Expecting_Car") as IEdmActionImport; Assert.NotNull(action); context.Path = new ODataPath(new UnboundActionPathSegment(action)); // Act & Assert Assert.Throws<ODataException>( () => new ODataEntityDeserializer(deserializerProvider).Read(reader, typeof(Car), context), "An entry with type 'System.Web.OData.Builder.TestModels.Motorcycle' was found, " + "but it is not assignable to the expected type 'System.Web.OData.Builder.TestModels.Car'. " + "The type specified in the entry must be equal to either the expected type or a derived type."); }
public void ReadComplexValue_CanReadDynamicPropertiesForOpenComplexType() { // Arrange ODataConventionModelBuilder builder = new ODataConventionModelBuilder(); builder.ComplexType<SimpleOpenAddress>(); builder.EnumType<SimpleEnum>(); IEdmModel model = builder.GetEdmModel(); IEdmComplexTypeReference addressTypeReference = model.GetEdmTypeReference(typeof(SimpleOpenAddress)).AsComplex(); var deserializerProvider = new DefaultODataDeserializerProvider(); var deserializer = new ODataComplexTypeDeserializer(deserializerProvider); ODataEnumValue enumValue = new ODataEnumValue("Third", typeof(SimpleEnum).FullName); ODataComplexValue complexValue = new ODataComplexValue { Properties = new[] { // declared properties new ODataProperty { Name = "Street", Value = "My Way #599" }, new ODataProperty { Name = "City", Value = "Redmond & Shanghai" }, // dynamic properties new ODataProperty { Name = "GuidProperty", Value = new Guid("181D3A20-B41A-489F-9F15-F91F0F6C9ECA") }, new ODataProperty { Name = "EnumValue", Value = enumValue }, new ODataProperty { Name = "DateTimeProperty", Value = new DateTimeOffset(new DateTime(1992, 1, 1)) }, new ODataProperty { Name = "DateProperty", Value = new Date(1997, 7, 1)} }, TypeName = typeof(SimpleOpenAddress).FullName }; ODataDeserializerContext readContext = new ODataDeserializerContext() { Model = model }; // Act SimpleOpenAddress address = deserializer.ReadComplexValue(complexValue, addressTypeReference, readContext) as SimpleOpenAddress; // Assert Assert.NotNull(address); // Verify the declared properties Assert.Equal("My Way #599", address.Street); Assert.Equal("Redmond & Shanghai", address.City); // Verify the dynamic properties Assert.NotNull(address.Properties); Assert.Equal(4, address.Properties.Count()); Assert.Equal(new Guid("181D3A20-B41A-489F-9F15-F91F0F6C9ECA"), address.Properties["GuidProperty"]); Assert.Equal(SimpleEnum.Third, address.Properties["EnumValue"]); Assert.Equal(new DateTimeOffset(new DateTime(1992, 1, 1)), address.Properties["DateTimeProperty"]); Assert.Equal(new Date(1997, 7, 1), address.Properties["DateProperty"]); }