Reputation: 1106
I try to mock the system in order to test controller.
[TestMethod]
public static HttpContextBase TestController()
{
Container _container = GetContainer();
// Setup Moq config for controller context
var moqContext = new Mock<HttpContextBase>();
var moqRequest = new Mock<HttpRequestBase>();
var moqResponse = new Mock<HttpResponseBase>();
var moqSession = new Mock<HttpSessionStateBase>();
var moqServer = new Mock<HttpServerUtilityBase>();
var fakeIdentity = new GenericIdentity("User");
var principal = new GenericPrincipal(fakeIdentity, null);
moqRequest.SetupGet(x => x.Url).Returns(new Uri("http://10.00.00:11111/", UriKind.RelativeOrAbsolute));
moqRequest.SetupGet(x => x.ServerVariables).Returns(new NameValueCollection());
//moq Context
moqContext.SetupGet(x => x.Request).Returns(moqRequest.Object);
moqContext.SetupGet(x => x.Request.Cookies).Returns(new HttpCookieCollection());
moqContext.SetupGet(x => x.Response).Returns(moqResponse.Object);
moqContext.SetupGet(x => x.Response.Cookies).Returns(new HttpCookieCollection());
moqContext.SetupGet(x => x.Session).Returns(moqSession.Object);
moqContext.SetupGet(x => x.Server).Returns(moqServer.Object);
moqContext.SetupGet(x => x.User).Returns(principal);
moqContext.SetupGet(x => x.User.Identity.Name).Returns("UserName");
var contextRequest = new HttpRequest("", "http://10.0.0.00:11111/User/Login", "");
var contextResponse = new HttpResponse(new StringWriter());
HttpContext.Current = new HttpContext(contextRequest, contextResponse);
HttpContext.Current.User = principal;
// Authenticate User
IUsuarioAppService _usuarioApp = _container.GetInstance<IUsuarioAppService>();
var usuario = _usuarioApp.AutenticarUsuario(username, password);
var usuarioController = _container.GetInstance<UsuariosController>();
usuarioController.ControllerContext = new ControllerContext(moqContext.Object, new RouteData(), usuarioController);
usuarioController.Login(true, "", usuario);
foreach (var key in moqContext.Object.Response.Cookies.AllKeys)
{
var cookieItem = moqContext.Object.Response.Cookies[key];
var cookie = new HttpCookie(key, cookieItem.Value);
cookie.Expires = DateTime.Now.AddMinutes(30);
HttpContext.Current.Request.Cookies.Add(cookie);
moqContext.Object.Request.Cookies.Add(cookie);
}
var controller = _container.GetInstance<HomeController>();
controller.ControllerContext = new ControllerContext(moqContext.Object, new RouteData(), controller);
}
var scenario1 = controller.New(model1) as ViewResult;
The problem is that inside method New
in HomeController
I remove the cookies of Response, and then the all cookies of Request disappear. Normally it is not happening, only when I am testing.
internal static void SetCookie(string key, object value)
{
var cookie = new HttpCookie(key, value != null ? value.ToString() : null);
cookie.Path = HttpRuntime.AppDomainAppVirtualPath;
cookie.Expires = DateTime.UtcNow.AddDays(3);
cookie.HttpOnly = true;
if (value == null)
cookie.Expires = DateTime.Now.AddDays(-1d);
if (HttpContext.Current.Response.Cookies.AllKeys.Contains(key))
{
HttpContext.Current.Response.Cookies.Remove(key);
HttpContext.Current.Response.AppendCookie(cookie);
}
else
{
HttpContext.Current.Response.AppendCookie(cookie);
}
}
What can be the reseaon of this? Do I Add correctly cookies to HttpContext?
Upvotes: 3
Views: 233
Reputation: 7434
What makes you think the cookies are present on the request in the first place? As I read it
moqContext.SetupGet(x => x.Request).Returns(moqRequest.Object);
moqContext.SetupGet(x => x.Request.Cookies).Returns(new HttpCookieCollection());
will mean that no cookies are ever set on the request
Upvotes: 2