public void IdentitySignin(User user, bool isPersistent = false)
        {
            if (user == null)
            {
                throw new ArgumentNullException("user");
            }
            var claims = new List<Claim>();

            claims.Add(new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()));
            claims.Add(new Claim(ClaimTypes.Role, user.IsAdmin.ToString()));
            claims.Add(new Claim(ClaimTypes.Email, user.Email));

            var identity = new ClaimsIdentity(claims, DefaultAuthenticationTypes.ApplicationCookie);

            AuthenticationManager.SignIn(new AuthenticationProperties()
            {
                AllowRefresh = true,
                IsPersistent = isPersistent,
                ExpiresUtc = DateTime.UtcNow.AddDays(7)
            }, identity);
        }
        public void UserRepository_Update_ShouldReturnUpdatedEntity()
        {
            var userToChange = new User()
            {
                Id = 1,
                Email = "mail1",
                Lists = new List<Order>(),
                Name = "name1",
                Password = "******",
                PhotoPath = "photo1",
            };
            var dbData = new List<User>()
            {
                userToChange,
                new User()
                {
                    Id = 1,
                    Email = "mail1",
                    Lists = new List<Order>(),
                    Name = "name1",
                    Password = "******",
                    PhotoPath = "photo1",
                },
                new User()
                {
                    Id = 3,
                    Email = "mail3",
                    Lists = new List<Order>(),
                    Name = "name3",
                    Password = "******",
                    PhotoPath = "photo3",
                }
            }.AsQueryable();

            var newUser = new User()
            {
                Id = 1,
                Email = "mail2",
                Lists = new List<Order>(),
                Name = "name2",
                Password = "******",
                PhotoPath = "photo2",
            };
            var dbSetMock = new Mock<DbSet<User>>();
            dbSetMock.As<IQueryable<User>>().Setup(x => x.Provider).Returns(dbData.Provider);
            dbSetMock.As<IQueryable<User>>().Setup(x => x.Expression).Returns(dbData.Expression);
            dbSetMock.As<IQueryable<User>>().Setup(x => x.ElementType).Returns(dbData.ElementType);
            dbSetMock.As<IQueryable<User>>().Setup(x => x.GetEnumerator()).Returns(dbData.GetEnumerator());

            var dbContextMock = new Mock<ApplicationDbContext>();
            dbContextMock.Setup(x => x.Set<User>()).Returns(dbSetMock.Object);

            var repo = new UserRepository(dbContextMock.Object);
            var result = repo.Update(newUser);

            Assert.AreEqual(newUser.Name, result.Name);
            Assert.AreEqual(newUser.PhotoPath, result.PhotoPath);
        }
        public ActionResult Register(UserRegisterModel model)
        {
            var anyUser = _userService.GetAll().Any(u => u.Email == model.Email);

            if (anyUser)
            {
                ModelState.AddModelError("", "User with that email already exists!");
                return View(model);
            }

            if (ModelState.IsValid)
            {
                var user = new User()
                {
                    Password = model.Password,
                    Email = model.Email
                };

                user = _userService.Create(user);
                if (user != null)
                {
                    _signService.IdentitySignin(user);
                    return RedirectToAction("Index", "Home");
                }
                else
                    ModelState.AddModelError("", "Registration error!");
            }

            return View("Register");
        }