public void ShouldSetAndCheckPassword()
        {
            //Arrange
            Mock<IEncryption> encryptionMock = new Mock<IEncryption>();
            encryptionMock.Setup(x => x.GenerateRandomString(It.IsAny<int>())).Returns("12345");
            encryptionMock.Setup(x => x.Hash(It.IsAny<string>())).Returns(new byte[]{ 1, 2, 3, 4 });

            User login = new User(encryptionMock.Object);

            //act
            login.SetPassword("password");

            //assert
            encryptionMock.Verify(y => y.Hash("password12345"), Times.Once);
            encryptionMock.Verify(y => y.GenerateRandomString(5), Times.Once);
            Assert.Equal(login.Salt, "12345");
            Assert.Equal(login.PasswordHash, new byte[] { 1, 2, 3, 4});

            //act
            bool isLogged = login.CheckPassword("password");

            //assert
            encryptionMock.Verify(y => y.Hash("password12345"), Times.Exactly(2));
            Assert.True(isLogged);
        }
        public void ShouldFailIfCheckPasswordDifferent()
        {
            //Arrange
            Mock<IEncryption> encryptionMock = new Mock<IEncryption>();
            encryptionMock.Setup(x => x.GenerateRandomString(It.IsAny<int>())).Returns("12345");

            encryptionMock.Setup(x => x.Hash(It.IsIn(new string[] { "password12345" }))).Returns(new byte[]{ 1, 2, 3, 4 });
            encryptionMock.Setup(x => x.Hash(It.IsNotIn(new string[] { "password12345" }))).Returns(new byte[]{ 4, 3, 2, 1 });

            User login = new User(encryptionMock.Object);

            //act
            login.SetPassword("password");
            bool isLogged = login.CheckPassword("notpassword");

            //Assert
            encryptionMock.Verify(y => y.Hash("password12345"), Times.Once);
            encryptionMock.Verify(y => y.Hash("notpassword12345"), Times.Once);
            Assert.False(isLogged);
        }