public void CreateODataFeed_Ignores_CountValue_ForInnerFeeds() { // Arrange ODataFeedSerializer serializer = new ODataFeedSerializer(new DefaultODataSerializerProvider()); HttpRequestMessage request = new HttpRequestMessage(); request.ODataProperties().TotalCount = 42; var result = new object[0]; IEdmNavigationProperty navProp = _customerSet.EntityType().NavigationProperties().First(); SelectExpandClause selectExpandClause = new SelectExpandClause(new SelectItem[0], allSelected: true); EntityInstanceContext entity = new EntityInstanceContext { SerializerContext = new ODataSerializerContext { Request = request, NavigationSource = _customerSet, Model = _model } }; ODataSerializerContext nestedContext = new ODataSerializerContext(entity, selectExpandClause, navProp); // Act ODataFeed feed = serializer.CreateODataFeed(result, _customersType, nestedContext); // Assert Assert.Null(feed.Count); }
/// <summary> /// Initializes a new instance of the <see cref="DefaultODataSerializerProvider"/> class. /// </summary> public DefaultODataSerializerProvider() { _feedSerializer = new ODataFeedSerializer(this); _collectionSerializer = new ODataCollectionSerializer(this); _complexTypeSerializer = new ODataComplexTypeSerializer(this); _entityTypeSerializer = new ODataEntityTypeSerializer(this); }
public void CreateODataFeed_SetsNextPageLink_WhenWritingTruncatedCollection_ForExpandedProperties() { // Arrange CustomersModelWithInheritance model = new CustomersModelWithInheritance(); IEdmCollectionTypeReference customersType = new EdmCollectionTypeReference(new EdmCollectionType(model.Customer.AsReference())); ODataFeedSerializer serializer = new ODataFeedSerializer(new DefaultODataSerializerProvider()); SelectExpandClause selectExpandClause = new SelectExpandClause(new SelectItem[0], allSelected: true); IEdmNavigationProperty ordersProperty = model.Customer.NavigationProperties().First(); EntityInstanceContext entity = new EntityInstanceContext { SerializerContext = new ODataSerializerContext { NavigationSource = model.Customers, Model = model.Model } }; ODataSerializerContext nestedContext = new ODataSerializerContext(entity, selectExpandClause, ordersProperty); TruncatedCollection <Order> orders = new TruncatedCollection <Order>(new[] { new Order(), new Order() }, pageSize: 1); NavigationSourceLinkBuilderAnnotation linkBuilder = new NavigationSourceLinkBuilderAnnotation(); linkBuilder.AddNavigationPropertyLinkBuilder(ordersProperty, new NavigationLinkBuilder((entityContext, navigationProperty) => new Uri("http://navigation-link/"), false)); model.Model.SetNavigationSourceLinkBuilder(model.Customers, linkBuilder); model.Model.SetNavigationSourceLinkBuilder(model.Orders, new NavigationSourceLinkBuilderAnnotation()); // Act ODataFeed feed = serializer.CreateODataFeed(orders, _customersType, nestedContext); // Assert Assert.Equal("http://navigation-link/?$skip=1", feed.NextPageLink.AbsoluteUri); }
public void WriteObject_ThrowsArgumentNull_MessageWriter() { ODataFeedSerializer serializer = new ODataFeedSerializer(new DefaultODataSerializerProvider()); Assert.ThrowsArgumentNull( () => serializer.WriteObject(graph: null, type: null, messageWriter: null, writeContext: new ODataSerializerContext()), "messageWriter"); }
public void WriteObject_ThrowsArgumentNull_WriteContext() { ODataFeedSerializer serializer = new ODataFeedSerializer(new DefaultODataSerializerProvider()); Assert.ThrowsArgumentNull( () => serializer.WriteObject(graph: null, type: null, messageWriter: ODataTestUtil.GetMockODataMessageWriter(), writeContext: null), "writeContext"); }
public void WriteObjectInline_Can_WriteCollectionOfIEdmObjects() { // Arrange IEdmTypeReference edmType = new EdmEntityTypeReference(new EdmEntityType("NS", "Name"), isNullable: false); IEdmCollectionTypeReference feedType = new EdmCollectionTypeReference(new EdmCollectionType(edmType)); Mock <IEdmObject> edmObject = new Mock <IEdmObject>(); edmObject.Setup(e => e.GetEdmType()).Returns(edmType); var mockWriter = new Mock <ODataWriter>(); Mock <ODataEdmTypeSerializer> customSerializer = new Mock <ODataEdmTypeSerializer>(ODataPayloadKind.Entry); customSerializer.Setup(s => s.WriteObjectInline(edmObject.Object, edmType, mockWriter.Object, _writeContext)).Verifiable(); Mock <ODataSerializerProvider> serializerProvider = new Mock <ODataSerializerProvider>(); serializerProvider.Setup(s => s.GetEdmTypeSerializer(edmType)).Returns(customSerializer.Object); ODataFeedSerializer serializer = new ODataFeedSerializer(serializerProvider.Object); // Act serializer.WriteObjectInline(new[] { edmObject.Object }, feedType, mockWriter.Object, _writeContext); // Assert customSerializer.Verify(); }
public void WriteObject_ThrowsEntitySetMissingDuringSerialization() { ODataFeedSerializer serializer = new ODataFeedSerializer(new DefaultODataSerializerProvider()); Assert.Throws<SerializationException>( () => serializer.WriteObject(graph: null, type: null, messageWriter: ODataTestUtil.GetMockODataMessageWriter(), writeContext: new ODataSerializerContext()), "The related entity set could not be found from the OData path. The related entity set is required to serialize the payload."); }
public void WriteObjectInline_ThrowsArgumentNull_WriteContext() { ODataFeedSerializer serializer = new ODataFeedSerializer(new DefaultODataSerializerProvider()); Assert.ThrowsArgumentNull( () => serializer.WriteObjectInline(graph: null, expectedType: null, writer: new Mock <ODataWriter>().Object, writeContext: null), "writeContext"); }
public void WriteObject_ThrowsEntitySetMissingDuringSerialization() { ODataFeedSerializer serializer = new ODataFeedSerializer(new DefaultODataSerializerProvider()); Assert.Throws <SerializationException>( () => serializer.WriteObject(graph: null, type: null, messageWriter: ODataTestUtil.GetMockODataMessageWriter(), writeContext: new ODataSerializerContext()), "The related entity set could not be found from the OData path. The related entity set is required to serialize the payload."); }
public void WriteObjectInline_ThrowsSerializationException_IfGraphIsNotEnumerable() { ODataFeedSerializer serializer = new ODataFeedSerializer(new DefaultODataSerializerProvider()); Assert.Throws <SerializationException>( () => serializer.WriteObjectInline(graph: 42, expectedType: _customersType, writer: new Mock <ODataWriter>().Object, writeContext: _writeContext), "ODataFeedSerializer cannot write an object of type 'System.Int32'."); }
public void WriteObjectInline_ThrowsSerializationException_CannotSerializerNull() { ODataFeedSerializer serializer = new ODataFeedSerializer(new DefaultODataSerializerProvider()); Assert.Throws <SerializationException>( () => serializer.WriteObjectInline(graph: null, expectedType: _customersType, writer: new Mock <ODataWriter>().Object, writeContext: _writeContext), "Cannot serialize a null 'feed'."); }
public void WriteObjectInline_Throws_NullElementInCollection_IfFeedContainsNullElement() { // Arrange IEnumerable instance = new object[] { null }; ODataFeedSerializer serializer = new ODataFeedSerializer(new DefaultODataSerializerProvider()); // Act Assert.Throws <SerializationException>( () => serializer.WriteObjectInline(instance, _customersType, new Mock <ODataWriter>().Object, _writeContext), "Collections cannot contain null elements."); }
public void CreateODataOperations_CreateOperations(bool followConventions) { // Arrange // Arrange string expectedTarget = "aa://Target"; ODataFeedSerializer serializer = new ODataFeedSerializer(new DefaultODataSerializerProvider()); 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(); FeedContext feedContext = new FeedContext { 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, feedContext, 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 WriteObjectInline_Throws_TypeCannotBeSerialized_IfFeedContainsEntityThatCannotBeSerialized() { // Arrange Mock <ODataSerializerProvider> serializerProvider = new Mock <ODataSerializerProvider>(); HttpRequestMessage request = new HttpRequestMessage(); serializerProvider.Setup(s => s.GetODataPayloadSerializer(_model, typeof(int), request)).Returns <ODataSerializer>(null); IEnumerable instance = new object[] { 42 }; ODataFeedSerializer serializer = new ODataFeedSerializer(serializerProvider.Object); // Act Assert.Throws <SerializationException>( () => serializer.WriteObjectInline(instance, _customersType, new Mock <ODataWriter>().Object, _writeContext), "'Default.Customer' cannot be serialized using the ODataMediaTypeFormatter."); }
public void CreateODataFeed_Sets_NextPageLinkForPageResult() { // Arrange ODataFeedSerializer serializer = new ODataFeedSerializer(new DefaultODataSerializerProvider()); Uri expectedNextLink = new Uri("http://nextlink.com"); const long ExpectedCountValue = 1000; var result = new PageResult <Customer>(_customers, expectedNextLink, ExpectedCountValue); // Act ODataFeed feed = serializer.CreateODataFeed(result, _customersType, new ODataSerializerContext()); // Assert Assert.Equal(expectedNextLink, feed.NextPageLink); }
public void WriteObjectInline_WritesEachEntityInstance() { // Arrange Mock <ODataEdmTypeSerializer> customerSerializer = new Mock <ODataEdmTypeSerializer>(ODataPayloadKind.Entry); 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 ODataFeedSerializer(provider); // Act _serializer.WriteObjectInline(_customers, _customersType, mockWriter.Object, _writeContext); // Assert customerSerializer.Verify(); }
public void CreateODataFeed_Sets_DeltaLinkFromContext() { // Arrange ODataFeedSerializer serializer = new ODataFeedSerializer(new DefaultODataSerializerProvider()); Uri expectedDeltaLink = new Uri("http://deltalink.com"); HttpRequestMessage request = new HttpRequestMessage(); request.ODataProperties().DeltaLink = expectedDeltaLink; var result = new object[0]; // Act ODataFeed feed = serializer.CreateODataFeed(result, _customersType, new ODataSerializerContext { Request = request }); // Assert Assert.Equal(expectedDeltaLink, feed.DeltaLink); }
public void CreateODataFeed_Sets_CountValueFromContext() { // Arrange ODataFeedSerializer serializer = new ODataFeedSerializer(new DefaultODataSerializerProvider()); const long ExpectedCountValue = 1000; HttpRequestMessage request = new HttpRequestMessage(); request.ODataProperties().TotalCount = ExpectedCountValue; var result = new object[0]; // Act ODataFeed feed = serializer.CreateODataFeed(result, _customersType, new ODataSerializerContext { Request = request }); // Assert Assert.Equal(ExpectedCountValue, feed.Count); }
public void CreateODataOperation_OmitsOperations_WhenNonFullMetadata(ODataMetadataLevel metadataLevel) { // Arrange ODataFeedSerializer serializer = new ODataFeedSerializer(new DefaultODataSerializerProvider()); IEdmTypeReference returnType = EdmCoreModel.Instance.GetPrimitive(EdmPrimitiveTypeKind.Boolean, isNullable: false); IEdmFunction function = new EdmFunction("NS", "Function", returnType, isBound: true, entitySetPathExpression: null, isComposable: false); FeedContext feedContext = new FeedContext(); ODataSerializerContext serializerContext = new ODataSerializerContext { MetadataLevel = metadataLevel }; // Act ODataOperation operation = serializer.CreateODataOperation(function, feedContext, serializerContext); // Assert Assert.Null(operation); }
public void CreateODataFeed_SetsODataOperations() { // Arrange CustomersModelWithInheritance model = new CustomersModelWithInheritance(); IEdmCollectionTypeReference customersType = new EdmCollectionTypeReference(new EdmCollectionType(model.Customer.AsReference())); ODataFeedSerializer serializer = new ODataFeedSerializer(new DefaultODataSerializerProvider()); 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 ODataFeed feed = serializer.CreateODataFeed(result, customersType, context); // Assert Assert.Equal(1, feed.Actions.Count()); Assert.Equal(2, feed.Functions.Count()); }
public void CreateODataFeed_Ignores_NextPageLink_ForInnerFeeds() { // Arrange ODataFeedSerializer serializer = new ODataFeedSerializer(new DefaultODataSerializerProvider()); Uri nextLink = new Uri("http://somelink"); HttpRequestMessage request = new HttpRequestMessage(); request.ODataProperties().NextLink = nextLink; var result = new object[0]; IEdmNavigationProperty navProp = new Mock<IEdmNavigationProperty>().Object; SelectExpandClause selectExpandClause = new SelectExpandClause(new SelectItem[0], allSelected: true); EntityInstanceContext entity = new EntityInstanceContext { SerializerContext = new ODataSerializerContext { Request = request, EntitySet = _customerSet } }; ODataSerializerContext nestedContext = new ODataSerializerContext(entity, selectExpandClause, navProp); // Act ODataFeed feed = serializer.CreateODataFeed(result, _customersType, nestedContext); // Assert Assert.Null(feed.NextPageLink); }
public void CreateODataFeed_Sets_FeedSelfLink() { // Arrange var feedInstance = new object[0]; ODataSerializerContext writeContext = new ODataSerializerContext { NavigationSource = _customerSet, Model = _model, Request = new HttpRequestMessage() }; writeContext.Url = new UrlHelper(writeContext.Request); ODataFeedSerializer serializer = new ODataFeedSerializer(new DefaultODataSerializerProvider()); Uri feedSelfLink = new Uri("http://feed_self_link/"); NavigationSourceLinkBuilderAnnotation linkBuilder = new MockNavigationSourceLinkBuilderAnnotation { FeedSelfLinkBuilder = (context) => { Assert.Equal(_customerSet, context.EntitySet); Assert.Equal(feedInstance, context.FeedInstance); Assert.Equal(writeContext.Request, context.Request); Assert.Equal(writeContext.Url, context.Url); return feedSelfLink; } }; _model.SetNavigationSourceLinkBuilder(_customerSet, linkBuilder); // Act ODataFeed feed = serializer.CreateODataFeed(feedInstance, _customersType, writeContext); // Assert AtomFeedMetadata feedMetadata = feed.GetAnnotation<AtomFeedMetadata>(); Assert.Equal(feedSelfLink, feedMetadata.SelfLink.Href); Assert.Equal("self", feedMetadata.SelfLink.Relation); }
public void CreateODataFeed_SetsNextPageLink_WhenWritingTruncatedCollection_ForExpandedProperties() { // Arrange CustomersModelWithInheritance model = new CustomersModelWithInheritance(); IEdmCollectionTypeReference customersType = new EdmCollectionTypeReference(new EdmCollectionType(model.Customer.AsReference())); ODataFeedSerializer serializer = new ODataFeedSerializer(new DefaultODataSerializerProvider()); SelectExpandClause selectExpandClause = new SelectExpandClause(new SelectItem[0], allSelected: true); IEdmNavigationProperty ordersProperty = model.Customer.NavigationProperties().First(); EntityInstanceContext entity = new EntityInstanceContext { SerializerContext = new ODataSerializerContext { NavigationSource = model.Customers, Model = model.Model } }; ODataSerializerContext nestedContext = new ODataSerializerContext(entity, selectExpandClause, ordersProperty); TruncatedCollection<Order> orders = new TruncatedCollection<Order>(new[] { new Order(), new Order() }, pageSize: 1); Mock<NavigationSourceLinkBuilderAnnotation> linkBuilder = new Mock<NavigationSourceLinkBuilderAnnotation>(); linkBuilder.Setup(l => l.BuildNavigationLink(entity, ordersProperty, ODataMetadataLevel.Default)).Returns(new Uri("http://navigation-link/")); model.Model.SetNavigationSourceLinkBuilder(model.Customers, linkBuilder.Object); model.Model.SetNavigationSourceLinkBuilder(model.Orders, new NavigationSourceLinkBuilderAnnotation()); // Act ODataFeed feed = serializer.CreateODataFeed(orders, _customersType, nestedContext); // Assert Assert.Equal("http://navigation-link/?$skip=1", feed.NextPageLink.AbsoluteUri); }
public void CreateODataFeed_Sets_NextPageLinkFromContext() { // Arrange ODataFeedSerializer serializer = new ODataFeedSerializer(new DefaultODataSerializerProvider()); Uri expectedNextLink = new Uri("http://nextlink.com"); HttpRequestMessage request = new HttpRequestMessage(); request.ODataProperties().NextLink = expectedNextLink; var result = new object[0]; // Act ODataFeed feed = serializer.CreateODataFeed(result, _customersType, new ODataSerializerContext { Request = request }); // Assert Assert.Equal(expectedNextLink, feed.NextPageLink); }
public void WriteObjectInline_Can_WriteCollectionOfIEdmObjects() { // Arrange IEdmTypeReference edmType = new EdmEntityTypeReference(new EdmEntityType("NS", "Name"), isNullable: false); IEdmCollectionTypeReference feedType = new EdmCollectionTypeReference(new EdmCollectionType(edmType)); Mock<IEdmObject> edmObject = new Mock<IEdmObject>(); edmObject.Setup(e => e.GetEdmType()).Returns(edmType); var mockWriter = new Mock<ODataWriter>(); Mock<ODataEdmTypeSerializer> customSerializer = new Mock<ODataEdmTypeSerializer>(ODataPayloadKind.Entry); customSerializer.Setup(s => s.WriteObjectInline(edmObject.Object, edmType, mockWriter.Object, _writeContext)).Verifiable(); Mock<ODataSerializerProvider> serializerProvider = new Mock<ODataSerializerProvider>(); serializerProvider.Setup(s => s.GetEdmTypeSerializer(edmType)).Returns(customSerializer.Object); ODataFeedSerializer serializer = new ODataFeedSerializer(serializerProvider.Object); // Act serializer.WriteObjectInline(new[] { edmObject.Object }, feedType, mockWriter.Object, _writeContext); // Assert customSerializer.Verify(); }
public void CreateODataFeed_Sets_NextPageLinkForPageResult() { // Arrange ODataFeedSerializer serializer = new ODataFeedSerializer(new DefaultODataSerializerProvider()); Uri expectedNextLink = new Uri("http://nextlink.com"); const long ExpectedCountValue = 1000; var result = new PageResult<Customer>(_customers, expectedNextLink, ExpectedCountValue); // Act ODataFeed feed = serializer.CreateODataFeed(result, _customersType, new ODataSerializerContext()); // Assert Assert.Equal(expectedNextLink, feed.NextPageLink); }
public void WriteObjectInline_Throws_TypeCannotBeSerialized_IfFeedContainsEntityThatCannotBeSerialized() { // Arrange Mock<ODataSerializerProvider> serializerProvider = new Mock<ODataSerializerProvider>(); HttpRequestMessage request = new HttpRequestMessage(); serializerProvider.Setup(s => s.GetODataPayloadSerializer(_model, typeof(int), request)).Returns<ODataSerializer>(null); IEnumerable instance = new object[] { 42 }; ODataFeedSerializer serializer = new ODataFeedSerializer(serializerProvider.Object); // Act Assert.Throws<SerializationException>( () => serializer.WriteObjectInline(instance, _customersType, new Mock<ODataWriter>().Object, _writeContext), "'Default.Customer' cannot be serialized using the ODataMediaTypeFormatter."); }
public void WriteObjectInline_WritesEachEntityInstance() { // Arrange Mock<ODataEdmTypeSerializer> customerSerializer = new Mock<ODataEdmTypeSerializer>(ODataPayloadKind.Entry); 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 ODataFeedSerializer(provider); // Act _serializer.WriteObjectInline(_customers, _customersType, mockWriter.Object, _writeContext); // Assert customerSerializer.Verify(); }
public void WriteObjectInline_Throws_NullElementInCollection_IfFeedContainsNullElement() { // Arrange IEnumerable instance = new object[] { null }; ODataFeedSerializer serializer = new ODataFeedSerializer(new DefaultODataSerializerProvider()); // Act Assert.Throws<SerializationException>( () => serializer.WriteObjectInline(instance, _customersType, new Mock<ODataWriter>().Object, _writeContext), "Collections cannot contain null elements."); }
public void WriteObjectInline_ThrowsSerializationException_IfGraphIsNotEnumerable() { ODataFeedSerializer serializer = new ODataFeedSerializer(new DefaultODataSerializerProvider()); Assert.Throws<SerializationException>( () => serializer.WriteObjectInline(graph: 42, expectedType: _customersType, writer: new Mock<ODataWriter>().Object, writeContext: _writeContext), "ODataFeedSerializer cannot write an object of type 'System.Int32'."); }
public void WriteObjectInline_ThrowsSerializationException_CannotSerializerNull() { ODataFeedSerializer serializer = new ODataFeedSerializer(new DefaultODataSerializerProvider()); Assert.Throws<SerializationException>( () => serializer.WriteObjectInline(graph: null, expectedType: _customersType, writer: new Mock<ODataWriter>().Object, writeContext: _writeContext), "Cannot serialize a null 'feed'."); }
public void WriteObjectInline_ThrowsArgumentNull_WriteContext() { ODataFeedSerializer serializer = new ODataFeedSerializer(new DefaultODataSerializerProvider()); Assert.ThrowsArgumentNull( () => serializer.WriteObjectInline(graph: null, expectedType: null, writer: new Mock<ODataWriter>().Object, writeContext: null), "writeContext"); }
public void CreateODataOperations_CreateOperations(bool followConventions) { // Arrange // Arrange string expectedTarget = "aa://Target"; ODataFeedSerializer serializer = new ODataFeedSerializer(new DefaultODataSerializerProvider()); 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(); FeedContext feedContext = new FeedContext { 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, feedContext, 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); }