public void WriteObjectInline_ThrowsArgumentNull_WriteContext() { ODataResourceSetSerializer serializer = new ODataResourceSetSerializer(_serializerProvider); Assert.ThrowsArgumentNull( () => serializer.WriteObjectInline(graph: null, expectedType: null, writer: new Mock <ODataWriter>().Object, writeContext: null), "writeContext"); }
public void WriteObject_ThrowsArgumentNull_MessageWriter() { ODataResourceSetSerializer serializer = new ODataResourceSetSerializer(_serializerProvider); Assert.ThrowsArgumentNull( () => serializer.WriteObject(graph: null, type: null, messageWriter: null, writeContext: new ODataSerializerContext()), "messageWriter"); }
public void WriteObject_ThrowsArgumentNull_WriteContext() { ODataResourceSetSerializer serializer = new ODataResourceSetSerializer(_serializerProvider); Assert.ThrowsArgumentNull( () => serializer.WriteObject(graph: null, type: null, messageWriter: ODataTestUtil.GetMockODataMessageWriter(), 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 = new ODataConventionModelBuilder(); 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(System.Web.OData.SimpleOpenAddress)"", ""value"": [ { ""Street"": ""Microsoft Rd"", ""City"": ""Redmond"", ""StringProp"": ""abc"", ""*****@*****.**"": ""#Collection(System.Web.OData.SimpleOpenAddress)"", ""Locations"": [] } ] }", result); }
public void WriteObjectInline_ThrowsSerializationException_IfGraphIsNotEnumerable() { ODataResourceSetSerializer serializer = new ODataResourceSetSerializer(_serializerProvider); Assert.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 void WriteObjectInline_ThrowsSerializationException_CannotSerializerNull() { ODataResourceSetSerializer serializer = new ODataResourceSetSerializer(_serializerProvider); Assert.Throws <SerializationException>( () => serializer.WriteObjectInline(graph: null, expectedType: _customersType, writer: new Mock <ODataWriter>().Object, writeContext: _writeContext), "Cannot serialize a null 'ResourceSet'."); }
public void WriteObjectInline_Throws_NullElementInCollection_IfResourceSetContainsNullElement() { // Arrange IEnumerable instance = new object[] { null }; ODataResourceSetSerializer serializer = new ODataResourceSetSerializer(_serializerProvider); // Act & Assert Assert.Throws <SerializationException>( () => serializer.WriteObjectInline(instance, _customersType, new Mock <ODataWriter>().Object, _writeContext), "Collections cannot contain null elements."); }
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 Assert.DoesNotThrow(() => serializer.WriteObjectInline(instance, _addressesType, new Mock <ODataWriter>().Object, writeContext)); }
public void CreateODataOperations_CreateOperations(bool followConventions) { // Arrange // Arrange string expectedTarget = "aa://Target"; ODataResourceSetSerializer serializer = new ODataResourceSetSerializer(_serializerProvider); var builder = new ODataConventionModelBuilder(); 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"; UrlHelper url = CreateMetadataLinkFactory(expectedMetadataPrefix); HttpRequestMessage request = new HttpRequestMessage(); ResourceSetContext resourceSetContext = new ResourceSetContext { EntitySetBase = customers, Request = request, Url = url }; ODataSerializerContext serializerContext = new ODataSerializerContext { NavigationSource = customers, Request = request, Model = model, MetadataLevel = ODataMetadataLevel.FullMetadata, Url = 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 void WriteObjectInline_Throws_TypeCannotBeSerialized_IfResourceSetContainsEntityThatCannotBeSerialized() { // Arrange Mock <ODataSerializerProvider> serializerProvider = new Mock <ODataSerializerProvider>(); HttpRequestMessage request = new HttpRequestMessage(); serializerProvider.Setup(s => s.GetODataPayloadSerializer(typeof(int), request)).Returns <ODataSerializer>(null); IEnumerable instance = new object[] { 42 }; ODataResourceSetSerializer serializer = new ODataResourceSetSerializer(serializerProvider.Object); // Act & Assert Assert.Throws <SerializationException>( () => serializer.WriteObjectInline(instance, _customersType, new Mock <ODataWriter>().Object, _writeContext), "'Default.Customer' cannot be serialized using the ODataMediaTypeFormatter."); }
public void WriteObject_CanWriteTopLevelResourceSetContainsNullComplexElement() { // 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 <Address> addresses = new[] { new Address { City = "Redmond" }, null, new Address { City = "Shanghai" } }; ODataSerializerContext writeContext = new ODataSerializerContext { Model = _model }; // Act serializer.WriteObject(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 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 void CreateResourceSet_Sets_CountValueFromContext() { // Arrange ODataResourceSetSerializer serializer = new ODataResourceSetSerializer(_serializerProvider); const long ExpectedCountValue = 1000; HttpRequestMessage request = new HttpRequestMessage(); request.ODataProperties().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 CreateODataFeed_Sets_DeltaLinkFromContext() { // Arrange ODataResourceSetSerializer serializer = new ODataResourceSetSerializer(_serializerProvider); Uri expectedDeltaLink = new Uri("http://deltalink.com"); HttpRequestMessage request = new HttpRequestMessage(); request.ODataProperties().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 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); }
public void CreateResourceSet_SetsODataOperations() { // Arrange CustomersModelWithInheritance model = new CustomersModelWithInheritance(); IEdmCollectionTypeReference customersType = new EdmCollectionTypeReference(new EdmCollectionType(model.Customer.AsReference())); ODataResourceSetSerializer serializer = new ODataResourceSetSerializer(_serializerProvider); ODataSerializerContext context = new ODataSerializerContext { NavigationSource = model.Customers, Request = new HttpRequestMessage(), Model = model.Model, MetadataLevel = ODataMetadataLevel.FullMetadata, Url = CreateMetadataLinkFactory("http://IgnoreMetadataPath") }; var result = new object[0]; // Act ODataResourceSet resourceSet = serializer.CreateResourceSet(result, customersType, context); // Assert Assert.Equal(1, resourceSet.Actions.Count()); Assert.Equal(2, resourceSet.Functions.Count()); }