public void WriteToStreamAsync_Passes_MetadataLevelToSerializerContext() { // Arrange var model = CreateModel(); Mock <ODataSerializer> serializer = new Mock <ODataSerializer>(ODataPayloadKind.Property); Mock <ODataSerializerProvider> serializerProvider = new Mock <ODataSerializerProvider>(); serializerProvider.Setup(p => p.GetODataPayloadSerializer(model, typeof(int))).Returns(serializer.Object); serializer .Setup(s => s.WriteObject(42, It.IsAny <ODataMessageWriter>(), It.Is <ODataSerializerContext>(c => c.MetadataLevel == ODataMetadataLevel.FullMetadata))) .Verifiable(); ODataDeserializerProvider deserializerProvider = new DefaultODataDeserializerProvider(); var formatter = new ODataMediaTypeFormatter(deserializerProvider, serializerProvider.Object, Enumerable.Empty <ODataPayloadKind>(), ODataVersion.V3, CreateFakeODataRequest(model)); HttpContent content = new StringContent("42"); content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json;odata=fullmetadata"); // Act formatter.WriteToStreamAsync(typeof(int), 42, new MemoryStream(), content, transportContext: null); // Assert serializer.Verify(); }
public void WriteToStreamAsync_PassesSelectExpandClause_ThroughSerializerContext() { // Arrange var model = CreateModel(); var request = CreateFakeODataRequest(model); SelectExpandClause selectExpandClause = new SelectExpandClause(new SelectItem[0], allSelected: true); request.SetSelectExpandClause(selectExpandClause); Mock <ODataSerializer> serializer = new Mock <ODataSerializer>(ODataPayloadKind.Property); Mock <ODataSerializerProvider> serializerProvider = new Mock <ODataSerializerProvider>(); serializerProvider.Setup(p => p.GetODataPayloadSerializer(model, typeof(int), request)).Returns(serializer.Object); serializer .Setup(s => s.WriteObject(42, typeof(int), It.IsAny <ODataMessageWriter>(), It.Is <ODataSerializerContext>(c => c.SelectExpandClause == selectExpandClause))) .Verifiable(); ODataDeserializerProvider deserializerProvider = new DefaultODataDeserializerProvider(); var formatter = new ODataMediaTypeFormatter(deserializerProvider, serializerProvider.Object, Enumerable.Empty <ODataPayloadKind>()); formatter.Request = request; HttpContent content = new StringContent("42"); content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json;odata=fullmetadata"); // Act formatter.WriteToStreamAsync(typeof(int), 42, new MemoryStream(), content, transportContext: null); // Assert serializer.Verify(); }
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 Ctor_ThrowsArgumentNull_SerializerProvider() { ODataDeserializerProvider deserializerProvider = new DefaultODataDeserializerProvider(); ODataPayloadKind[] payloadKinds = new ODataPayloadKind[0]; Assert.ThrowsArgumentNull( () => new ODataMediaTypeFormatter(deserializerProvider, serializerProvider: null, payloadKinds: payloadKinds), "serializerProvider"); }
public ODataJsonParser(Uri serviceRootUri, IEdmModel model) { _model = model; _settings = new ODataMessageReaderSettings() { BaseUri = serviceRootUri }; var provider = new DefaultODataDeserializerProvider(); _deserializer = new ODataEntityDeserializer(provider); }
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); }
private static FeaturedODataSerializerProvider GetOrAddFeaturedSerializationProvider(this HttpConfiguration configuration) { var serializerProvider = configuration.Formatters.OfType <ODataMediaTypeFormatter>().Select(f => f.SerializerProvider).OfType <FeaturedODataSerializerProvider>().FirstOrDefault(); if (serializerProvider != null) { return(serializerProvider); } serializerProvider = new FeaturedODataSerializerProvider(); var deserializerProvider = new DefaultODataDeserializerProvider(); var formatters = ODataMediaTypeFormatters.Create(serializerProvider, deserializerProvider); configuration.Formatters.InsertRange(0, formatters); return(serializerProvider); }
public void Posting_NonDerivedType_To_Action_Expecting_BaseType_Throws() { StringContent content = new StringContent("{ '__metadata' : { 'type' : 'System.Web.Http.OData.Builder.TestModels.Motorcycle' } }"); content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json;odata=verbose"); IODataRequestMessage oDataRequest = new ODataMessageWrapper(content.ReadAsStreamAsync().Result, content.Headers); ODataMessageReader reader = new ODataMessageReader(oDataRequest, new ODataMessageReaderSettings(), _model); ODataDeserializerProvider deserializerProvider = new DefaultODataDeserializerProvider(); IEdmEntityTypeReference _motorcycle = new EdmEntityTypeReference(_model.SchemaElements.OfType <IEdmEntityType>().Single(t => t.Name == "Car"), isNullable: false); ODataDeserializerContext context = new ODataDeserializerContext(); context.Path = new ODataPath(new ActionPathSegment(_model.EntityContainers().Single().FunctionImports().Single(f => f.Name == "PostMotorcycle_When_Expecting_Car"))); Assert.Throws <ODataException>( () => new ODataEntityDeserializer(_motorcycle, deserializerProvider).Read(reader, context), "An entry with type 'System.Web.Http.OData.Builder.TestModels.Motorcycle' was found, " + "but it is not assignable to the expected type 'System.Web.Http.OData.Builder.TestModels.Car'. " + "The type specified in the entry must be equal to either the expected type or a derived type."); }