Created
August 9, 2014 08:34
-
-
Save ErikSchierboom/6da474dcd5751fbbc94c to your computer and use it in GitHub Desktop.
ASP.NET MVC test helper
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public static class MvcHelper | |
{ | |
public const string AppPathModifier = "/$(SESSION)"; | |
public static HtmlHelper<object> GetHtmlHelper() | |
{ | |
HttpContextBase httpcontext = GetHttpContext("/app/", null, null); | |
RouteCollection rt = new RouteCollection(); | |
rt.Add(new Route("{controller}/{action}/{id}", null) { Defaults = new RouteValueDictionary(new { id = "defaultid" }) }); | |
rt.Add("namedroute", new Route("named/{controller}/{action}/{id}", null) { Defaults = new RouteValueDictionary(new { id = "defaultid" }) }); | |
RouteData rd = new RouteData(); | |
rd.Values.Add("controller", "home"); | |
rd.Values.Add("action", "oldaction"); | |
ViewDataDictionary vdd = new ViewDataDictionary(); | |
ViewContext viewContext = new ViewContext() | |
{ | |
HttpContext = httpcontext, | |
RouteData = rd, | |
ViewData = vdd | |
}; | |
Mock<IViewDataContainer> mockVdc = new Mock<IViewDataContainer>(); | |
mockVdc.Setup(vdc => vdc.ViewData).Returns(vdd); | |
HtmlHelper<object> htmlHelper = new HtmlHelper<object>(viewContext, mockVdc.Object, rt); | |
return htmlHelper; | |
} | |
public static HtmlHelper GetHtmlHelper(string protocol, int port) | |
{ | |
HttpContextBase httpcontext = GetHttpContext("/app/", null, null, protocol, port); | |
RouteCollection rt = new RouteCollection(); | |
rt.Add(new Route("{controller}/{action}/{id}", null) { Defaults = new RouteValueDictionary(new { id = "defaultid" }) }); | |
rt.Add("namedroute", new Route("named/{controller}/{action}/{id}", null) { Defaults = new RouteValueDictionary(new { id = "defaultid" }) }); | |
RouteData rd = new RouteData(); | |
rd.Values.Add("controller", "home"); | |
rd.Values.Add("action", "oldaction"); | |
ViewDataDictionary vdd = new ViewDataDictionary(); | |
Mock<ViewContext> mockViewContext = new Mock<ViewContext>(); | |
mockViewContext.Setup(c => c.HttpContext).Returns(httpcontext); | |
mockViewContext.Setup(c => c.RouteData).Returns(rd); | |
mockViewContext.Setup(c => c.ViewData).Returns(vdd); | |
Mock<IViewDataContainer> mockVdc = new Mock<IViewDataContainer>(); | |
mockVdc.Setup(vdc => vdc.ViewData).Returns(vdd); | |
HtmlHelper htmlHelper = new HtmlHelper(mockViewContext.Object, mockVdc.Object, rt); | |
return htmlHelper; | |
} | |
public static HtmlHelper GetHtmlHelper(ViewDataDictionary viewData) | |
{ | |
Mock<ViewContext> mockViewContext = new Mock<ViewContext>() { CallBase = true }; | |
mockViewContext.Setup(c => c.ViewData).Returns(viewData); | |
mockViewContext.Setup(c => c.HttpContext.Items).Returns(new Hashtable()); | |
IViewDataContainer container = GetViewDataContainer(viewData); | |
return new HtmlHelper(mockViewContext.Object, container); | |
} | |
public static HtmlHelper<TModel> GetHtmlHelper<TModel>(ViewDataDictionary<TModel> viewData) | |
{ | |
Mock<ViewContext> mockViewContext = new Mock<ViewContext>() { CallBase = true }; | |
mockViewContext.Setup(c => c.ViewData).Returns(viewData); | |
mockViewContext.Setup(c => c.HttpContext.Items).Returns(new Hashtable()); | |
IViewDataContainer container = GetViewDataContainer(viewData); | |
return new HtmlHelper<TModel>(mockViewContext.Object, container); | |
} | |
public static HtmlHelper GetHtmlHelperWithPath(ViewDataDictionary viewData) | |
{ | |
return GetHtmlHelperWithPath(viewData, "/"); | |
} | |
public static HtmlHelper GetHtmlHelperWithPath(ViewDataDictionary viewData, string appPath) | |
{ | |
ViewContext viewContext = GetViewContextWithPath(appPath, viewData); | |
Mock<IViewDataContainer> mockContainer = new Mock<IViewDataContainer>(); | |
mockContainer.Setup(c => c.ViewData).Returns(viewData); | |
IViewDataContainer container = mockContainer.Object; | |
return new HtmlHelper(viewContext, container, new RouteCollection()); | |
} | |
public static HtmlHelper<TModel> GetHtmlHelperWithPath<TModel>(ViewDataDictionary<TModel> viewData, string appPath) | |
{ | |
ViewContext viewContext = GetViewContextWithPath(appPath, viewData); | |
Mock<IViewDataContainer> mockContainer = new Mock<IViewDataContainer>(); | |
mockContainer.Setup(c => c.ViewData).Returns(viewData); | |
IViewDataContainer container = mockContainer.Object; | |
return new HtmlHelper<TModel>(viewContext, container, new RouteCollection()); | |
} | |
public static HtmlHelper<TModel> GetHtmlHelperWithPath<TModel>(ViewDataDictionary<TModel> viewData) | |
{ | |
return GetHtmlHelperWithPath(viewData, "/"); | |
} | |
public static HttpContextBase GetHttpContext(string appPath, string requestPath, string httpMethod, string protocol, int port) | |
{ | |
Mock<HttpContextBase> mockHttpContext = new Mock<HttpContextBase>(); | |
if (!String.IsNullOrEmpty(appPath)) | |
{ | |
mockHttpContext.Setup(o => o.Request.ApplicationPath).Returns(appPath); | |
} | |
if (!String.IsNullOrEmpty(requestPath)) | |
{ | |
mockHttpContext.Setup(o => o.Request.AppRelativeCurrentExecutionFilePath).Returns(requestPath); | |
} | |
Uri uri; | |
if (port >= 0) | |
{ | |
uri = new Uri(protocol + "://localhost" + ":" + Convert.ToString(port)); | |
} | |
else | |
{ | |
uri = new Uri(protocol + "://localhost"); | |
} | |
mockHttpContext.Setup(o => o.Request.Url).Returns(uri); | |
mockHttpContext.Setup(o => o.Request.PathInfo).Returns(String.Empty); | |
if (!String.IsNullOrEmpty(httpMethod)) | |
{ | |
mockHttpContext.Setup(o => o.Request.HttpMethod).Returns(httpMethod); | |
} | |
mockHttpContext.Setup(o => o.Session).Returns((HttpSessionStateBase)null); | |
mockHttpContext.Setup(o => o.Response.ApplyAppPathModifier(It.IsAny<string>())).Returns<string>(r => AppPathModifier + r); | |
mockHttpContext.Setup(o => o.Items).Returns(new Hashtable()); | |
return mockHttpContext.Object; | |
} | |
public static HttpContextBase GetHttpContext(string appPath, string requestPath, string httpMethod) | |
{ | |
return GetHttpContext(appPath, requestPath, httpMethod, Uri.UriSchemeHttp.ToString(), -1); | |
} | |
public static ViewContext GetViewContextWithPath(string appPath, ViewDataDictionary viewData) | |
{ | |
HttpContextBase httpContext = GetHttpContext(appPath, "/request", "GET"); | |
Mock<ViewContext> mockViewContext = new Mock<ViewContext>() { DefaultValue = DefaultValue.Mock }; | |
mockViewContext.Setup(c => c.HttpContext).Returns(httpContext); | |
mockViewContext.Setup(c => c.ViewData).Returns(viewData); | |
mockViewContext.Setup(c => c.Writer).Returns(new StringWriter()); | |
return mockViewContext.Object; | |
} | |
public static ViewContext GetViewContextWithPath(ViewDataDictionary viewData) | |
{ | |
return GetViewContextWithPath("/", viewData); | |
} | |
public static IViewDataContainer GetViewDataContainer(ViewDataDictionary viewData) | |
{ | |
Mock<IViewDataContainer> mockContainer = new Mock<IViewDataContainer>(); | |
mockContainer.Setup(c => c.ViewData).Returns(viewData); | |
return mockContainer.Object; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment