public void Login_UserValidLogin_ReturnsUserDTO()
        {
            TimeSpan ts = new TimeSpan(1, 5, 0);
            byte[] salt = PasswordManagement.GenerateSalt();
            byte[] pass = PasswordManagement.GenerateSaltedPassword(Encoding.UTF8.GetBytes("Password"), salt);

            var mock = new Mock<IUnitOfWork>();
            mock.Setup(u => u.UserRepository.Get(It.IsAny<Expression<Func<User, bool>>>(), null, "")).Returns(
                new List<User>
            {
                new User { UserId = 4, FirstName = "Test4", LastName = "LastName", Email = "*****@*****.**", Salt = salt, Password = pass, AccountConfirmed = true, PassResetCode = "test1", PassResetExpire = new Nullable<DateTime>(DateTime.Now.Add(ts)) },
            });

            LoginService ls = new LoginService(mock.Object);

            UserDTO user = ls.Login("*****@*****.**", "Password");

            Assert.IsNotNull(user);
        }
        public void ResetPassword_InvalidUserResetsPassword_ReturnsFalse()
        {
            TimeSpan ts = new TimeSpan(1, 5, 0);
            byte[] salt = PasswordManagement.GenerateSalt();
            byte[] pass = PasswordManagement.GenerateSaltedPassword(Encoding.UTF8.GetBytes("Password"), salt);

            var mock = new Mock<IUnitOfWork>();
            mock.Setup(u => u.UserRepository.Get(It.IsAny<Expression<Func<User, bool>>>(), null, "")).Returns(new List<User>());

            LoginService ls = new LoginService(mock.Object);

            bool passwordReset = ls.ResetPassword("*****@*****.**");

            Assert.IsFalse(passwordReset);
        }
        public void NewPassword_ExpiredResetCode_ReturnsFalse()
        {
            TimeSpan ts = new TimeSpan(0, 5, 0);
            byte[] salt = PasswordManagement.GenerateSalt();
            byte[] pass = PasswordManagement.GenerateSaltedPassword(Encoding.UTF8.GetBytes("Password"), salt);
            List<User> users = new List<User>
            {
                new User { UserId = 5, FirstName = "Test5", LastName = "LastName", Email = "*****@*****.**", Salt = salt, Password = pass, AccountConfirmed = true, PassResetCode = "test2", PassResetExpire = DateTime.Now.Subtract(ts) }
            };

            var mock = new Mock<IUnitOfWork>();
            mock.Setup(u => u.UserRepository.Get(It.IsAny<Expression<Func<User, bool>>>(), null, "")).Returns(users);

            LoginService ls = new LoginService(mock.Object);

            bool newPassword = ls.NewPassword("newpass", "test2");

            Assert.IsFalse(newPassword);
        }