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); }
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); }
public void TryTranslateFunctionSegmentTemplate_ThrowsArgumentNull_Context() { // Arrange FunctionSegmentTemplate template = new FunctionSegmentTemplate(_edmFunction, null); // Act & Assert ExceptionAssert.ThrowsArgumentNull(() => template.TryTranslate(null), "context"); }
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); }); }
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); } }
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()); }