public void WriteObject_ThrowsArgumentNull_MessageWriter() { ODataResourceSetSerializer serializer = new ODataResourceSetSerializer(_serializerProvider); ExceptionAssert.ThrowsArgumentNull( () => serializer.WriteObject(graph: null, type: null, messageWriter: null, writeContext: new ODataSerializerContext()), "messageWriter"); }
public void WriteObject_ThrowsArgumentNull_WriteContext() { ODataResourceSetSerializer serializer = new ODataResourceSetSerializer(_serializerProvider); ExceptionAssert.ThrowsArgumentNull( () => serializer.WriteObject(graph: null, type: null, messageWriter: ODataTestUtil.GetMockODataMessageWriter(), writeContext: null), "writeContext"); }
public void WriteObjectInline_ThrowsArgumentNull_WriteContext() { ODataResourceSetSerializer serializer = new ODataResourceSetSerializer(_serializerProvider); ExceptionAssert.ThrowsArgumentNull( () => serializer.WriteObjectInline(graph: null, expectedType: null, writer: new Mock <ODataWriter>().Object, writeContext: null), "writeContext"); }
public void WriteObject_CanWrite_TopLevelResourceSet_ContainsEmptyCollectionOfDynamicComplexElement() { // Arrange ODataResourceSetSerializer serializer = new ODataResourceSetSerializer(_serializerProvider); MemoryStream stream = new MemoryStream(); IODataResponseMessage message = new ODataMessageWrapper(stream); ODataMessageWriterSettings settings = new ODataMessageWriterSettings { ODataUri = new ODataUri { ServiceRoot = new Uri("http://any/"), } }; settings.SetContentType(ODataFormat.Json); ODataMessageWriter writer = new ODataMessageWriter(message, settings); IList <SimpleOpenAddress> addresses = new[] { new SimpleOpenAddress { City = "Redmond", Street = "Microsoft Rd", Properties = new Dictionary <string, object> { { "StringProp", "abc" }, { "Locations", new SimpleOpenAddress[] {} } // empty collection of complex } } }; var builder = ODataConventionModelBuilderFactory.Create(); builder.ComplexType <SimpleOpenAddress>(); IEdmModel model = builder.GetEdmModel(); ODataSerializerContext writeContext = new ODataSerializerContext { Model = model }; // Act serializer.WriteObject(addresses, typeof(IList <SimpleOpenAddress>), writer, writeContext); stream.Seek(0, SeekOrigin.Begin); string result = JObject.Parse(new StreamReader(stream).ReadToEnd()).ToString(); // Assert Assert.Equal(@"{ ""@odata.context"": ""http://any/$metadata#Collection(Microsoft.AspNet.OData.Test.Common.SimpleOpenAddress)"", ""value"": [ { ""Street"": ""Microsoft Rd"", ""City"": ""Redmond"", ""StringProp"": ""abc"", ""*****@*****.**"": ""#Collection(Microsoft.AspNet.OData.Test.Common.SimpleOpenAddress)"", ""Locations"": [] } ] }", result); }
public void WriteObjectInline_ThrowsSerializationException_CannotSerializerNull() { ODataResourceSetSerializer serializer = new ODataResourceSetSerializer(_serializerProvider); ExceptionAssert.Throws <SerializationException>( () => serializer.WriteObjectInline(graph: null, expectedType: _customersType, writer: new Mock <ODataWriter>().Object, writeContext: _writeContext), "Cannot serialize a null 'ResourceSet'."); }
public void WriteObjectInline_ThrowsSerializationException_IfGraphIsNotEnumerable() { ODataResourceSetSerializer serializer = new ODataResourceSetSerializer(_serializerProvider); ExceptionAssert.Throws <SerializationException>( () => serializer.WriteObjectInline(graph: 42, expectedType: _customersType, writer: new Mock <ODataWriter>().Object, writeContext: _writeContext), "ODataResourceSetSerializer cannot write an object of type 'System.Int32'."); }
public async Task WriteObjectInlineAsync_ThrowsArgumentNull_WriteContext() { // Arrange Mock <ODataSerializerProvider> serializerProvider = new Mock <ODataSerializerProvider>(); ODataResourceSetSerializer serializer = new ODataResourceSetSerializer(serializerProvider.Object); // Act & Assert await ExceptionAssert.ThrowsArgumentNullAsync( () => serializer.WriteObjectInlineAsync(graph: null, expectedType: null, writer: new Mock <ODataWriter>().Object, writeContext: null), "writeContext"); }
public void WriteObjectInline_ThrowsArgumentNull_Writer() { // Arrange Mock <ODataSerializerProvider> serializerProvider = new Mock <ODataSerializerProvider>(); ODataResourceSetSerializer serializer = new ODataResourceSetSerializer(serializerProvider.Object); // Act & Assert ExceptionAssert.ThrowsArgumentNull( () => serializer.WriteObjectInline(graph: null, expectedType: null, writer: null, writeContext: new ODataSerializerContext()), "writer"); }
public void WriteObjectInline_Throws_NullElementInCollection_IfResourceSetContainsNullElement() { // Arrange IEnumerable instance = new object[] { null }; ODataResourceSetSerializer serializer = new ODataResourceSetSerializer(_serializerProvider); // Act & Assert ExceptionAssert.Throws <SerializationException>( () => serializer.WriteObjectInline(instance, _customersType, new Mock <ODataWriter>().Object, _writeContext), "Collections cannot contain null elements."); }
public async Task WriteObjectAsync_ThrowsArgumentNull_WriteContext() { // Arrange & Act Mock <ODataSerializerProvider> serializerProvider = new Mock <ODataSerializerProvider>(); ODataResourceSetSerializer serializer = new ODataResourceSetSerializer(serializerProvider.Object); // Assert await ExceptionAssert.ThrowsArgumentNullAsync( () => serializer.WriteObjectAsync(graph: null, type: null, messageWriter: ODataTestUtil.GetMockODataMessageWriter(), writeContext: null), "writeContext"); }
public void WriteObject_ThrowsArgumentNull_MessageWriter() { // Arrange & Act Mock <ODataSerializerProvider> serializerProvider = new Mock <ODataSerializerProvider>(); ODataResourceSetSerializer serializer = new ODataResourceSetSerializer(serializerProvider.Object); // Assert ExceptionAssert.ThrowsArgumentNull( () => serializer.WriteObject(graph: null, type: null, messageWriter: null, writeContext: new ODataSerializerContext()), "messageWriter"); }
public async Task WriteObjectInlineAsync_ThrowsSerializationException_CannotSerializerNull() { // Arrange Mock <ODataSerializerProvider> serializerProvider = new Mock <ODataSerializerProvider>(); ODataResourceSetSerializer serializer = new ODataResourceSetSerializer(serializerProvider.Object); // Act & Assert await ExceptionAssert.ThrowsAsync <SerializationException>( () => serializer.WriteObjectInlineAsync(graph: null, expectedType: _customersType, writer: new Mock <ODataWriter>().Object, writeContext: _writeContext), "Cannot serialize a null 'ResourceSet'."); }
public async Task WriteObjectInlineAsync_ThrowsSerializationException_IfGraphIsNotEnumerable() { // Arrange Mock <ODataSerializerProvider> serializerProvider = new Mock <ODataSerializerProvider>(); ODataResourceSetSerializer serializer = new ODataResourceSetSerializer(serializerProvider.Object); // Act & Assert await ExceptionAssert.ThrowsAsync <SerializationException>( () => serializer.WriteObjectInlineAsync(graph: 42, expectedType: _customersType, writer: new Mock <ODataWriter>().Object, writeContext: _writeContext), "ODataResourceSetSerializer cannot write an object of type 'System.Int32'."); }
public void WriteObjectInline_DoesnotThrow_NullElementInCollection_IfResourceSetContainsNullComplexElement() { // Arrange IEnumerable instance = new object[] { null }; ODataResourceSetSerializer serializer = new ODataResourceSetSerializer(_serializerProvider); ODataSerializerContext writeContext = new ODataSerializerContext { NavigationSource = null, Model = _model }; // Act & Assert ExceptionAssert.DoesNotThrow(() => serializer.WriteObjectInline(instance, _addressesType, new Mock <ODataWriter>().Object, writeContext)); }
public void CreateODataOperations_CreateOperations(bool followConventions) { // Arrange string expectedTarget = "aa://Target"; Mock <ODataSerializerProvider> serializerProvider = new Mock <ODataSerializerProvider>(); ODataResourceSetSerializer serializer = new ODataResourceSetSerializer(serializerProvider.Object); var builder = new ODataConventionModelBuilder(); builder.EntitySet <FeedCustomer>("Customers"); var function = builder.EntityType <FeedCustomer>().Collection.Function("MyFunction").Returns <int>(); IEdmModel model = builder.GetEdmModel(); IEdmEntitySet customers = model.EntityContainer.FindEntitySet("Customers"); IEdmFunction edmFunction = model.SchemaElements.OfType <IEdmFunction>().First(f => f.Name == "MyFunction"); Func <ResourceSetContext, Uri> functionLinkFactory = a => new Uri(expectedTarget); var operationLinkBuilder = new OperationLinkBuilder(functionLinkFactory, followConventions); model.SetOperationLinkBuilder(edmFunction, operationLinkBuilder); var request = RequestFactory.Create(method: "get", uri: "http://any", opt => opt.AddModel(model)); ResourceSetContext resourceSetContext = new ResourceSetContext { EntitySetBase = customers, Request = request, }; ODataSerializerContext serializerContext = new ODataSerializerContext { NavigationSource = customers, Request = request, Model = model, MetadataLevel = ODataMetadataLevel.Full, }; string expectedMetadataPrefix = "http://any/$metadata"; // Act ODataOperation actualOperation = serializer.CreateODataOperation(edmFunction, resourceSetContext, serializerContext); // Assert Assert.NotNull(actualOperation); string expectedMetadata = expectedMetadataPrefix + "#Default.MyFunction"; ODataOperation expectedFunction = new ODataFunction { Metadata = new Uri(expectedMetadata), Target = new Uri(expectedTarget), Title = "MyFunction" }; AssertEqual(expectedFunction, actualOperation); }
public void CreateODataOperations_CreateOperations(bool followConventions) { // Arrange // Arrange string expectedTarget = "aa://Target"; ODataResourceSetSerializer serializer = new ODataResourceSetSerializer(_serializerProvider); var builder = ODataConventionModelBuilderFactory.Create(); builder.EntitySet <FeedCustomer>("Customers"); var function = builder.EntityType <FeedCustomer>().Collection.Function("MyFunction").Returns <int>(); function.HasFeedFunctionLink(a => new Uri(expectedTarget), followConventions); IEdmModel model = builder.GetEdmModel(); IEdmEntitySet customers = model.EntityContainer.FindEntitySet("Customers"); IEdmFunction edmFunction = model.SchemaElements.OfType <IEdmFunction>().First(f => f.Name == "MyFunction"); string expectedMetadataPrefix = "http://Metadata"; var request = RequestFactory.Create(); ResourceSetContext resourceSetContext = new ResourceSetContext { EntitySetBase = customers, Request = request, Url = CreateMetadataLinkFactory(expectedMetadataPrefix, request) }; ODataSerializerContext serializerContext = new ODataSerializerContext { NavigationSource = customers, Request = request, Model = model, MetadataLevel = ODataMetadataLevel.FullMetadata, Url = resourceSetContext.Url }; // Act ODataOperation actualOperation = serializer.CreateODataOperation(edmFunction, resourceSetContext, serializerContext); // Assert Assert.NotNull(actualOperation); string expectedMetadata = expectedMetadataPrefix + "#Default.MyFunction"; ODataOperation expectedFunction = new ODataFunction { Metadata = new Uri(expectedMetadata), Target = new Uri(expectedTarget), Title = "MyFunction" }; AssertEqual(expectedFunction, actualOperation); }
public void CreateResource_Sets_NextPageLinkForPageResult() { // Arrange ODataResourceSetSerializer serializer = new ODataResourceSetSerializer(_serializerProvider); Uri expectedNextLink = new Uri("http://nextlink.com"); const long ExpectedCountValue = 1000; var result = new PageResult <Customer>(_customers, expectedNextLink, ExpectedCountValue); // Act ODataResourceSet resourceSet = serializer.CreateResourceSet(result, _customersType, new ODataSerializerContext()); // Assert Assert.Equal(expectedNextLink, resourceSet.NextPageLink); }
public async Task WriteObjectInlineAsync_Throws_NullElementInCollection_IfResourceSetContainsNullElement() { // Arrange IEnumerable instance = new object[] { null }; Mock <ODataSerializerProvider> serializerProvider = new Mock <ODataSerializerProvider>(); Mock <ODataResourceSerializer> resourceSerializer = new Mock <ODataResourceSerializer>(serializerProvider.Object); serializerProvider.Setup(s => s.GetEdmTypeSerializer(It.IsAny <IEdmTypeReference>())).Returns(resourceSerializer.Object); ODataResourceSetSerializer serializer = new ODataResourceSetSerializer(serializerProvider.Object); // Act & Assert await ExceptionAssert.ThrowsAsync <SerializationException>( () => serializer.WriteObjectInlineAsync(instance, _customersType, new Mock <ODataWriter>().Object, _writeContext), "Collections cannot contain null elements."); }
public void WriteObjectInline_Throws_TypeCannotBeSerialized_IfResourceSetContainsEntityThatCannotBeSerialized() { // Arrange Mock <ODataSerializerProvider> serializerProvider = new Mock <ODataSerializerProvider>(); var request = RequestFactory.Create(); serializerProvider.Setup(s => s.GetODataPayloadSerializer(typeof(int), request)).Returns <ODataSerializer>(null); IEnumerable instance = new object[] { 42 }; ODataResourceSetSerializer serializer = new ODataResourceSetSerializer(serializerProvider.Object); // Act & Assert ExceptionAssert.Throws <SerializationException>( () => serializer.WriteObjectInline(instance, _customersType, new Mock <ODataWriter>().Object, _writeContext), "'Default.Customer' cannot be serialized using the ODataMediaTypeFormatter."); }
public void WriteObjectInlineAsync_DoesnotThrow_NullElementInCollection_IfResourceSetContainsNullComplexElement() { // Arrange IEnumerable instance = new object[] { null }; Mock <ODataSerializerProvider> serializerProvider = new Mock <ODataSerializerProvider>(); Mock <ODataResourceSerializer> resourceSerializer = new Mock <ODataResourceSerializer>(serializerProvider.Object); serializerProvider.Setup(s => s.GetEdmTypeSerializer(It.IsAny <IEdmTypeReference>())).Returns(resourceSerializer.Object); ODataResourceSetSerializer serializer = new ODataResourceSetSerializer(serializerProvider.Object); ODataSerializerContext writeContext = new ODataSerializerContext { NavigationSource = null, Model = _model }; // Act & Assert ExceptionAssert.DoesNotThrow(() => serializer.WriteObjectInlineAsync(instance, _addressesType, new Mock <ODataWriter>().Object, writeContext).Wait()); }
public async Task WriteObjectAsync_CanWriteTopLevelResourceSetContainsNullComplexElement() { // Arrange ODataSerializerProvider serializerProvider = GetServiceProvider().GetService <ODataSerializerProvider>(); ODataResourceSetSerializer serializer = new ODataResourceSetSerializer(serializerProvider); MemoryStream stream = new MemoryStream(); IODataResponseMessageAsync message = new ODataMessageWrapper(stream); ODataMessageWriterSettings settings = new ODataMessageWriterSettings { ODataUri = new ODataUri { ServiceRoot = new Uri("http://any/"), } }; settings.SetContentType(ODataFormat.Json); ODataMessageWriter writer = new ODataMessageWriter(message, settings); IList <Address> addresses = new[] { new Address { City = "Redmond" }, null, new Address { City = "Shanghai" } }; ODataSerializerContext writeContext = new ODataSerializerContext { Model = _model }; // Act await serializer.WriteObjectAsync(addresses, typeof(IList <Address>), writer, writeContext); stream.Seek(0, SeekOrigin.Begin); string result = new StreamReader(stream).ReadToEnd(); // Assert Assert.Equal("{\"@odata.context\":\"http://any/$metadata#Collection(Default.Address)\"," + "\"value\":[" + "{\"Street\":null,\"City\":\"Redmond\",\"State\":null,\"CountryOrRegion\":null,\"ZipCode\":null}," + "null," + "{\"Street\":null,\"City\":\"Shanghai\",\"State\":null,\"CountryOrRegion\":null,\"ZipCode\":null}" + "]}", result); }
public void SetODataFeatureTotalCountValueNull() { // Arrange ODataResourceSetSerializer serializer = new ODataResourceSetSerializer(_serializerProvider); var request = RequestFactory.Create(); request.ODataContext().TotalCount = null; var result = new object[0]; // Act ODataResourceSet resourceSet = serializer.CreateResourceSet(result, _customersType, new ODataSerializerContext { Request = request }); // Assert Assert.Null(resourceSet.Count); }
public void CreateODataFeed_Sets_DeltaLinkFromContext() { // Arrange ODataResourceSetSerializer serializer = new ODataResourceSetSerializer(_serializerProvider); Uri expectedDeltaLink = new Uri("http://deltalink.com"); var request = RequestFactory.Create(); request.ODataContext().DeltaLink = expectedDeltaLink; var result = new object[0]; // Act ODataResourceSet feed = serializer.CreateResourceSet(result, _customersType, new ODataSerializerContext { Request = request }); // Assert Assert.Equal(expectedDeltaLink, feed.DeltaLink); }
public void CreateResourceSet_Sets_NextPageLinkFromContext() { // Arrange ODataResourceSetSerializer serializer = new ODataResourceSetSerializer(_serializerProvider); Uri expectedNextLink = new Uri("http://nextlink.com"); var request = RequestFactory.Create(); request.ODataContext().NextLink = expectedNextLink; var result = new object[0]; // Act ODataResourceSet resourceSet = serializer.CreateResourceSet(result, _customersType, new ODataSerializerContext { Request = request }); // Assert Assert.Equal(expectedNextLink, resourceSet.NextPageLink); }
public void CreateResourceSet_Sets_CountValueFromContext() { // Arrange ODataResourceSetSerializer serializer = new ODataResourceSetSerializer(_serializerProvider); const long ExpectedCountValue = 1000; var request = RequestFactory.Create(); request.ODataContext().TotalCount = ExpectedCountValue; var result = new object[0]; // Act ODataResourceSet resourceSet = serializer.CreateResourceSet(result, _customersType, new ODataSerializerContext { Request = request }); // Assert Assert.Equal(ExpectedCountValue, resourceSet.Count); }
public void WriteObjectInline_WritesEachEntityInstance() { // Arrange Mock <ODataEdmTypeSerializer> customerSerializer = new Mock <ODataEdmTypeSerializer>(ODataPayloadKind.Resource); ODataSerializerProvider provider = ODataTestUtil.GetMockODataSerializerProvider(customerSerializer.Object); var mockWriter = new Mock <ODataWriter>(); customerSerializer.Setup(s => s.WriteObjectInline(_customers[0], _customersType.ElementType(), mockWriter.Object, _writeContext)).Verifiable(); customerSerializer.Setup(s => s.WriteObjectInline(_customers[1], _customersType.ElementType(), mockWriter.Object, _writeContext)).Verifiable(); _serializer = new ODataResourceSetSerializer(provider); // Act _serializer.WriteObjectInline(_customers, _customersType, mockWriter.Object, _writeContext); // Assert customerSerializer.Verify(); }
public async Task ReadAsync_Roundtrip_ComplexCollection() { // Arrange Address[] addresses = new[] { new Address { City = "Redmond", StreetAddress = "A", State = "123" }, new Address { City = "Seattle", StreetAddress = "S", State = "321" } }; ODataResourceSetSerializer serializer = new ODataResourceSetSerializer(_serializerProvider); ODataResourceSetDeserializer deserializer = new ODataResourceSetDeserializer(_deserializerProvider); MemoryStream stream = new MemoryStream(); ODataMessageWrapper message = new ODataMessageWrapper(stream); ODataMessageWriterSettings settings = new ODataMessageWriterSettings { ODataUri = new ODataUri { ServiceRoot = new Uri("http://any/") } }; ODataMessageWriter messageWriter = new ODataMessageWriter(message as IODataResponseMessage, settings, _model); ODataMessageReader messageReader = new ODataMessageReader(message as IODataResponseMessage, new ODataMessageReaderSettings(), _model); ODataSerializerContext writeContext = new ODataSerializerContext { RootElementName = "Property", Model = _model }; ODataDeserializerContext readContext = new ODataDeserializerContext() { Model = _model }; // Act await serializer.WriteObjectAsync(addresses, addresses.GetType(), messageWriter, writeContext); stream.Seek(0, SeekOrigin.Begin); IEnumerable readAddresses = await deserializer.ReadAsync(messageReader, typeof(Address[]), readContext) as IEnumerable; // Assert Assert.Equal(addresses, readAddresses.Cast <Address>(), new AddressComparer()); }
public void CreateODataOperation_ThrowsArgumentNull_ForInputParameters() { // Arrange & Act & Assert Mock <ODataSerializerProvider> serializerProvider = new Mock <ODataSerializerProvider>(); ODataResourceSetSerializer serializer = new ODataResourceSetSerializer(serializerProvider.Object); // Act & Assert ExceptionAssert.ThrowsArgumentNull(() => serializer.CreateODataOperation(null, null, null), "operation"); // Act & Assert IEdmOperation operation = new Mock <IEdmOperation>().Object; ExceptionAssert.ThrowsArgumentNull(() => serializer.CreateODataOperation(operation, null, null), "resourceSetContext"); // Act & Assert ResourceSetContext context = new ResourceSetContext(); ExceptionAssert.ThrowsArgumentNull(() => serializer.CreateODataOperation(operation, context, null), "writeContext"); }
public void CreateODataOperation_OmitsOperations_WhenNonFullMetadata(ODataMetadataLevel metadataLevel) { // Arrange ODataResourceSetSerializer serializer = new ODataResourceSetSerializer(_serializerProvider); IEdmTypeReference returnType = EdmCoreModel.Instance.GetPrimitive(EdmPrimitiveTypeKind.Boolean, isNullable: false); IEdmFunction function = new EdmFunction("NS", "Function", returnType, isBound: true, entitySetPathExpression: null, isComposable: false); ResourceSetContext resourceSetContext = new ResourceSetContext(); ODataSerializerContext serializerContext = new ODataSerializerContext { MetadataLevel = metadataLevel }; // Act ODataOperation operation = serializer.CreateODataOperation(function, resourceSetContext, serializerContext); // Assert Assert.Null(operation); }