public void Invalid_Action_In_Route() { // Arrange ApiController api = new UsersController(); HttpRouteData route = new HttpRouteData(new HttpRoute()); string actionName = "invalidOp"; route.Values.Add("action", actionName); HttpControllerContext controllerContext = ContextUtil.CreateControllerContext(instance: api, routeData: route, request: new HttpRequestMessage() { Method = HttpMethod.Get }); Type controllerType = typeof(UsersController); controllerContext.ControllerDescriptor = new HttpControllerDescriptor(controllerContext.Configuration, controllerType.Name, controllerType); controllerContext.Configuration.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always; // Act & Assert var exception = Assert.Throws <HttpResponseException>(() => { HttpResponseMessage message = api.ExecuteAsync(controllerContext, CancellationToken.None).Result; }); Assert.Equal(HttpStatusCode.NotFound, exception.Response.StatusCode); var content = Assert.IsType <ObjectContent <HttpError> >(exception.Response.Content); Assert.Equal("No action was found on the controller 'UsersController' that matches the name 'invalidOp'.", ((HttpError)content.Value)["MessageDetail"]); }
public void Setting_CustomActionInvoker() { // Arrange ApiController api = new UsersController(); string responseText = "Hello World"; HttpControllerContext controllerContext = ContextUtil.CreateControllerContext(); HttpControllerDescriptor controllerDescriptor = new HttpControllerDescriptor(controllerContext.Configuration, "test", typeof(UsersController)); controllerContext.ControllerDescriptor = controllerDescriptor; Mock <IHttpActionInvoker> mockInvoker = new Mock <IHttpActionInvoker>(); mockInvoker .Setup(invoker => invoker.InvokeActionAsync(It.IsAny <HttpActionContext>(), It.IsAny <CancellationToken>())) .Returns(() => { TaskCompletionSource <HttpResponseMessage> tcs = new TaskCompletionSource <HttpResponseMessage>(); tcs.TrySetResult(new HttpResponseMessage() { Content = new StringContent(responseText) }); return(tcs.Task); }); controllerDescriptor.Configuration.Services.Replace(typeof(IHttpActionInvoker), mockInvoker.Object); // Act HttpResponseMessage message = api.ExecuteAsync( controllerContext, CancellationToken.None).Result; // Assert Assert.Equal(responseText, message.Content.ReadAsStringAsync().Result); }
public void Setting_CustomActionInvoker() { // Arrange ApiController api = new UsersController(); string responseText = "Hello World"; HttpControllerContext controllerContext = ContextUtil.CreateControllerContext(); HttpControllerDescriptor controllerDescriptor = new HttpControllerDescriptor(controllerContext.Configuration, "test", typeof(UsersController)); controllerContext.ControllerDescriptor = controllerDescriptor; Mock<IHttpActionInvoker> mockInvoker = new Mock<IHttpActionInvoker>(); mockInvoker .Setup(invoker => invoker.InvokeActionAsync(It.IsAny<HttpActionContext>(), It.IsAny<CancellationToken>())) .Returns(() => { TaskCompletionSource<HttpResponseMessage> tcs = new TaskCompletionSource<HttpResponseMessage>(); tcs.TrySetResult(new HttpResponseMessage() { Content = new StringContent(responseText) }); return tcs.Task; }); controllerDescriptor.Configuration.Services.Replace(typeof(IHttpActionInvoker), mockInvoker.Object); // Act HttpResponseMessage message = api.ExecuteAsync( controllerContext, CancellationToken.None).Result; // Assert Assert.Equal(responseText, message.Content.ReadAsStringAsync().Result); }
public void Default_Delete() { // Arrange ApiController api = new UsersController(); HttpControllerContext controllerContext = ContextUtil.CreateControllerContext(instance: api, request: new HttpRequestMessage() { Method = HttpMethod.Delete }); controllerContext.ControllerDescriptor = new HttpControllerDescriptor(controllerContext.Configuration, "test", typeof(UsersController)); // Act HttpResponseMessage message = api.ExecuteAsync( controllerContext, CancellationToken.None).Result; // Assert Assert.Equal("User Deleted", message.Content.ReadAsStringAsync().Result); }
public void Setting_CustomActionSelector() { // Arrange ApiController api = new UsersController(); HttpControllerContext controllerContext = ContextUtil.CreateControllerContext(); HttpControllerDescriptor controllerDescriptor = new HttpControllerDescriptor(controllerContext.Configuration, "test", typeof(UsersController)); controllerContext.ControllerDescriptor = controllerDescriptor; Mock <IHttpActionSelector> mockSelector = new Mock <IHttpActionSelector>(); mockSelector .Setup(invoker => invoker.SelectAction(It.IsAny <HttpControllerContext>())) .Returns(() => { Func <HttpResponseMessage> testDelegate = () => new HttpResponseMessage { Content = new StringContent("This is a test") }; return(new ReflectedHttpActionDescriptor { Configuration = controllerContext.Configuration, ControllerDescriptor = controllerDescriptor, MethodInfo = testDelegate.Method }); }); controllerDescriptor.Configuration.Services.Replace(typeof(IHttpActionSelector), mockSelector.Object); // Act HttpResponseMessage message = api.ExecuteAsync( controllerContext, CancellationToken.None).Result; // Assert Assert.Equal("This is a test", message.Content.ReadAsStringAsync().Result); }
public void Default_Get() { // Arrange ApiController api = new UsersController(); HttpControllerContext controllerContext = ContextUtil.CreateControllerContext(instance: api, request: new HttpRequestMessage() { Method = HttpMethod.Get }); controllerContext.ControllerDescriptor = new HttpControllerDescriptor(controllerContext.Configuration, "test", typeof(UsersController)); // Act HttpResponseMessage message = api.ExecuteAsync( controllerContext, CancellationToken.None).Result; // Assert Assert.Equal("Default User", message.Content.ReadAsStringAsync().Result); }
public void Setting_CustomActionSelector() { // Arrange ApiController api = new UsersController(); HttpControllerContext controllerContext = ContextUtil.CreateControllerContext(); HttpControllerDescriptor controllerDescriptor = new HttpControllerDescriptor(controllerContext.Configuration, "test", typeof(UsersController)); controllerContext.ControllerDescriptor = controllerDescriptor; Mock<IHttpActionSelector> mockSelector = new Mock<IHttpActionSelector>(); mockSelector .Setup(invoker => invoker.SelectAction(It.IsAny<HttpControllerContext>())) .Returns(() => { Func<HttpResponseMessage> testDelegate = () => new HttpResponseMessage { Content = new StringContent("This is a test") }; return new ReflectedHttpActionDescriptor { Configuration = controllerContext.Configuration, ControllerDescriptor = controllerDescriptor, MethodInfo = testDelegate.Method }; }); controllerDescriptor.Configuration.Services.Replace(typeof(IHttpActionSelector), mockSelector.Object); // Act HttpResponseMessage message = api.ExecuteAsync( controllerContext, CancellationToken.None).Result; // Assert Assert.Equal("This is a test", message.Content.ReadAsStringAsync().Result); }
public void Invalid_Action_In_Route() { // Arrange ApiController api = new UsersController(); HttpRouteData route = new HttpRouteData(new HttpRoute()); string actionName = "invalidOp"; route.Values.Add("action", actionName); HttpControllerContext controllerContext = ContextUtil.CreateControllerContext(instance: api, routeData: route, request: new HttpRequestMessage() { Method = HttpMethod.Get }); Type controllerType = typeof(UsersController); controllerContext.ControllerDescriptor = new HttpControllerDescriptor(controllerContext.Configuration, controllerType.Name, controllerType); controllerContext.Configuration.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always; // Act & Assert var exception = Assert.Throws<HttpResponseException>(() => { HttpResponseMessage message = api.ExecuteAsync(controllerContext, CancellationToken.None).Result; }); Assert.Equal(HttpStatusCode.NotFound, exception.Response.StatusCode); var content = Assert.IsType<ObjectContent<HttpError>>(exception.Response.Content); Assert.Equal("No action was found on the controller 'UsersController' that matches the name 'invalidOp'.", ((HttpError)content.Value)["MessageDetail"]); }