public ActionMethod Add <T>(Expression <Func <T, object> > method)
        {
            var actionMethod = ActionMethod.From(method);

            _actionMethods.Add(actionMethod);
            return(actionMethod);
        }
        public void Should_prepend_policy_source_plugin()
        {
            var getActionContext = new ActionConfigurationContext(null,
                                                                  null, ActionMethod.From <Handler>(x => x.Get()), null);
            var postActionContext = new ActionConfigurationContext(null,
                                                                   null, ActionMethod.From <Handler>(x => x.Post()), null);
            var overrideActionContext = new ActionConfigurationContext(null,
                                                                       null, ActionMethod.From <Handler>(x => x.Override()), null);
            var configuration = new CorsConfiguration();

            CorsPolicySource.PrependPolicy(configuration.PolicySources, x => x
                                           .PreflightMaxAge(1));
            CorsPolicySource.PrependPolicy(configuration.PolicySources, x => x
                                           .PreflightMaxAge(2)
                                           .AppliesWhen(a => a.ActionMethod.Name == "Get"));

            configuration.PolicySources.Count().ShouldEqual(2);

            var plugin = configuration.PolicySources.First();

            plugin.AppliesTo(getActionContext).ShouldBeTrue();
            plugin.AppliesTo(postActionContext).ShouldBeFalse();
            plugin.AppliesTo(overrideActionContext).ShouldBeFalse();
            plugin.Instance.CreatePolicy().PreflightMaxAge.ShouldEqual(2);

            plugin = configuration.PolicySources.Second();

            plugin.AppliesTo(getActionContext).ShouldBeTrue();
            plugin.AppliesTo(postActionContext).ShouldBeTrue();
            plugin.AppliesTo(overrideActionContext).ShouldBeFalse();
            plugin.Instance.CreatePolicy().PreflightMaxAge.ShouldEqual(1);
        }
示例#3
0
        public void Should_get_route_descriptor_for_action()
        {
            var descriptors = _routeConvention.GetRouteDescriptors(new RouteContext(
                                                                       ActionMethod.From <Handler>(x => x.Post_UrlParam1_Segment_UrlParam2(
                                                                                                       null, null, null, null, null))));

            descriptors.Count.ShouldEqual(1);

            var descriptor = descriptors.First();
            var url        = "Unit/Routing/{urlParam1}/Segment/{urlParam2}";

            descriptor.Id.ShouldEqual($"POST:{url.RemoveParameterNames()}");
            descriptor.Method.ShouldEqual("POST");
            descriptor.Url.ShouldEqual(url);

            descriptor.UrlParameters.Count().ShouldEqual(2);
            descriptor.UrlParameters.ShouldContain(x => x.Name == "urlParam1");
            descriptor.UrlParameters.ShouldContain(x => x.Name == "urlParam2");

            descriptor.Parameters.Count().ShouldEqual(2);
            descriptor.Parameters.ShouldContain(x => x.Name == "param1");
            descriptor.Parameters.ShouldContain(x => x.Name == "param2");

            descriptor.HasRequest.ShouldBeTrue();
            descriptor.RequestParameter.ParameterType.Type.ShouldEqual <Request>();

            descriptor.HasResponse.ShouldBeTrue();
            descriptor.ResponseType.Type.ShouldEqual <Response>();
        }
