public void Login_With_Invalid_User()
        {
            var userStore = new Mock<IUserStore>();
            var authService = new Mock<IFormsAuthenticationService>();
            userStore.Setup(u => u.Authenticate("abc", "def")).Returns(false);
            var controller = new UserController(userStore.Object, authService.Object);
            var model = new LoginViewModel
            {
                Password = "******",
                Username = "******"
            };

            var result = controller.Index(model);

            userStore.Verify(u => u.Authenticate("abc", "def"), Times.Once);
            Assert.IsInstanceOf(typeof(ViewResult), result);
            var view = (ViewResult)result;
            Assert.IsInstanceOf(typeof(LoginViewModel), view.Model);
            model = (LoginViewModel)view.Model;
            Assert.AreEqual("abc", model.Username);
            Assert.AreEqual("def", model.Password);
        }
        public void Login_With_Valid_User()
        {
            var userStore = new Mock<IUserStore>();
            var authService = new Mock<IFormsAuthenticationService>();
            userStore.Setup(u => u.Authenticate("abc", "def")).Returns(true);
            authService.Setup(a => a.SetAuthCookie("abc", false));
            var controller = new UserController(userStore.Object, authService.Object);
            var model = new LoginViewModel
            {
                Password = "******",
                Username = "******"
            };

            var result = controller.Index(model);

            userStore.Verify(u => u.Authenticate("abc", "def"), Times.Once);
            authService.Verify(a => a.SetAuthCookie("abc", false), Times.Once);
            var redirect = (RedirectToRouteResult)result;
            Assert.AreEqual("Index", redirect.RouteValues["action"]);
            Assert.AreEqual("Home", redirect.RouteValues["controller"]);
        }