public ActionResult Register(AccountRegisterModel model)
        {
            if (ModelState.IsValid)
            {
                model.Email = model.Email.ToLower().Trim();

                var errorMessage = _membershipService.CreateUser(model.Email, model.Password);

                if (string.IsNullOrEmpty(errorMessage))
                {
                    _formsService.SignIn(model.Email, false);

                    var user = _repository.Find<UserProfile>().GetBy(model.Email);

                    user.CompleteRegistration(model.Name, false);
                    _repository.Save(user);

                    return RedirectTo<AccountController>(c => c.Show(user.Id, user.UrlName));
                }

                ModelState.AddModelError("", errorMessage);
            }

            return View(model);
        }
        public void Register_Post_ReturnsViewIfModelStateIsInvalid()
        {
            // Arrange
            var model = new AccountRegisterModel
            {
                Email = "*****@*****.**",
                Password = "******",
                ConfirmPassword = "******"
            };
            _accountController.ModelState.AddModelError("", "Dummy error message.");

            // Act
            ActionResult result = _accountController.Register(model);

            // Assert
            Assert.IsInstanceOfType(result, typeof(ViewResult));
            var viewResult = (ViewResult)result;
            Assert.AreEqual(model, viewResult.ViewData.Model);
        }
        public void Register_Post_ReturnsViewIfRegistrationFails()
        {
            // Arrange
            var model = new AccountRegisterModel
            {
                Email = "*****@*****.**",
                Password = "******",
                ConfirmPassword = "******"
            };

            // Act
            ActionResult result = _accountController.Register(model);

            // Assert
            Assert.IsInstanceOfType(result, typeof(ViewResult));
            var viewResult = (ViewResult)result;
            Assert.AreEqual(model, viewResult.ViewData.Model);
            Assert.AreEqual("Email already exists. Please enter a different email address.", _accountController.ModelState[""].Errors[0].ErrorMessage);
        }
        public void Register_Post_ReturnsRedirectOnSuccess()
        {
            // Arrange
            _repository.Save(new UserProfile {Id = 1, Email = "*****@*****.**"});
            var model = new AccountRegisterModel
            {
                Email = "*****@*****.**",
                Password = "******",
                ConfirmPassword = "******",
            };

            // Act
            ActionResult result = _accountController.Register(model);

            // Assert
            Assert.IsInstanceOfType(result, typeof(RedirectToRouteResult));
            var redirectResult = (RedirectToRouteResult)result;
            Assert.AreEqual("Show", redirectResult.RouteValues["action"]);
        }