public void Index_RegisterUserWithDifferentPassword_ExceptionCompare()
        {
            //init
            var controller = DependencyResolver.Current.GetService<Areas.Default.Controllers.UserController>();
            var httpContext = new MockHttpContext().Object;
            ControllerContext context = new ControllerContext(new RequestContext(httpContext,  new RouteData()), controller);
            controller.ControllerContext = context;

            //act
            var registerUserView = new UserView()
            {
                Email = "*****@*****.**",
                Password = "******",
                ConfirmPassword = "******",
                AvatarPath = "/file/no-image.jpg",
                BirthdateDay = 1,
                BirthdateMonth = 12,
                BirthdateYear = 1987,
                Captcha = "1111"
            };
            try
            {
                Validator.ValidateObject<UserView>(registerUserView);
            }
            catch (Exception ex)
            {
                Assert.IsInstanceOf<ValidatorException>(ex);
                Assert.IsInstanceOf<System.ComponentModel.DataAnnotations.CompareAttribute>(((ValidatorException)ex).Attribute);
            }
        }
        public void CreateUser_Create100Users_NoAssert()
        {
            var repository = DependencyResolver.Current.GetService<IRepository>();
            var controller = DependencyResolver.Current.GetService<LessonProject.Areas.Default.Controllers.UserController>();

            var httpContext = new MockHttpContext().Object;

            var route = new RouteData();

            route.Values.Add("controller", "User");
            route.Values.Add("action", "Register");
            route.Values.Add("area", "Default");

            ControllerContext context = new ControllerContext(new RequestContext(httpContext, route), controller);
            controller.ControllerContext = context;

            controller.Session.Add(CaptchaImage.CaptchaValueKey, "1111");

            var rand = new Random((int)DateTime.Now.Ticks);
            for (int i = 0; i < 100; i++)
            {
                var registerUserView = new UserView()
                {
                    ID = 0,
                    Email = Email.GetRandom(Name.GetRandom(), Surname.GetRandom()),
                    Password = "******",
                    ConfirmPassword = "******",
                    Captcha = "1111",
                    BirthdateDay = rand.Next(28) + 1,
                    BirthdateMonth = rand.Next(12) + 1,
                    BirthdateYear = 1970 + rand.Next(20)
                };
                 controller.Register(registerUserView);
            }
        }
        public ActionResult Register(UserView userView)
        {
            if (userView.Captcha != (string)Session[CaptchaImage.CaptchaValueKey])
            {
                ModelState.AddModelError("Captcha", "Текст с картинки введен неверно");
            }
            var anyUser = Repository.Users.Any(p => string.Compare(p.Email, userView.Email) == 0);
            if (anyUser)
            {
                ModelState.AddModelError("Email", "Пользователь с таким email уже зарегистрирован");
            }

            if (ModelState.IsValid)
            {
                var user = (User)ModelMapper.Map(userView, typeof(UserView), typeof(User));

                Repository.CreateUser(user);
                return RedirectToAction("Index");
            }
            return View(userView);
        }
 public ActionResult Register()
 {
     var newUserView = new UserView();
     return View(newUserView);
 }
        public void Index_RegisterUserWithWrongCaptcha_ModelStateWithError()
        {
            //init
            var controller = DependencyResolver.Current.GetService<Areas.Default.Controllers.UserController>();
            var httpContext = new MockHttpContext().Object;
            ControllerContext context = new ControllerContext(new RequestContext(httpContext, new RouteData()), controller);
            controller.ControllerContext = context;
            controller.Session.Add(CaptchaImage.CaptchaValueKey, "2222");
            //act
            var registerUserView = new UserView()
            {
                Email = "*****@*****.**",
                Password = "******",
                ConfirmPassword = "******",
                AvatarPath = "/file/no-image.jpg",
                BirthdateDay = 1,
                BirthdateMonth = 12,
                BirthdateYear = 1987,
                Captcha = "1111"
            };

            var result = controller.Register(registerUserView);
            Assert.AreEqual("Текст с картинки введен неверно", controller.ModelState["Captcha"].Errors[0].ErrorMessage);
        }
        public void CreateUser_CreateNormalUser_CountPlusOne()
        {
            var repository = DependencyResolver.Current.GetService<IRepository>();

            var controller = DependencyResolver.Current.GetService<LessonProject.Areas.Default.Controllers.UserController>();

            var countBefore = repository.Users.Count();
            var httpContext = new MockHttpContext().Object;

            var route = new RouteData();

            route.Values.Add("controller", "User");
            route.Values.Add("action", "Register");
            route.Values.Add("area", "Default");

            ControllerContext context = new ControllerContext(new RequestContext(httpContext, route), controller);
            controller.ControllerContext = context;

            controller.Session.Add(CaptchaImage.CaptchaValueKey, "1111");

            var registerUserView = new UserView()
            {
                ID = 0,
                Email = "*****@*****.**",
                Password = "******",
                ConfirmPassword = "******",
                Captcha = "1111",
                BirthdateDay = 13,
                BirthdateMonth = 9,
                BirthdateYear = 1970
            };

            Validator.ValidateObject<UserView>(registerUserView);
            controller.Register(registerUserView);

            var countAfter = repository.Users.Count();
            Assert.AreEqual(countBefore + 1, countAfter);
        }