// Copyright (c) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information. using System.Net.Http; using System.Web.Http.Controllers; using System.Web.Http.Filters; using System.Web.Http.Hosting; using System.Web.Http.Routing; using Moq; namespace System.Web.Http { internal static class ContextUtil { public static HttpControllerContext CreateControllerContext(HttpConfiguration configuration = null, IHttpController instance = null, IHttpRouteData routeData = null, HttpRequestMessage request = null) { HttpConfiguration config = configuration ?? new HttpConfiguration(); IHttpRouteData route = routeData ?? new HttpRouteData(new HttpRoute()); HttpRequestMessage req = request ?? new HttpRequestMessage(); req.Properties[HttpPropertyKeys.HttpConfigurationKey] = config; req.Properties[HttpPropertyKeys.HttpRouteDataKey] = route; HttpControllerContext context = new HttpControllerContext(config, route, req); if (instance != null) { context.Controller = instance; } return context; } public static HttpActionContext CreateActionContext(HttpControllerContext controllerContext = null, HttpActionDescriptor actionDescriptor = null) { HttpControllerContext context = controllerContext ?? ContextUtil.CreateControllerContext(); HttpActionDescriptor descriptor = actionDescriptor ?? new Mock() { CallBase = true }.Object; return new HttpActionContext(context, descriptor); } public static HttpActionContext GetHttpActionContext(HttpRequestMessage request) { HttpActionContext actionContext = CreateActionContext(); actionContext.ControllerContext.Request = request; return actionContext; } public static HttpActionExecutedContext GetActionExecutedContext(HttpRequestMessage request, HttpResponseMessage response) { HttpActionContext actionContext = CreateActionContext(); actionContext.ControllerContext.Request = request; HttpActionExecutedContext actionExecutedContext = new HttpActionExecutedContext(actionContext, null) { Response = response }; return actionExecutedContext; } } }