public void AddFunctionShouldAddFunctionToFeed() { ODataResourceSet feed = new ODataResourceSet(); Assert.Empty(feed.Functions); feed.AddFunction(new ODataFunction()); Assert.Single(feed.Functions); feed.AddFunction(new ODataFunction()); Assert.Equal(2, feed.Functions.Count()); }
public void AddFunctionShouldAddFunctionToFeed() { ODataResourceSet feed = new ODataResourceSet(); feed.Functions.Count().Should().Be(0); feed.AddFunction(new ODataFunction()); feed.Functions.Count().Should().Be(1); feed.AddFunction(new ODataFunction()); feed.Functions.Count().Should().Be(2); }
/// <summary> /// Create the <see cref="ODataResourceSet"/> to be written for the given resourceSet instance. /// </summary> /// <param name="resourceSetInstance">The instance representing the resourceSet being written.</param> /// <param name="resourceSetType">The EDM type of the resourceSet being written.</param> /// <param name="writeContext">The serializer context.</param> /// <returns>The created <see cref="ODataResourceSet"/> object.</returns> public virtual ODataResourceSet CreateResourceSet(IEnumerable resourceSetInstance, IEdmCollectionTypeReference resourceSetType, ODataSerializerContext writeContext) { ODataResourceSet resourceSet = new ODataResourceSet { TypeName = resourceSetType.FullName() }; IEdmStructuredTypeReference structuredType = GetResourceType(resourceSetType).AsStructured(); if (writeContext.NavigationSource != null && structuredType.IsEntity()) { ResourceSetContext resourceSetContext = new ResourceSetContext { Request = writeContext.Request, Context = writeContext.Context, EntitySetBase = writeContext.NavigationSource as IEdmEntitySetBase, Url = writeContext.Url, ResourceSetInstance = resourceSetInstance }; IEdmEntityType entityType = structuredType.AsEntity().EntityDefinition(); var operations = writeContext.Model.GetAvailableOperationsBoundToCollection(entityType); var odataOperations = CreateODataOperations(operations, resourceSetContext, writeContext); foreach (var odataOperation in odataOperations) { ODataAction action = odataOperation as ODataAction; if (action != null) { resourceSet.AddAction(action); } else { resourceSet.AddFunction((ODataFunction)odataOperation); } } } if (writeContext.ExpandedResource == null) { // If we have more OData format specific information apply it now, only if we are the root feed. PageResult odataResourceSetAnnotations = resourceSetInstance as PageResult; if (odataResourceSetAnnotations != null) { resourceSet.Count = odataResourceSetAnnotations.Count; resourceSet.NextPageLink = odataResourceSetAnnotations.NextPageLink; } else if (writeContext.Request != null) { resourceSet.NextPageLink = writeContext.Context.ODataFeature().NextLink; long?countValue = writeContext.Context.ODataFeature().TotalCount; if (countValue.HasValue) { resourceSet.Count = countValue.Value; } } } else { // nested resourceSet ITruncatedCollection truncatedCollection = resourceSetInstance as ITruncatedCollection; if (truncatedCollection != null && truncatedCollection.IsTruncated) { resourceSet.NextPageLink = GetNestedNextPageLink(writeContext, truncatedCollection.PageSize); } ICountOptionCollection countOptionCollection = resourceSetInstance as ICountOptionCollection; if (countOptionCollection != null && countOptionCollection.TotalCount != null) { resourceSet.Count = countOptionCollection.TotalCount; } } return(resourceSet); }