示例#4
0
        public void Should_add_route_constraints()
        {
            var routeDescriptor = _routeConvention.GetRouteDescriptors(new RouteContext(
                                                                           ActionMethod.From <RouteConstraintHandler>(x => x.Get_Segment_Value(0)))).FirstOrDefault();

            routeDescriptor.Url.ShouldEqual("Unit/Routing/Segment/{value:range(5,10)}");
        }
 public void Should_not_apply_when_no_attributes_applied()
 {
     new CorsAttributePolicySource(new ActionDescriptor(
                                       ActionMethod.From <NoAttributesHandler>(x => x.Get()),
                                       null, null, null, null, null, null, null, new TypeCache()))
     .Applies().ShouldBeFalse();
 }
        public void Should_prepend_attribute_policy_source()
        {
            var getActionContext = new ActionConfigurationContext(null,
                                                                  null, ActionMethod.From <CorsPolicySourceTests.Handler>(x => x.Get()), null);
            var postActionContext = new ActionConfigurationContext(null,
                                                                   null, ActionMethod.From <CorsPolicySourceTests.Handler>(x => x.Post()), null);
            var configuration = new CorsConfiguration();

            new CorsConfigurationDsl(configuration)
            .PrependPolicySource <CorsPolicySource>()
            .PrependAttributePolicySource(x => x.ActionMethod.Name == "Get");

            configuration.PolicySources.Count().ShouldEqual(2);

            var plugin = configuration.PolicySources.First();

            plugin.HasInstance.ShouldBeFalse();
            plugin.Type.ShouldEqual(typeof(CorsAttributePolicySource));
            plugin.AppliesTo(getActionContext).ShouldBeTrue();
            plugin.AppliesTo(postActionContext).ShouldBeFalse();

            plugin = configuration.PolicySources.Second();

            plugin.HasInstance.ShouldBeFalse();
            plugin.Type.ShouldEqual(typeof(CorsPolicySource));
            plugin.AppliesTo.ShouldBeNull();
        }
 public void Should_apply_when_attributes_applied_to_action()
 {
     new CorsAttributePolicySource(new ActionDescriptor(
                                       ActionMethod.From <ActionAttributesHandler>(x => x.Get()),
                                       null, null, null, null, null, null, null, new TypeCache()))
     .Applies().ShouldBeTrue();
 }
示例#8
0
 public void Should_fail_to_get_unsupported_verb()
 {
     _routeConvention.Should().Throw <InvalidOperationException>(
         x => x.GetRouteDescriptors(new RouteContext(ActionMethod
                                                     .From <VerbHandler>(h => h.NotASupportedVerb()))))
     .Message.ShouldContainAll(typeof(VerbHandler).FullName,
                               nameof(VerbHandler.NotASupportedVerb));
 }
示例#9
0
        public void Should_override_no_reader_code_and_text()
        {
            CreateStatus(ActionMethod.From <Handler>(x => x.OverrideCodeAndTextPost()))
            .SetStatus(CreateContext(ResponseState.NoReader));

            _response.StatusCode.ShouldEqual(HttpStatusCode.Created);
            _response.ReasonPhrase.ShouldEqual("no reader");
        }
示例#10
0
        public void Should_override_no_reader_code()
        {
            CreateStatus(ActionMethod.From <Handler>(x => x.OverrideCodePost()))
            .SetStatus(CreateContext(ResponseState.NoReader));

            _response.StatusCode.ShouldEqual(HttpStatusCode.Created);
            _response.ReasonPhrase.ShouldEqual(_configuration.DefaultNoReaderReasonPhrase);
        }
示例#11
0
        public void Should_override_has_response_code_and_text()
        {
            CreateStatus(ActionMethod.From <Handler>(x => x.OverrideCodeAndTextPost()))
            .SetStatus(CreateContext(ResponseState.HasResponse));

            _response.StatusCode.ShouldEqual(HttpStatusCode.Forbidden);
            _response.ReasonPhrase.ShouldEqual("has response");
        }
示例#12
0
        public void Should_override_binding_failure_code()
        {
            CreateStatus(ActionMethod.From <Handler>(x => x.OverrideCodePost()))
            .SetStatus(CreateContext(ResponseState.BindingFailure, "fark"));

            _response.StatusCode.ShouldEqual(HttpStatusCode.Gone);
            _response.ReasonPhrase.ShouldEqual("fark");
        }
示例#13
0
        public void Should_set_default_no_reader_status()
        {
            CreateStatus(ActionMethod.From <Handler>(x => x.Post()))
            .SetStatus(CreateContext(ResponseState.NoReader));

            _response.StatusCode.ShouldEqual(_configuration.DefaultNoReaderStatusCode);
            _response.ReasonPhrase.ShouldEqual(_configuration.DefaultNoReaderReasonPhrase);
        }
