Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public static class ControllerTestExtensions
- {
- public static T StubControllerDependencies<T>(this T controller) where T : Controller
- {
- return StubControllerDependencies(controller, null);
- }
- public static T StubControllerDependencies<T>(this T controller, IList<Stream> requestFiles) where T : Controller
- {
- RouteTable.Routes.Clear();
- var routes = RouteTester.RegisterTestRoutes();
- var requestContext = new RequestContext(GetMockHttpContext(requestFiles), new RouteData());
- controller.Url = new UrlHelper(requestContext, routes);
- controller.ControllerContext = new ControllerContext(requestContext, controller);
- return controller;
- }
- public static T GetModel<T>(this ActionResult ar) where T : class
- {
- var result = ar as ViewResult;
- if (result == null)
- {
- throw new Exception("Can't get view from ActionResult because it isn't a ViewResult");
- }
- return result.Model as T;
- }
- public static FormActionResult GetFormActionResult(this ActionResult ar)
- {
- var result = ar as FormActionResult;
- if (result == null)
- {
- throw new Exception("Can't get result from ActionResult because it isn't a FormActionResult");
- }
- return result;
- }
- private static HttpContextBase GetMockHttpContext(IList<Stream> requestFiles)
- {
- var context = new Mock<HttpContextBase>();
- var request = new Mock<HttpRequestBase>();
- var response = new Mock<HttpResponseBase>();
- var session = new Mock<HttpSessionStateBase>();
- var server = new Mock<HttpServerUtilityBase>();
- request.Setup(r => r.AppRelativeCurrentExecutionFilePath).Returns("/");
- request.Setup(r => r.ApplicationPath).Returns("/");
- if (requestFiles != null)
- {
- var fakedFileCollection = new Mock<HttpFileCollectionBase>();
- fakedFileCollection.SetupGet(x => x.Count).Returns(requestFiles.Count);
- int i = 0;
- foreach (var file in requestFiles)
- {
- var fakedFile = new Mock<HttpPostedFileBase>();
- fakedFile.SetupGet(x => x.InputStream).Returns(file);
- fakedFile.SetupGet(x => x.ContentLength).Returns((int)file.Length);
- fakedFileCollection.SetupGet(x => x[i]).Returns(fakedFile.Object);
- }
- request.SetupGet(x => x.Files).Returns(fakedFileCollection.Object);
- }
- response.Setup(s => s.ApplyAppPathModifier(It.IsAny<string>())).Returns<string>(s => s);
- response.SetupProperty(res => res.StatusCode, (int)System.Net.HttpStatusCode.OK);
- context.Setup(h => h.Request).Returns(request.Object);
- context.Setup(h => h.Response).Returns(response.Object);
- context.Setup(ctx => ctx.Request).Returns(request.Object);
- context.Setup(ctx => ctx.Response).Returns(response.Object);
- context.Setup(ctx => ctx.Session).Returns(session.Object);
- context.Setup(ctx => ctx.Server).Returns(server.Object);
- return context.Object;
- }
- private class TestHttpCollection : HttpFileCollectionBase
- {
- public TestHttpCollection() : base()
- {
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement