public void ResolveShouldWorkWithBindingAttributes() { var config = TestObjectFactory.GetHttpConfigurationWithRoutes(); var request = new HttpRequestMessage(HttpMethod.Post, "api/Route/PostMethodWithModelAndAttribute") { Content = new StringContent( "{\"NonRequiredString\": \"AnotherTest\", \"NotValidateInteger\": 2}") }; request.Content.Headers.ContentType = new MediaTypeHeaderValue(MediaType.ApplicationJson); var routeInfo = InternalRouteResolver.Resolve(config, request); Assert.IsTrue(routeInfo.IsResolved); Assert.IsFalse(routeInfo.IsIgnored); Assert.IsFalse(routeInfo.MethodIsNotAllowed); Assert.IsNullOrEmpty(routeInfo.UnresolvedError); Assert.AreEqual(typeof(RouteController), routeInfo.Controller); Assert.AreEqual("PostMethodWithModelAndAttribute", routeInfo.Action); Assert.AreEqual(1, routeInfo.ActionArguments.Count); Assert.IsNotNull(routeInfo.ActionArguments["someModel"]); Assert.IsAssignableFrom <RequestModel>(routeInfo.ActionArguments["someModel"].Value); Assert.AreEqual(0, ((RequestModel)routeInfo.ActionArguments["someModel"].Value).Integer); Assert.IsNullOrEmpty(((RequestModel)routeInfo.ActionArguments["someModel"].Value).RequiredString); Assert.IsNullOrEmpty(((RequestModel)routeInfo.ActionArguments["someModel"].Value).NonRequiredString); Assert.AreEqual(0, ((RequestModel)routeInfo.ActionArguments["someModel"].Value).NotValidateInteger); Assert.IsNull(routeInfo.HttpMessageHandler); Assert.IsFalse(routeInfo.ModelState.IsValid); }
public void ResolveShouldResolveCorrectlyWithJsonContentBodyAndQueryString() { var routeInfo = InternalRouteResolver.Resolve( TestApplication.RouteServices, TestApplication.Router, this.GetRouteContext("/Normal/ActionWithMultipleParameters/5", "POST", body: @"{""Integer"":5,""String"":""Test""}", queryString: "?text=test", contentType: ContentType.ApplicationJson)); Assert.True(routeInfo.IsResolved); Assert.Null(routeInfo.UnresolvedError); Assert.Equal(typeof(NormalController).GetTypeInfo(), routeInfo.ControllerType); Assert.Equal("Normal", routeInfo.ControllerName); Assert.Equal("ActionWithMultipleParameters", routeInfo.Action); Assert.Equal(3, routeInfo.ActionArguments.Count); Assert.Equal(5, routeInfo.ActionArguments["id"].Value); Assert.Equal("test", routeInfo.ActionArguments["text"].Value); Assert.True(routeInfo.ActionArguments.ContainsKey("model")); var model = routeInfo.ActionArguments["model"].Value as RequestModel; Assert.NotNull(model); Assert.Equal(5, model.Integer); Assert.Equal("Test", model.String); Assert.True(routeInfo.ModelState.IsValid); }
public void ResolveShouldResolveCorrectlyWithPartialJsonContentBody() { var routeInfo = InternalRouteResolver.Resolve( TestApplication.RouteServices, TestApplication.Router, this.GetRouteContext("/Normal/ActionWithModel/5", "POST", body: @"{""Integer"":5}", contentType: ContentType.ApplicationJson)); Assert.True(routeInfo.IsResolved); Assert.Null(routeInfo.UnresolvedError); Assert.Equal(typeof(NormalController).GetTypeInfo(), routeInfo.ControllerType); Assert.Equal("Normal", routeInfo.ControllerName); Assert.Equal("ActionWithModel", routeInfo.Action); Assert.Equal(2, routeInfo.ActionArguments.Count); Assert.Equal(5, routeInfo.ActionArguments["id"].Value); Assert.True(routeInfo.ActionArguments.ContainsKey("model")); var model = routeInfo.ActionArguments["model"].Value as RequestModel; Assert.NotNull(model); Assert.Equal(5, model.Integer); Assert.Equal(null, model.String); Assert.False(routeInfo.ModelState.IsValid); }
public void ResolveShouldNotCallTheActualActionCode() { var routeInfo = InternalRouteResolver.Resolve( TestApplication.RouteServices, TestApplication.Router, this.GetRouteContext("/Home/FailingAction")); Assert.True(routeInfo.IsResolved); }
public void ResolveShouldResolveCorrectlyWithMissingQueryString() { var routeInfo = InternalRouteResolver.Resolve( TestApplication.RouteServices, TestApplication.Router, this.GetRouteContext("/Normal/QueryString", "POST")); Assert.True(routeInfo.IsResolved); Assert.Null(routeInfo.UnresolvedError); Assert.Equal(typeof(NormalController).GetTypeInfo(), routeInfo.ControllerType); Assert.Equal("Normal", routeInfo.ControllerName); Assert.Equal("QueryString", routeInfo.Action); Assert.Equal(0, routeInfo.ActionArguments.Count); Assert.True(routeInfo.ModelState.IsValid); }
public void ResolveShouldResolveCorrectlyWithWrongSpecificMethod() { var routeInfo = InternalRouteResolver.Resolve( TestApplication.RouteServices, TestApplication.Router, this.GetRouteContext("/Normal/GetMethod", "POST")); Assert.False(routeInfo.IsResolved); Assert.Equal("action could not be matched", routeInfo.UnresolvedError); Assert.Null(routeInfo.ControllerType); Assert.Null(routeInfo.ControllerName); Assert.Null(routeInfo.Action); Assert.Null(routeInfo.ActionArguments); Assert.Null(routeInfo.ModelState); }
public void ResolveShouldResolveCorrectlyWithNonMatchingParameterOfDifferentType() { var routeInfo = InternalRouteResolver.Resolve( TestApplication.RouteServices, TestApplication.Router, this.GetRouteContext("/Normal/ActionWithParameters/Test")); Assert.True(routeInfo.IsResolved); Assert.Null(routeInfo.UnresolvedError); Assert.Equal(typeof(NormalController).GetTypeInfo(), routeInfo.ControllerType); Assert.Equal("Normal", routeInfo.ControllerName); Assert.Equal("ActionWithParameters", routeInfo.Action); Assert.Equal(0, routeInfo.ActionArguments.Count); Assert.False(routeInfo.ModelState.IsValid); }
public void ResolveShouldResolveCorrectControllerAndActionWithActionNameAttribute() { var routeInfo = InternalRouteResolver.Resolve( TestApplication.RouteServices, TestApplication.Router, this.GetRouteContext("/Normal/AnotherName")); Assert.True(routeInfo.IsResolved); Assert.Null(routeInfo.UnresolvedError); Assert.Equal(typeof(NormalController).GetTypeInfo(), routeInfo.ControllerType); Assert.Equal("Normal", routeInfo.ControllerName); Assert.Equal("AnotherName", routeInfo.Action); Assert.Equal(0, routeInfo.ActionArguments.Count); Assert.True(routeInfo.ModelState.IsValid); }
public void ResolveShouldResolveCorrectlyWithRouteAttribute() { var routeInfo = InternalRouteResolver.Resolve( TestApplication.RouteServices, TestApplication.Router, this.GetRouteContext("/AttributeController/AttributeAction")); Assert.True(routeInfo.IsResolved); Assert.Null(routeInfo.UnresolvedError); Assert.Equal(typeof(RouteController).GetTypeInfo(), routeInfo.ControllerType); Assert.Equal("Route", routeInfo.ControllerName); Assert.Equal("Index", routeInfo.Action); Assert.Equal(0, routeInfo.ActionArguments.Count); Assert.True(routeInfo.ModelState.IsValid); }
public void ResolveShouldResolveCorrectlyWithRoutePrefixAndRouteAttribute() { var config = TestObjectFactory.GetHttpConfigurationWithRoutes(); var request = new HttpRequestMessage(HttpMethod.Post, "api/Routes/Test"); var routeInfo = InternalRouteResolver.Resolve(config, request); Assert.IsTrue(routeInfo.IsResolved); Assert.IsFalse(routeInfo.IsIgnored); Assert.IsFalse(routeInfo.MethodIsNotAllowed); Assert.IsNullOrEmpty(routeInfo.UnresolvedError); Assert.AreEqual(typeof(RouteController), routeInfo.Controller); Assert.AreEqual("WithRouteAttribute", routeInfo.Action); Assert.AreEqual(0, routeInfo.ActionArguments.Count); Assert.IsNull(routeInfo.HttpMessageHandler); Assert.IsTrue(routeInfo.ModelState.IsValid); }
public void ResolveShouldIgnoreRoutesWithStopRountingHandler() { var config = TestObjectFactory.GetHttpConfigurationWithRoutes(); var request = new HttpRequestMessage(HttpMethod.Get, "api/IgnoredRoute"); var routeInfo = InternalRouteResolver.Resolve(config, request); Assert.IsTrue(routeInfo.IsResolved); Assert.IsTrue(routeInfo.IsIgnored); Assert.IsFalse(routeInfo.MethodIsNotAllowed); Assert.IsNullOrEmpty(routeInfo.UnresolvedError); Assert.AreEqual(typeof(RouteController), routeInfo.Controller); Assert.AreEqual("GetMethod", routeInfo.Action); Assert.AreEqual(0, routeInfo.ActionArguments.Count); Assert.IsAssignableFrom <StopRoutingHandler>(routeInfo.HttpMessageHandler); Assert.IsTrue(routeInfo.ModelState.IsValid); }
public void ResolveShouldReturnProperErrorWhenTwoActionsAreMatched() { var config = TestObjectFactory.GetHttpConfigurationWithRoutes(); var request = new HttpRequestMessage(HttpMethod.Post, "api/Route/SameAction"); var routeInfo = InternalRouteResolver.Resolve(config, request); Assert.IsFalse(routeInfo.IsResolved); Assert.IsFalse(routeInfo.IsIgnored); Assert.IsFalse(routeInfo.MethodIsNotAllowed); Assert.AreEqual("it could not be resolved: 'Multiple actions were found that match the request'", routeInfo.UnresolvedError); Assert.IsNull(routeInfo.Controller); Assert.IsNull(routeInfo.Action); Assert.IsNull(routeInfo.ActionArguments); Assert.IsNull(routeInfo.HttpMessageHandler); Assert.IsNull(routeInfo.ModelState); }
public void ResolveShouldResolveCorrectControllerAndAction() { var config = TestObjectFactory.GetHttpConfigurationWithRoutes(); var request = new HttpRequestMessage(HttpMethod.Post, "api/NoParameterlessConstructor/OkAction"); var routeInfo = InternalRouteResolver.Resolve(config, request); Assert.IsTrue(routeInfo.IsResolved); Assert.IsFalse(routeInfo.IsIgnored); Assert.IsFalse(routeInfo.MethodIsNotAllowed); Assert.IsNullOrEmpty(routeInfo.UnresolvedError); Assert.AreEqual(typeof(NoParameterlessConstructorController), routeInfo.Controller); Assert.AreEqual("OkAction", routeInfo.Action); Assert.AreEqual(0, routeInfo.ActionArguments.Count); Assert.IsNull(routeInfo.HttpMessageHandler); Assert.IsTrue(routeInfo.ModelState.IsValid); }
public void ResolveShouldNotResolveCorrectlyWithMissingQueryString() { var config = TestObjectFactory.GetHttpConfigurationWithRoutes(); var request = new HttpRequestMessage(HttpMethod.Post, "api/Route/QueryString"); var routeInfo = InternalRouteResolver.Resolve(config, request); Assert.IsFalse(routeInfo.IsResolved); Assert.IsFalse(routeInfo.IsIgnored); Assert.IsFalse(routeInfo.MethodIsNotAllowed); Assert.AreEqual("it could not be resolved: 'Not Found'", routeInfo.UnresolvedError); Assert.IsNull(routeInfo.Controller); Assert.IsNull(routeInfo.Action); Assert.IsNull(routeInfo.ActionArguments); Assert.IsNull(routeInfo.HttpMessageHandler); Assert.IsNull(routeInfo.ModelState); }
public void ResolveShouldReturnProperErrorWhenTwoActionsAreMatched() { var routeInfo = InternalRouteResolver.Resolve( TestApplication.RouteServices, TestApplication.Router, this.GetRouteContext("/Normal/ActionWithOverloads")); Assert.False(routeInfo.IsResolved); Assert.Equal( "exception was thrown when trying to select an action: 'Multiple actions matched. The following actions matched route data and had all constraints satisfied:\r\n\r\nMyTested.AspNetCore.Mvc.Test.Setups.Routes.NormalController.ActionWithOverloads (MyTested.AspNetCore.Mvc.Test)\r\nMyTested.AspNetCore.Mvc.Test.Setups.Routes.NormalController.ActionWithOverloads (MyTested.AspNetCore.Mvc.Test)'", routeInfo.UnresolvedError); Assert.Null(routeInfo.ControllerType); Assert.Null(routeInfo.ControllerName); Assert.Null(routeInfo.Action); Assert.Null(routeInfo.ActionArguments); Assert.Null(routeInfo.ModelState); }
public void ResolveShouldResolveCorrectlyWithParameterAndQueryString() { var config = TestObjectFactory.GetHttpConfigurationWithRoutes(); var request = new HttpRequestMessage(HttpMethod.Post, "api/Route/WithParameterAndQueryString/5?value=test"); var routeInfo = InternalRouteResolver.Resolve(config, request); Assert.IsTrue(routeInfo.IsResolved); Assert.IsFalse(routeInfo.IsIgnored); Assert.IsFalse(routeInfo.MethodIsNotAllowed); Assert.IsNullOrEmpty(routeInfo.UnresolvedError); Assert.AreEqual(typeof(RouteController), routeInfo.Controller); Assert.AreEqual("WithParameterAndQueryString", routeInfo.Action); Assert.AreEqual(5, routeInfo.ActionArguments["id"].Value); Assert.AreEqual("test", routeInfo.ActionArguments["value"].Value); Assert.IsNull(routeInfo.HttpMessageHandler); Assert.IsTrue(routeInfo.ModelState.IsValid); }
public void ResolveShouldResolveCorrectlyWithParameterAndQueryString() { var routeInfo = InternalRouteResolver.Resolve( TestApplication.RouteServices, TestApplication.Router, this.GetRouteContext("/Normal/ActionWithMultipleParameters/5", queryString: "?text=test", contentType: ContentType.ApplicationJson)); Assert.True(routeInfo.IsResolved); Assert.Null(routeInfo.UnresolvedError); Assert.Equal(typeof(NormalController).GetTypeInfo(), routeInfo.ControllerType); Assert.Equal("Normal", routeInfo.ControllerName); Assert.Equal("ActionWithMultipleParameters", routeInfo.Action); Assert.Equal(3, routeInfo.ActionArguments.Count); Assert.Equal(5, routeInfo.ActionArguments["id"].Value); Assert.Equal("test", routeInfo.ActionArguments["text"].Value); Assert.True(routeInfo.ActionArguments.ContainsKey("model")); Assert.True(routeInfo.ModelState.IsValid); }
public ResolvedRouteContext GetActualRouteInfo() { return(this.actualRouteInfo ?? (this.actualRouteInfo = InternalRouteResolver.Resolve(this.Services, this.Router, this.RouteContext))); }
private ResolvedRouteInfo GetActualRouteInfo() { return(this.actualRouteInfo ?? (this.actualRouteInfo = InternalRouteResolver.Resolve(this.HttpConfiguration, this.requestMessage))); }