public MembershipResult ChangePassword(ChangePasswordRequest request)
        {
            if (request == null)
            {
                throw new ArgumentNullException("request");
            }
            MembershipResult result = new MembershipResult();
            var customer = CustomerProvider.QueryByUserName(request.Username);
            #region Validation
            if (customer == null)
            {
                result.Errors.Add("The customer does not exists.".Localize());
            }
            MembershipResult validateResult = null;
            if (string.IsNullOrEmpty(request.OldPassword) || !((validateResult = Validate(customer, request.OldPassword)).Success))
            {
                if (validateResult != null)
                {
                    result.Errors.AddRange(validateResult.Errors);
                }
            }
            if (string.IsNullOrEmpty(request.NewPassword))
            {
                result.Errors.Add("Invalid new password.".Localize());
            }
            #endregion

            if (result.Success)
            {
                var encryptedPwd = PasswordEncryptor.EncryptPassword(request.NewPassword, customer.Membership.PasswordSalt);
                customer.Membership.Password = encryptedPwd;
                CustomerService.Update(customer);
            }
            return result;
        }
        public void Test_ChangePassword()
        {
            var customer = new Customer()
            {
                Username = "******",
                Email = "*****@*****.**",
                Membership = new Membership()
                {
                    Password = "******",
                    IsApproved = true
                }
            };
            var customerProvider = new Mock<ICustomerProvider>();
            customerProvider.Setup(it => it.QueryByUserName("test"))
                .Returns(customer);

            var customerService = new Mock<ICustomerService>();
            Customer updateCustomer = null;
            customerService.Setup(it => it.Update(It.IsAny<Customer>()))
                .Callback<Customer>((c) =>
                {
                    updateCustomer = c;
                });

            var passwordEncryptor = new Mock<IPasswordEncryptor>();
            passwordEncryptor.Setup(it => it.EncryptPassword(It.IsAny<string>(), It.IsAny<string>()))
                .Returns<string, string>((p, salt) => p);

            CustomerMembershipService customerMemberhipService = new CustomerMembershipService(
              customerProvider.Object, customerService.Object, passwordEncryptor.Object);

            ChangePasswordRequest request = new ChangePasswordRequest()
            {
                Username = "******",
                NewPassword = "******",
                OldPassword = "******"
            };
            var result = customerMemberhipService.ChangePassword(request);
            Assert.IsTrue(result.Success);
            Assert.IsNotNull(updateCustomer);
            Assert.AreEqual(request.Username, updateCustomer.Username);
            Assert.AreEqual(request.NewPassword, updateCustomer.Membership.Password);
        }