コード例 #1
0
        public void TryTranslateFunctionSegmentTemplate_ReturnsFalse_WithOptionalParameterMisMatch()
        {
            // Arrange
            EdmModel model = new EdmModel();

            _edmFunction.AddOptionalParameter("min", IntType);
            _edmFunction.AddOptionalParameter("max", IntType);
            model.AddElement(_edmFunction);

            IDictionary <string, string> parameters = new Dictionary <string, string>
            {
                { "name", "{name}" },
                { "title", "{title}" },
                { "min", "{min}" },
            };
            FunctionSegmentTemplate template = new FunctionSegmentTemplate(parameters, _edmFunction, null);

            RouteValueDictionary          routeValues = new RouteValueDictionary(new { name = "'pt'", title = "'abc'", min = "42,max=5" });
            ODataTemplateTranslateContext context     = new ODataTemplateTranslateContext
            {
                RouteValues = routeValues,
                Model       = model
            };

            // Act
            bool ok = template.TryTranslate(context);

            // Assert
            Assert.False(ok);
            Assert.Empty(context.Segments);
        }
コード例 #2
0
        public void TryTranslateFunctionImportSegmentTemplate_ReturnsTemplates_ForEmptyParameter()
        {
            // Arrange
            EdmModel    edmModel = new EdmModel();
            EdmFunction function = new EdmFunction("NS", "MyFunction", IntType, true, null, false);

            function.AddParameter("bindingParameter", IntType);
            edmModel.AddElement(function);

            FunctionSegmentTemplate       template = new FunctionSegmentTemplate(function, null);
            ODataTemplateTranslateContext context  = new ODataTemplateTranslateContext
            {
                RouteValues = new RouteValueDictionary(),
                Model       = edmModel
            };

            // Act
            bool ok = template.TryTranslate(context);

            // Assert
            Assert.True(ok);
            ODataPathSegment actual          = Assert.Single(context.Segments);
            OperationSegment functionSegment = Assert.IsType <OperationSegment>(actual);

            Assert.Same(function, functionSegment.Operations.First());
            Assert.Empty(functionSegment.Parameters);
        }
コード例 #3
0
        public void TryTranslateFunctionSegmentTemplate_ThrowsArgumentNull_Context()
        {
            // Arrange
            FunctionSegmentTemplate template = new FunctionSegmentTemplate(_edmFunction, null);

            // Act & Assert
            ExceptionAssert.ThrowsArgumentNull(() => template.TryTranslate(null), "context");
        }
コード例 #4
0
        public void TryTranslateFunctionSegmentTemplate_ReturnsODataFunctionSegment_WithOptionalParameters()
        {
            // Arrange
            EdmModel model = new EdmModel();

            _edmFunction.AddOptionalParameter("min", IntType);
            _edmFunction.AddOptionalParameter("max", IntType);
            model.AddElement(_edmFunction);

            IDictionary <string, string> parameters = new Dictionary <string, string>
            {
                { "name", "{nameTemp}" },
                { "title", "{titleTemp}" },
                { "min", "{minTemp}" },
            };
            FunctionSegmentTemplate template = new FunctionSegmentTemplate(parameters, _edmFunction, null);

            RouteValueDictionary          routeValues = new RouteValueDictionary(new { nameTemp = "'pt'", titleTemp = "'abc'", minTemp = "42" });
            ODataTemplateTranslateContext context     = new ODataTemplateTranslateContext
            {
                RouteValues = routeValues,
                Model       = model
            };

            // Act
            bool ok = template.TryTranslate(context);

            // Assert
            Assert.True(ok);

            ODataPathSegment actual          = Assert.Single(context.Segments);
            OperationSegment functionSegment = Assert.IsType <OperationSegment>(actual);

            Assert.Same(_edmFunction, functionSegment.Operations.First());
            Assert.Equal(3, functionSegment.Parameters.Count());
            Assert.Collection(functionSegment.Parameters,
                              e =>
            {
                Assert.Equal("name", e.Name);
                Assert.Equal("pt", e.Value);
            },
                              e =>
            {
                Assert.Equal("title", e.Name);
                Assert.Equal("abc", e.Value);
            },
                              e =>
            {
                Assert.Equal("min", e.Name);
                Assert.Equal(42, e.Value);
            });
        }
コード例 #5
0
        public void TryTranslateFunctionSegmentTemplate_ReturnsODataFunctionSegment(bool hasRouteData)
        {
            // Arrange
            var         primitive = EdmCoreModel.Instance.GetPrimitive(EdmPrimitiveTypeKind.Int32, false);
            EdmFunction function  = new EdmFunction("NS", "MyFunction", primitive, true, null, false);

            function.AddParameter("bindingParameter", primitive);
            function.AddParameter("age", primitive);
            function.AddParameter("price", primitive);

            FunctionSegmentTemplate template = new FunctionSegmentTemplate(function, null);
            EdmModel edmModel = new EdmModel();

            edmModel.AddElement(function);

            RouteValueDictionary routeValue;

            if (hasRouteData)
            {
                routeValue = new RouteValueDictionary(new { age = "34", price = "9" });
            }
            else
            {
                routeValue = new RouteValueDictionary(); // Empty
            }

            ODataTemplateTranslateContext context = new ODataTemplateTranslateContext
            {
                RouteValues = routeValue,
                Model       = edmModel
            };

            // Act
            bool ok = template.TryTranslate(context);

            // Assert
            if (hasRouteData)
            {
                Assert.True(ok);
                ODataPathSegment actual          = Assert.Single(context.Segments);
                OperationSegment functionSegment = Assert.IsType <OperationSegment>(actual);
                Assert.Same(function, functionSegment.Operations.First());
                Assert.Equal(2, functionSegment.Parameters.Count());
                Assert.Equal(new[] { "age", "price" }, functionSegment.Parameters.Select(p => p.Name));
            }
            else
            {
                Assert.False(ok);
                Assert.Empty(context.Segments);
            }
        }
コード例 #6
0
        public void TryTranslateFunctionSegmentTemplate_ReturnsODataFunctionSegment_UsingEscapedString()
        {
            // Arrange
            var         primitive = EdmCoreModel.Instance.GetPrimitive(EdmPrimitiveTypeKind.String, false);
            EdmFunction function  = new EdmFunction("NS", "MyFunction", primitive, true, null, false);

            function.AddParameter("bindingParameter", primitive);
            function.AddParameter("name", primitive);

            FunctionSegmentTemplate template = new FunctionSegmentTemplate(function, null);
            EdmModel edmModel = new EdmModel();

            edmModel.AddElement(function);

            RouteValueDictionary routeValue = new RouteValueDictionary(new { name = "'Ji%2FChange%23%20T'" });

            ODataTemplateTranslateContext context = new ODataTemplateTranslateContext
            {
                RouteValues = routeValue,
                Model       = edmModel
            };

            // Act
            bool ok = template.TryTranslate(context);

            // Assert
            Assert.True(ok);
            ODataPathSegment actual          = Assert.Single(context.Segments);
            OperationSegment functionSegment = Assert.IsType <OperationSegment>(actual);

            Assert.Same(function, functionSegment.Operations.First());
            var parameter = Assert.Single(functionSegment.Parameters);

            Assert.Equal("name", parameter.Name);
            Assert.Equal("Ji/Change# T", parameter.Value.ToString());
        }