예제 #1
0
        public void CreateResourceSet_Ignores_CountValue_ForInnerResourceSets()
        {
            // Arrange
            ODataResourceSetSerializer serializer = new ODataResourceSetSerializer(_serializerProvider);
            var request = RequestFactory.Create();

            request.ODataContext().TotalCount = 42;
            var result = new object[0];
            IEdmNavigationProperty navProp            = _customerSet.EntityType().NavigationProperties().First();
            SelectExpandClause     selectExpandClause = new SelectExpandClause(new SelectItem[0], allSelected: true);
            ResourceContext        entity             = new ResourceContext
            {
                SerializerContext =
                    new ODataSerializerContext {
                    Request = request, NavigationSource = _customerSet, Model = _model
                }
            };
            ODataSerializerContext nestedContext = new ODataSerializerContext(entity, selectExpandClause, navProp);

            // Act
            ODataResourceSet resourceSet = serializer.CreateResourceSet(result, _customersType, nestedContext);

            // Assert
            Assert.Null(resourceSet.Count);
        }
예제 #2
0
        public void CreateResourceSet_SetsODataOperations()
        {
            // Arrange
            var config  = RoutingConfigurationFactory.CreateWithRootContainer("OData");
            var request = RequestFactory.Create(config, "OData");
            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          = request,
                Model            = model.Model,
                MetadataLevel    = ODataMetadataLevel.FullMetadata,
                Url = CreateMetadataLinkFactory("http://IgnoreMetadataPath", request)
            };

            var result = new object[0];

            // Act
            ODataResourceSet resourceSet = serializer.CreateResourceSet(result, customersType, context);

            // Assert
            Assert.Single(resourceSet.Actions);
            Assert.Equal(3, resourceSet.Functions.Count());
        }
예제 #3
0
        public void CreateResourceSet_SetsNextPageLink_WhenWritingTruncatedCollection_ForExpandedProperties()
        {
            // Arrange
            CustomersModelWithInheritance model              = new CustomersModelWithInheritance();
            IEdmCollectionTypeReference   customersType      = new EdmCollectionTypeReference(new EdmCollectionType(model.Customer.AsReference()));
            ODataResourceSetSerializer    serializer         = new ODataResourceSetSerializer(_serializerProvider);
            SelectExpandClause            selectExpandClause = new SelectExpandClause(new SelectItem[0], allSelected: true);
            IEdmNavigationProperty        ordersProperty     = model.Customer.NavigationProperties().First();
            ResourceContext entity = new ResourceContext
            {
                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
            ODataResourceSet resourceSet = serializer.CreateResourceSet(orders, _customersType, nestedContext);

            // Assert
            Assert.Equal("http://navigation-link/?$skip=1", resourceSet.NextPageLink.AbsoluteUri);
        }
        public void CreateResourceSet_SetsODataOperations()
        {
            // Arrange
            IEdmModel model = GetEdmModelWithOperations(out IEdmEntityType customerType, out IEdmEntitySet customers);
            IEdmCollectionTypeReference customersType = new EdmCollectionTypeReference(new EdmCollectionType(customerType.AsReference()));

            Mock <ODataSerializerProvider> serializerProvider = new Mock <ODataSerializerProvider>();
            ODataResourceSetSerializer     serializer         = new ODataResourceSetSerializer(serializerProvider.Object);
            var request = RequestFactory.Create(method: "get", uri: "http://IgnoreMetadataPath", opt => opt.AddModel(model));

            ODataSerializerContext context = new ODataSerializerContext
            {
                NavigationSource = customers,
                Request          = request,
                Model            = model,
                MetadataLevel    = ODataMetadataLevel.Full,
            };
            var result = new object[0];

            // Act
            ODataResourceSet resourceSet = serializer.CreateResourceSet(result, customersType, context);

            // Assert
            Assert.Single(resourceSet.Actions);
            Assert.Equal(3, resourceSet.Functions.Count());
        }
        public void CreateResource_Ignores_NextPageLink_ForInnerResourceSets()
        {
            // Arrange
            Mock <ODataSerializerProvider> serializerProvider = new Mock <ODataSerializerProvider>();
            ODataResourceSetSerializer     serializer         = new ODataResourceSetSerializer(serializerProvider.Object);
            Uri nextLink = new Uri("http://somelink");
            var request  = RequestFactory.Create();

            request.ODataFeature().NextLink = nextLink;
            var result = new object[0];
            IEdmNavigationProperty navProp            = _customerSet.EntityType().NavigationProperties().First();
            SelectExpandClause     selectExpandClause = new SelectExpandClause(new SelectItem[0], allSelected: true);
            ResourceContext        entity             = new ResourceContext
            {
                SerializerContext =
                    new ODataSerializerContext {
                    Request = request, NavigationSource = _customerSet, Model = _model
                }
            };
            ODataSerializerContext nestedContext = new ODataSerializerContext(entity, selectExpandClause, navProp);

            // Act
            ODataResourceSet resourceSet = serializer.CreateResourceSet(result, _customersType, nestedContext);

            // Assert
            Assert.Null(resourceSet.NextPageLink);
        }
예제 #6
0
        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);
        }
예제 #7
0
        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);
        }
예제 #8
0
        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);
        }
예제 #9
0
        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);
        }
예제 #10
0
        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);
        }