public void GetODataDeserializer_Resource_ForComplex() { // Arrange HttpRequest request = GetRequest(_edmModel); // Act IODataDeserializer deserializer = _deserializerProvider.GetODataDeserializer(typeof(Address), request); // Assert Assert.NotNull(deserializer); ODataResourceDeserializer complexDeserializer = Assert.IsType <ODataResourceDeserializer>(deserializer); Assert.Equal(ODataPayloadKind.Resource, deserializer.ODataPayloadKind); Assert.Equal(complexDeserializer.DeserializerProvider, _deserializerProvider); }
public void GetODataDeserializer_Resource_ForEntity() { // Arrange HttpRequest request = GetRequest(_edmModel); // Act ODataDeserializer deserializer = _deserializerProvider.GetODataDeserializer(typeof(Product), request); // Assert Assert.NotNull(deserializer); ODataResourceDeserializer entityDeserializer = Assert.IsType <ODataResourceDeserializer>(deserializer); Assert.Equal(ODataPayloadKind.Resource, deserializer.ODataPayloadKind); Assert.Equal(entityDeserializer.DeserializerProvider, _deserializerProvider); }
public void GetODataDeserializer_Resource_ForComplex() { // Arrange var request = RequestFactory.CreateFromModel(_edmModel); // Act ODataDeserializer deserializer = _deserializerProvider.GetODataDeserializer( typeof(ODataResourceDeserializerTests.Address), request); // Assert Assert.NotNull(deserializer); ODataResourceDeserializer complexDeserializer = Assert.IsType <ODataResourceDeserializer>(deserializer); Assert.Equal(ODataPayloadKind.Resource, deserializer.ODataPayloadKind); Assert.Equal(complexDeserializer.DeserializerProvider, _deserializerProvider); }
public void CanDeserializerSingletonPayloadFromStream() { // Arrange const string payload = "{" + "\"@odata.context\":\"http://localhost/odata/$metadata#CEO\"," + "\"EmployeeId\":789," + "\"EmployeeName\":\"John Hark\"}"; ODataResourceDeserializer deserializer = new ODataResourceDeserializer(_deserializerProvider); // Act EmployeeModel employee = deserializer.Read( GetODataMessageReader(payload), typeof(EmployeeModel), _readContext) as EmployeeModel; // Assert Assert.NotNull(employee); Assert.Equal(789, employee.EmployeeId); Assert.Equal("John Hark", employee.EmployeeName); }
public EnableNestedPathsTest() { _deserializerProvider = ODataDeserializerProviderFactory.Create(); _resourceSetDeserializer = new ODataResourceSetDeserializer(_deserializerProvider); _resourceDeserializer = new ODataResourceDeserializer(_deserializerProvider); _primitiveDeserializer = new ODataPrimitiveDeserializer(); ODataModelBuilder builder = ODataConventionModelBuilderFactory.Create(); builder.EntitySet <EnableNestedPathsCustomer>("EnableNestedPathsCustomers"); builder.EntitySet <EnableNestedPathsProduct>("EnableNestedPathsProducts"); builder.Singleton <EnableNestedPathsCustomer>("EnableNestedPathsTopCustomer"); builder.EntityType <EnableNestedPathsVipCustomer>(); builder.EntityType <EnableNestedPathsVipCustomer>() .Function("GetMostPurchasedProduct") .ReturnsFromEntitySet <EnableNestedPathsProduct>("EnableNestedPathsProduct"); builder.EntityType <EnableNestedPathsProduct>() .Collection .Action("SetDiscountRate"); _model = builder.GetEdmModel(); Type[] controllers = new Type[] { typeof(EnableNestedPathsCustomersController), typeof(EnableNestedPathsProductsController), typeof(EnableNestedPathsTopCustomerController) }; _server = TestServerFactory.Create(controllers, (config) => { config.MapODataServiceRoute("odata", "odata", _model); config.Count().OrderBy().Filter().Expand().MaxTop(null).Select(); }); _client = TestServerFactory.CreateClient(_server); _db = new EnableNestedPathsDatabase(); }
private static object ConvertResource(ODataMessageReader oDataMessageReader, IEdmTypeReference edmTypeReference, ODataDeserializerContext readContext) { EdmEntitySet tempEntitySet = null; if (edmTypeReference.IsEntity()) { IEdmEntityTypeReference entityType = edmTypeReference.AsEntity(); tempEntitySet = new EdmEntitySet(readContext.Model.EntityContainer, "temp", entityType.EntityDefinition()); } // TODO: Sam xu, can we use the parameter-less overload ODataReader resourceReader = oDataMessageReader.CreateODataUriParameterResourceReader(tempEntitySet, edmTypeReference.ToStructuredType()); object item = resourceReader.ReadResourceOrResourceSet(); ODataResourceWrapper topLevelResource = item as ODataResourceWrapper; Contract.Assert(topLevelResource != null); ODataDeserializerProvider deserializerProvider = readContext.Request.GetDeserializerProvider(); ODataResourceDeserializer entityDeserializer = (ODataResourceDeserializer)deserializerProvider.GetEdmTypeDeserializer(edmTypeReference); object value = entityDeserializer.ReadInline(topLevelResource, edmTypeReference, readContext); if (edmTypeReference.IsEntity()) { IEdmEntityTypeReference entityType = edmTypeReference.AsEntity(); return(CovertResourceId(value, topLevelResource.Resource, entityType, readContext)); } return(value); }
public void ReadDeltaResource_Returns_DeletedResource(bool typed) { // Arrange IEdmModel model = GetEdmModel(); IEdmEntityType customer = model.SchemaElements.OfType <IEdmEntityType>().First(c => c.Name == "Customer"); IEdmStructuredTypeReference elementType = new EdmEntityTypeReference(customer, true); Mock <IODataDeserializerProvider> deserializerProvider = new Mock <IODataDeserializerProvider>(); ODataResourceDeserializer resourceDeserializer = new ODataResourceDeserializer(deserializerProvider.Object); Uri id = new Uri("Customers(8)", UriKind.RelativeOrAbsolute); ODataDeletedResource customerDeleted = new ODataDeletedResource(id, DeltaDeletedEntryReason.Deleted) { Properties = new List <ODataProperty> { new ODataProperty { Name = "FirstName", Value = "Peter" }, new ODataProperty { Name = "LastName", Value = "John" } } }; ODataResourceWrapper resourceWrapper = new ODataResourceWrapper(customerDeleted); ODataDeserializerContext context = new ODataDeserializerContext { Model = model, }; if (typed) { context.ResourceType = typeof(DeltaSet <>); } else { context.ResourceType = typeof(EdmChangedObjectCollection); } deserializerProvider.Setup(d => d.GetEdmTypeDeserializer(It.IsAny <IEdmTypeReference>(), false)).Returns(resourceDeserializer); ODataDeltaResourceSetDeserializer deserializer = new ODataDeltaResourceSetDeserializer(deserializerProvider.Object); // Act object result = deserializer.ReadDeltaResource(resourceWrapper, elementType, context); // Assert Action <Delta> testPropertyAction = d => { d.TryGetPropertyValue("FirstName", out object firstName); Assert.Equal("Peter", firstName); d.TryGetPropertyValue("LastName", out object lastName); Assert.Equal("John", lastName); }; if (typed) { DeltaDeletedResource <Customer> deltaDeletedResource = Assert.IsType <DeltaDeletedResource <Customer> >(result); Assert.Equal(id, deltaDeletedResource.Id); Assert.Equal(DeltaDeletedEntryReason.Deleted, deltaDeletedResource.Reason); testPropertyAction(deltaDeletedResource); } else { EdmDeltaDeletedResourceObject deltaDeletedResource = Assert.IsType <EdmDeltaDeletedResourceObject>(result); Assert.Equal(id, deltaDeletedResource.Id); Assert.Equal(DeltaDeletedEntryReason.Deleted, deltaDeletedResource.Reason); testPropertyAction(deltaDeletedResource); } }