Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
        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 });
        }
Example #4
0
        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();
        }
Example #5
0
        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();
        }