Exemple #1
0
        internal static Uri GenerateFunctionLink(this ResourceSetContext feedContext, string bindingParameterType,
                                                 string functionName, IEnumerable <string> parameterNames)
        {
            Contract.Assert(feedContext != null);

            if (feedContext.EntitySetBase is IEdmContainedEntitySet)
            {
                return(null);
            }

            if (feedContext.EdmModel == null)
            {
                return(null);
            }

            IEdmModel model = feedContext.EdmModel;

            string elementType = DeserializationHelpers.GetCollectionElementTypeName(bindingParameterType,
                                                                                     isNested: false);

            Contract.Assert(elementType != null);

            IEdmTypeReference typeReference = model.FindDeclaredType(elementType).ToEdmTypeReference(true);
            IEdmTypeReference collection    = new EdmCollectionTypeReference(new EdmCollectionType(typeReference));
            IEdmOperation     operation     = model.FindDeclaredOperations(functionName).First();

            return(feedContext.GenerateFunctionLink(collection, operation, parameterNames));
        }
        public void GenerateFunctionLinkForFeed_ThrowsArgumentNull_Function()
        {
            // Arrange
            ResourceSetContext feedContext = new ResourceSetContext();

            // Act & Assert
            ExceptionAssert.ThrowsArgumentNull(() => feedContext.GenerateFunctionLink(function: null), "function");
        }
        public void GenerateFunctionLinkForFeed_ThrowsArgumentNull_ResourceSetContext()
        {
            // Arrange
            ResourceSetContext resourceSetContext = null;
            IEdmFunction       function           = new Mock <IEdmFunction>().Object;

            // Act & Assert
            ExceptionAssert.ThrowsArgumentNull(() => resourceSetContext.GenerateFunctionLink(function), "resourceSetContext");
        }
        public void GenerateFunctionLinkForFeed_ThrowsFunctionNotBoundToCollectionOfEntity_IfFunctionHasNoParameters()
        {
            // Arrange
            ResourceSetContext  context  = new ResourceSetContext();
            Mock <IEdmFunction> function = new Mock <IEdmFunction>();

            function.Setup(a => a.Parameters).Returns(Enumerable.Empty <IEdmOperationParameter>());
            function.Setup(a => a.Name).Returns("SomeFunction");

            // Act & Assert
            ExceptionAssert.ThrowsArgument(
                () => context.GenerateFunctionLink(function.Object),
                "function",
                "The function 'SomeFunction' is not bound to the collection of entity. Only functions that are bound to entities can have function links.");
        }
Exemple #5
0
        public void GenerateFunctionLinkForFeed_GeneratesLinkWithoutCast_IfEntitySetTypeMatchesActionEntityType()
        {
            // Arrange
            var          request  = RequestFactory.Create(_model);
            IEdmFunction function = _model.SchemaElements.OfType <IEdmFunction>().First(a => a.Name == "IsAllUpgraded");

            Assert.NotNull(function); // Guard
            ResourceSetContext context = new ResourceSetContext {
                EntitySetBase = _customers, Request = request
            };

            // Act
            Uri link = context.GenerateFunctionLink(function);

            Assert.Equal("http://localhost/Customers/NS.IsAllUpgraded(param=@param)", link.AbsoluteUri);
        }
Exemple #6
0
        public void GenerateFunctionLinkForFeed_GeneratesLinkWithDownCast_IfElementTypeDerivesFromBindingParameterType()
        {
            // Arrange
            var          request  = RequestFactory.Create(_model);
            IEdmFunction function = _model.SchemaElements.OfType <IEdmFunction>().First(a => a.Name == "IsAllUpgraded");

            Assert.NotNull(function); // Guard
            IEdmEntitySet specialCustomers = new EdmEntitySet(_model.EntityContainer, "SpecialCustomers", _specialCustomer);

            ResourceSetContext context = new ResourceSetContext {
                EntitySetBase = specialCustomers, Request = request
            };

            // Act
            Uri link = context.GenerateFunctionLink(function);

            // Assert
            Assert.Equal("http://localhost/SpecialCustomers/NS.Customer/NS.IsAllUpgraded(param=@param)", link.AbsoluteUri);
        }
        public void GenerateFunctionLinkForFeed_GeneratesLinkWithCast_IfEntitySetTypeDoesnotMatchActionEntityType()
        {
            // Arrange
            HttpRequestMessage request  = GetODataRequest(_model.Model);
            IEdmFunction       function = _model.Model.SchemaElements.OfType <IEdmFunction>().First(a => a.Name == "IsSpecialAllUpgraded");

            Assert.NotNull(function); // Guard
            var context = new ResourceSetContext
            {
                Request       = request,
                EntitySetBase = _model.Customers,
                Url           = request.GetUrlHelper(),
            };

            // Act
            Uri link = context.GenerateFunctionLink(function);

            // Assert
            Assert.Equal("http://localhost/Customers/NS.SpecialCustomer/NS.IsSpecialAllUpgraded(param=@param)", link.AbsoluteUri);
        }
        public void GenerateFunctionLinkForFeed_GeneratesLinkWithDownCast_IfElementTypeDerivesFromBindingParameterType()
        {
            // Arrange
            HttpRequestMessage request  = GetODataRequest(_model.Model);
            IEdmFunction       function = _model.Model.SchemaElements.OfType <IEdmFunction>().First(a => a.Name == "IsAllUpgraded");

            Assert.NotNull(function); // Guard
            IEdmEntitySet specialCustomers = new EdmEntitySet(_model.Container, "SpecialCustomers", _model.SpecialCustomer);

            var context = new ResourceSetContext
            {
                Request       = request,
                EntitySetBase = specialCustomers,
                Url           = request.GetUrlHelper(),
            };

            // Act
            Uri link = context.GenerateFunctionLink(function);

            // Assert
            Assert.Equal("http://localhost/SpecialCustomers/NS.Customer/NS.IsAllUpgraded(param=@param)", link.AbsoluteUri);
        }