Skip to content

Instantly share code, notes, and snippets.

@ErikSchierboom
Created August 9, 2014 08:34
Show Gist options
  • Star 6 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ErikSchierboom/6da474dcd5751fbbc94c to your computer and use it in GitHub Desktop.
Save ErikSchierboom/6da474dcd5751fbbc94c to your computer and use it in GitHub Desktop.
ASP.NET MVC test helper
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