public async Task Should_not_bind_if_no_mappers_apply() { var requestGraph = RequestGraph .CreateFor <Handler>(h => h.Params(null, null, null)) .WithUrl("http://fark.com/value1/segment/value2") .WithUrlTemplate("{param1}/segment/{param2}"); var binder = new UrlParameterBinder(requestGraph.ValueMappers, requestGraph.Configuration); await binder.Bind(requestGraph.GetRequestBinderContext()); requestGraph.ActionArguments.ShouldOnlyContain(null, null, null); }
public async Task Should_map_null_if_there_are_no_parameters() { var requestGraph = RequestGraph .CreateFor <Handler>(h => h.Params(null, null, null)) .AddUrlParameter("param1") .AddUrlParameter("param2"); var binder = new UrlParameterBinder(requestGraph.ValueMappers, requestGraph.Configuration); await binder.Bind(requestGraph.GetRequestBinderContext()); requestGraph.ActionArguments.ShouldOnlyContain(null, null, null); }
public async Task Should_bind_generic_list_castable_wildcard_parameters( Expression <Action <Handler> > action) { var requestGraph = RequestGraph .CreateFor(action) .WithUrl("http://fark.com/value1/segment/1/2/3") .WithUrlTemplate("{param1}/segment/{*param2}") .AddValueMapper(new SimpleTypeMapper()); var binder = new UrlParameterBinder(requestGraph.ValueMappers, requestGraph.Configuration); await binder.Bind(requestGraph.GetRequestBinderContext()); var arguments = requestGraph.ActionArguments; arguments[0].ShouldBeNull(); arguments[1].ShouldEqual("value1"); arguments[2].As <IEnumerable <int> >().ToArray().ShouldEqual(new [] { 1, 2, 3 }); }
public async Task Should_not_use_a_mapper_that_doesnt_apply_at_runtime() { var requestGraph = RequestGraph .CreateFor <Handler>(h => h.Params(null, null, null)) .WithUrl("http://fark.com/value1/segment/value2") .WithUrlTemplate("{param1}/segment/{param2}") .AddValueMapper1(x => x.Values.First() + "mapper1", instanceAppliesTo: x => false) .AddValueMapper2(x => x.Values.First() + "mapper2"); var binder = new UrlParameterBinder(requestGraph.ValueMappers, requestGraph.Configuration); await binder.Bind(requestGraph.GetRequestBinderContext()); requestGraph.ActionArguments.ShouldOnlyContain(null, "value1mapper2", "value2mapper2"); requestGraph.ValueMapper1.AppliesToCalled.ShouldBeTrue(); requestGraph.ValueMapper1.MapCalled.ShouldBeFalse(); requestGraph.ValueMapper2.AppliesToCalled.ShouldBeTrue(); requestGraph.ValueMapper2.MapCalled.ShouldBeTrue(); }
public async Task Should_bind_url_parameter_values(string urlTemplate, string url, string lastValue) { var requestGraph = RequestGraph .CreateFor <Handler>(h => h.Params(null, null, null)) .WithUrl(url) .WithUrlTemplate(urlTemplate) .AddValueMapper1(x => x.Values.First()); var binder = new UrlParameterBinder(requestGraph.ValueMappers, requestGraph.Configuration); await binder.Bind(requestGraph.GetRequestBinderContext()); requestGraph.ActionArguments.ShouldOnlyContain(null, "value1", lastValue); requestGraph.ValueMapper1.AppliesToContext.RequestContext.ShouldNotBeNull(); requestGraph.ValueMapper1.AppliesToContext.Parameter.ShouldNotBeNull(); requestGraph.ValueMapper1.AppliesToContext.Values.ShouldNotBeNull(); requestGraph.ValueMapper1.MapContext.RequestContext.ShouldNotBeNull(); requestGraph.ValueMapper1.MapContext.Parameter.ShouldNotBeNull(); requestGraph.ValueMapper1.MapContext.Values.ShouldNotBeNull(); }