示例#14
0
        public void Should_set_default_binding_failure_status()
        {
            CreateStatus(ActionMethod.From <Handler>(x => x.Post()))
            .SetStatus(CreateContext(ResponseState.BindingFailure));

            _response.StatusCode.ShouldEqual(_configuration.DefaultBindingFailureStatusCode);
            _response.ReasonPhrase.ShouldEqual("Bad Request");
        }
示例#15
0
        public void Should_make_param_wild_card(Expression <Action <WildcardHandler> > action, bool wildcard)
        {
            var routeDescriptor = _routeConvention.GetRouteDescriptors(
                new RouteContext(ActionMethod.From(action))).FirstOrDefault();

            routeDescriptor.Url.Split('/').ShouldContain($"{{{(wildcard ? "*" : "")}values}}");
            routeDescriptor.UrlParameters.Any(x => x.IsWildcard && x.Name == "values").ShouldEqual(wildcard);
        }
示例#16
0
        public void Should_get_all_common_http_verbs(Expression <Action <VerbHandler> > action)
        {
            var descriptors = _routeConvention.GetRouteDescriptors(
                new RouteContext(ActionMethod.From(action)));

            descriptors.Count.ShouldEqual(1);
            descriptors.First().Method.ShouldEqual(action.GetMethodInfo()
                                                   .Name.Replace("_Segment", "").ToUpper());
        }
示例#17
0
        private ActionDescriptor AddRoute(List <ActionDescriptor> actions, string route)
        {
            var descriptor = new ActionDescriptor(ActionMethod.From <Handler>(x => x.Get()),
                                                  new RouteDescriptor("GET", route, null, null, null, null),
                                                  null, null, null, null, null, null, new TypeCache());

            actions.Add(descriptor);
            return(descriptor);
        }
示例#18
0
        public void Should_override_no_response_code(
            [Values(null, "fark")] string reasonPhrase)
        {
            _configuration.DefaultNoResponseReasonPhrase = reasonPhrase;
            CreateStatus(ActionMethod.From <Handler>(x => x.OverrideCodePost()))
            .SetStatus(CreateContext(ResponseState.NoResponse));

            _response.StatusCode.ShouldEqual(HttpStatusCode.Created);
            _response.ReasonPhrase.ShouldEqual(reasonPhrase ?? "Created");
        }
示例#19
0
        public void Should_set_default_no_response_status(
            [Values(null, "fark")] string reasonPhrase)
        {
            _configuration.DefaultNoResponseReasonPhrase = reasonPhrase;
            CreateStatus(ActionMethod.From <Handler>(x => x.Post()))
            .SetStatus(CreateContext(ResponseState.NoResponse));

            _response.StatusCode.ShouldEqual(_configuration.DefaultNoResponseStatusCode);
            _response.ReasonPhrase.ShouldEqual(reasonPhrase ?? "No Content");
        }
示例#20
0
        public void Should_fail_to_bind_parameter()
        {
            var action          = ActionMethod.From <PropertyBinderHandler>(x => x.Action(null));
            var parameter       = action.MethodDescriptor.Parameters.First();
            var actionParameter = new ActionParameter(action, parameter);
            var model           = new PropertyBinderHandler.Model();

            actionParameter.Should().Throw <InvalidOperationException>(
                x => x.BindProperty(model, "fark"));
        }
示例#21
0
        public void Should_build_url(Expression <Action <UrlHandler> > action, string url)
        {
            var descriptors = _routeConvention.GetRouteDescriptors(
                new RouteContext(ActionMethod.From(action)));

            descriptors.Count.ShouldEqual(1);
            var descriptor = descriptors.First();

            descriptor.Url.ShouldEqual($"Unit/Routing/{url}".Trim('/'));
        }
示例#22
0
 public void Setup()
 {
     _requestMessage = new HttpRequestMessage(HttpMethod.Post, "http://www.fark.com");
     _requestMessage.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue(MimeTypes.ApplicationAtomXml));
     _actionMethod     = ActionMethod.From <Handler>(x => x.Post());
     _urlTemplate      = "http://www.fark.com/{fark}";
     _actionDescriptor = new ActionDescriptor(_actionMethod,
                                              new RouteDescriptor("POST", _urlTemplate, null, null, null, null),
                                              null, null, null, null, null, null, null);
 }
示例#23
0
        public void Should_get_value_from_argument()
        {
            var action    = ActionMethod.From <ArgumentHandler>(x => x.Action(null, null));
            var parameter = action.MethodDescriptor.Parameters
                            .First(x => x.Name == "value");
            var actionParameter = new ActionParameter(action, parameter);
            var arguments       = new object[] { null, "fark" };

            actionParameter.GetArgument(arguments).ShouldEqual("fark");
        }
示例#24
0
        public void Should_fail_if_multiple_wildcards_specified()
        {
            var action = ActionMethod.From <WildcardHandler>(t => t
                                                             .GetWildcardAttributeMultiple_Values1_Values2(null, null));

            var message = _routeConvention.Should().Throw <InvalidOperationException>(x => x
                                                                                      .GetRouteDescriptors(
                                                                                          new RouteContext(action))).Message;

            message.ShouldContain(action.MethodDescriptor.FriendlyName);
        }
示例#25
0
        public void Should_fail_to_bind_property_to_arguments()
        {
            var action   = ActionMethod.From <ArgumentHandler>(x => x.Action(null, null));
            var property = action.MethodDescriptor.Parameters
                           .First(x => x.Name == "model").ParameterType.Properties.First();
            var actionParameter = new ActionParameter(action, property);
            var arguments       = new object[2];

            actionParameter.Should().Throw <InvalidOperationException>(
                x => x.BindArgument(arguments, "fark"));
        }
示例#26
0
        public void Should_return_null_if_property_argument_is_null()
        {
            var action    = ActionMethod.From <ArgumentHandler>(x => x.Action(null, null));
            var parameter = action.MethodDescriptor.Parameters
                            .First(x => x.Name == "value");
            var property        = parameter.ParameterType.Properties.First();
            var actionParameter = new ActionParameter(action, parameter, property);
            var arguments       = new object[2];

            actionParameter.GetArgument(arguments).ShouldBeNull();
        }
示例#27
0
        public void Should_get_request_parameter_for_methods_that_support_a_request_body(
            Expression <Action <RequestHandler> > action)
        {
            var descriptors = _routeConvention.GetRouteDescriptors(
                new RouteContext(ActionMethod.From(action)));

            descriptors.Count.ShouldEqual(1);
            var descriptor = descriptors.First();

            descriptor.HasRequest.ShouldBeTrue();
            descriptor.RequestParameter.ParameterType.Type.ShouldEqual <Request>();
        }
示例#28
0
        public void Should_exclude_diagnostics_pages_if_configured(
            [Values(true, false)] bool excludeDiagnostics)
        {
            var actionDescriptor = new ActionDescriptorFactory(_configuration, null, new TypeCache())
                                   .CreateDescriptor(ActionMethod.From <GraphiteHandler>(x => x.Post()), null);
            var behavior = new AuthenticationBehavior(_behaviorChain, _requestMessage,
                                                      _responseMessage, _authenticators, _configuration, actionDescriptor);

            _configuration.ExcludeDiagnosticsFromAuthentication = excludeDiagnostics;

            behavior.ShouldRun().ShouldEqual(!excludeDiagnostics);
        }
示例#29
0
        public void Should_not_get_request_parameter_if_not_specified(
            Expression <Action <RequestHandler> > action)
        {
            var descriptors = _routeConvention.GetRouteDescriptors(
                new RouteContext(ActionMethod.From(action)));

            descriptors.Count.ShouldEqual(1);
            var descriptor = descriptors.First();

            descriptor.HasRequest.ShouldBeFalse();
            descriptor.RequestParameter.ShouldBeNull();
        }
示例#30
0
        public void Should_bind_parameter_property()
        {
            var action          = ActionMethod.From <PropertyBinderHandler>(x => x.Action(null));
            var parameter       = action.MethodDescriptor.Parameters.First();
            var property        = parameter.ParameterType.Properties.First();
            var actionParameter = new ActionParameter(action, parameter, property);
            var model           = new PropertyBinderHandler.Model();

            actionParameter.BindProperty(model, "fark");

            model.Value.ShouldEqual("fark");
        }