public void GetUserId_General(string login, string password) { var repositoryMock = new Mock<ILoginAuthenticationRepository>(MockBehavior.Loose); var passwordValidatorMock = new Mock<IPasswordValidator>(MockBehavior.Loose); var saltedHashGenerator = new SaltedHashGenerator(); var service = new LoginAuthenticationService(repositoryMock.Object, passwordValidatorMock.Object, saltedHashGenerator); var userId = service.GetUserId(login, password); Assert.IsNull(userId); repositoryMock.Verify(repository => repository.GetByLogin(login)); }
public void GetUserId_CheckPassword(bool loginCorrect, bool passwordCorrect) { const string login = "******"; var inputPass = "******"; var dbPass = passwordCorrect ? inputPass : "******"; var repositoryMock = new Mock<ILoginAuthenticationRepository>(MockBehavior.Loose); var passwordValidatorMock = new Mock<IPasswordValidator>(MockBehavior.Loose); var saltedHashGenerator = new SaltedHashGenerator(); byte[] salt; var dbHash = saltedHashGenerator.GenerateSaltedHash(dbPass, out salt, 32); var loginAuthentication = new LoginAuthentication { Id = long.MaxValue - 1, UserId = long.MaxValue, Salt = salt, PasswordHash = dbHash }; repositoryMock.Setup(repository => repository.GetByLogin(login)).Returns(loginCorrect ? loginAuthentication : null); var service = new LoginAuthenticationService(repositoryMock.Object, passwordValidatorMock.Object, saltedHashGenerator); var userId = service.GetUserId(login, inputPass); if (loginCorrect && passwordCorrect) { Assert.NotNull(userId); Assert.AreEqual(loginAuthentication.UserId, userId.Value); } else { Assert.IsNull(userId); } }
public void SetPassword_General(long userId, string login, string password) { var repositoryMock = new Mock<ILoginAuthenticationRepository>(MockBehavior.Loose); var passwordValidatorMock = new Mock<IPasswordValidator>(MockBehavior.Loose); var saltedHashGenerator = new SaltedHashGenerator(); var service = new LoginAuthenticationService(repositoryMock.Object, passwordValidatorMock.Object, saltedHashGenerator); service.SetPassword(userId, login, password); byte[] salt; var expectedPasswordHash = saltedHashGenerator.GenerateSaltedHash(password, out salt, LoginAuthenticationService.SALT_LENGTH); passwordValidatorMock.Verify(validator => validator.Validate(password)); repositoryMock.Verify(repository => repository.GetByUserId(userId)); repositoryMock.Verify(repository => repository.Save(It.Is<LoginAuthentication>( authentication => authentication.Id == 0 && authentication.UserId == userId && authentication.LoginName == login && authentication.Salt.SequenceEqual(salt) && authentication.PasswordHash.SequenceEqual(expectedPasswordHash) ))); }