public async Task BindAsync_Poco_MergedBindingData() { ParameterInfo parameterInfo = GetType().GetMethod("TestPocoFunctionEx").GetParameters()[0]; HttpTriggerAttributeBindingProvider.HttpTriggerBinding binding = new HttpTriggerAttributeBindingProvider.HttpTriggerBinding(new HttpTriggerAttribute(), parameterInfo, true); JObject requestBody = new JObject { { "Name", "Mathew Charles" }, { "Phone", "(425) 555-6666" } }; var headers = new HeaderDictionary(); headers.Add("Content-Type", "application/json"); HttpRequest request = HttpTestHelpers.CreateHttpRequest("GET", "http://functions/myfunc?code=abc123&Age=25", headers, requestBody.ToString()); var services = new ServiceCollection(); services.AddOptions(); services.AddSingleton(Options.Create(new MvcOptions())); var formatter = new Mock <IInputFormatter>(); formatter.Setup(f => f.ReadAsync(It.IsAny <InputFormatterContext>())) .ReturnsAsync((InputFormatterContext c) => { TextReader reader = c.ReaderFactory(c.HttpContext.Request.Body, Encoding.UTF8); JsonSerializer serializer = new JsonSerializer(); object result = serializer.Deserialize(reader, c.Metadata.ModelType); return(InputFormatterResult.Success(result)); }); services.AddMvcCore(o => o.InputFormatters.Add(formatter.Object)); request.HttpContext.RequestServices = services.BuildServiceProvider(); Dictionary <string, object> routeData = new Dictionary <string, object> { { "Location", "Seattle" } }; request.HttpContext.Items.Add(HttpExtensionConstants.AzureWebJobsHttpRouteDataKey, routeData); FunctionBindingContext functionContext = new FunctionBindingContext(Guid.NewGuid(), CancellationToken.None); ValueBindingContext context = new ValueBindingContext(functionContext, CancellationToken.None); ITriggerData triggerData = await binding.BindAsync(request, context); Assert.Equal(9, triggerData.BindingData.Count); Assert.Equal("Mathew Charles", triggerData.BindingData["Name"]); Assert.Equal("Seattle", triggerData.BindingData["Location"]); Assert.Equal("(425) 555-6666", triggerData.BindingData["Phone"]); Assert.Equal("25", triggerData.BindingData["Age"]); TestPocoEx testPoco = (TestPocoEx)(await triggerData.ValueProvider.GetValueAsync()); Assert.Equal("Mathew Charles", testPoco.Name); Assert.Equal("Seattle", testPoco.Location); Assert.Equal("(425) 555-6666", testPoco.Phone); Assert.Equal(25, testPoco.Age); }
public static void ApplyBindingData_Succeeds() { TestPocoEx poco = new TestPocoEx(); Dictionary <string, string> properties = new Dictionary <string, string> { { "A", "123" }, { "B", "456" }, { "c", "789" } }; Dictionary <string, object> bindingData = new Dictionary <string, object>() { { "name", "Ted" }, { "Location", "Seattle" }, { "Age", "25" }, { "Readonly", "Test" }, { "Properties", properties } }; HttpTriggerAttributeBindingProvider.HttpTriggerBinding.ApplyBindingData(poco, bindingData); Assert.Equal("Ted", poco.Name); Assert.Equal("Seattle", poco.Location); Assert.Equal(25, poco.Age); // verifies string was converted Assert.Null(poco.Readonly); Assert.Equal(3, poco.Properties.Count); foreach (var pair in properties) { Assert.Equal(pair.Value, poco.Properties[pair.Key]); } }
public async Task BindAsync_Poco_MergedBindingData() { ParameterInfo parameterInfo = GetType().GetMethod("TestPocoFunctionEx").GetParameters()[0]; HttpTriggerAttributeBindingProvider.HttpTriggerBinding binding = new HttpTriggerAttributeBindingProvider.HttpTriggerBinding(new HttpTriggerAttribute(), parameterInfo, true); HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "http://functions/myfunc?code=abc123&Age=25"); JObject requestBody = new JObject { { "Name", "Mathew Charles" }, { "Phone", "(425) 555-6666" } }; request.Content = new StringContent(requestBody.ToString()); request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json"); Dictionary <string, object> routeData = new Dictionary <string, object> { { "Location", "Seattle" } }; request.Properties.Add(HttpExtensionConstants.AzureWebJobsHttpRouteDataKey, routeData); FunctionBindingContext functionContext = new FunctionBindingContext(Guid.NewGuid(), CancellationToken.None, new TestTraceWriter(TraceLevel.Verbose)); ValueBindingContext context = new ValueBindingContext(functionContext, CancellationToken.None); ITriggerData triggerData = await binding.BindAsync(request, context); Assert.Equal(8, triggerData.BindingData.Count); Assert.Equal("Mathew Charles", triggerData.BindingData["Name"]); Assert.Equal("Seattle", triggerData.BindingData["Location"]); Assert.Equal("(425) 555-6666", triggerData.BindingData["Phone"]); Assert.Equal("25", triggerData.BindingData["Age"]); TestPocoEx testPoco = (TestPocoEx)(await triggerData.ValueProvider.GetValueAsync()); Assert.Equal("Mathew Charles", testPoco.Name); Assert.Equal("Seattle", testPoco.Location); Assert.Equal("(425) 555-6666", testPoco.Phone); Assert.Equal(25, testPoco.Age); }
public void TestPocoFunctionEx(TestPocoEx poco) { }