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); }
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>(); }
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(); }
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)); }
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"); }
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); }
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"); }
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"); }
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); }
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"); }
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); }
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()); }
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); }
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"); }
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"); }
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")); }
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('/')); }
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); }
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"); }
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); }
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")); }
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(); }
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>(); }
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); }
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(); }
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"); }