public void Users_can_be_persisted_and_retrieved()
        {
            //Arrange
            var sutProvider  = new DataProvider <User>(_config, User.ToDomainConverter);
            var columns      = sutProvider.LoadAllColumns();
            var sutPersister = new UserPersister(columns, _config);

            //Act
            ErrorMessage error;
            var          persistResult = sutPersister.TryPersist(ref TestData.Users.NewMeJulie, out error);

            //Assert
            Assert.IsTrue(persistResult);
            Assert.IsNull(error);

            //The new row id is assigned to ref of the object
            Assert.IsNotNull(TestData.Users.MeJulie.UserId);
            Assert.IsInstanceOf <int>(TestData.Users.MeJulie.UserId);

            var readResult = sutProvider.LoadAll().First();

            Assert.AreEqual(TestData.Users.MeJulie.Email, readResult.Email);
            Assert.AreEqual(TestData.Users.MeJulie.Username, readResult.Username);
            Assert.AreEqual(TestData.Users.MeJulie.FirstName, readResult.FirstName);
            Assert.AreEqual(TestData.Users.MeJulie.LastName, readResult.LastName);

            Assert.AreNotEqual(TestData.Users.MeJulie.Password, readResult.Password);
            Assert.AreEqual(_encrypter.Encrypt(TestData.Users.MeJulie.Password), readResult.Password);
            Assert.AreEqual(TestData.Users.MeJulie.Password, _encrypter.Decrypt(readResult.Password));
        }
        private bool PersistUser(out ErrorMessage error, ref User persistedUser)
        {
            var provider  = new DataProvider <User>(_config, User.ToDomainConverter);
            var columns   = provider.LoadAllColumns();
            var persister = new UserPersister(columns, _config);

            return(persister.TryPersist(ref persistedUser, out error));
        }