128 lines
4.4 KiB
C#
128 lines
4.4 KiB
C#
using FluentAssertions;
|
|
using Nop.Core.Domain.Customers;
|
|
using Nop.Services.Customers;
|
|
using Nop.Services.Security;
|
|
using NUnit.Framework;
|
|
|
|
namespace Nop.Tests.Nop.Services.Tests.Customers;
|
|
|
|
[TestFixture]
|
|
public class CustomerRegistrationServiceTests : ServiceTest
|
|
{
|
|
private ICustomerService _customerService;
|
|
private IEncryptionService _encryptionService;
|
|
private ICustomerRegistrationService _customerRegistrationService;
|
|
|
|
[OneTimeSetUp]
|
|
public void SetUp()
|
|
{
|
|
_customerService = GetService<ICustomerService>();
|
|
_encryptionService = GetService<IEncryptionService>();
|
|
_customerRegistrationService = GetService<ICustomerRegistrationService>();
|
|
}
|
|
|
|
private async Task<Customer> CreateCustomerAsync(PasswordFormat passwordFormat, bool isRegistered = true)
|
|
{
|
|
var customer = new Customer
|
|
{
|
|
Username = "test@test.com",
|
|
Email = "test@test.com",
|
|
Active = true
|
|
};
|
|
|
|
await _customerService.InsertCustomerAsync(customer);
|
|
|
|
var password = "password";
|
|
if (passwordFormat == PasswordFormat.Encrypted)
|
|
password = _encryptionService.EncryptText(password);
|
|
|
|
await _customerService.InsertCustomerPasswordAsync(new CustomerPassword
|
|
{
|
|
CustomerId = customer.Id,
|
|
PasswordFormat = passwordFormat,
|
|
Password = password,
|
|
CreatedOnUtc = DateTime.UtcNow
|
|
});
|
|
|
|
if (isRegistered)
|
|
{
|
|
var registeredRole = await _customerService
|
|
.GetCustomerRoleBySystemNameAsync(NopCustomerDefaults.RegisteredRoleName);
|
|
await _customerService.AddCustomerRoleMappingAsync(new CustomerCustomerRoleMapping
|
|
{
|
|
CustomerId = customer.Id,
|
|
CustomerRoleId = registeredRole.Id
|
|
});
|
|
}
|
|
|
|
return customer;
|
|
}
|
|
|
|
private async Task DeleteCustomerAsync(Customer customer)
|
|
{
|
|
customer.Username = customer.Email = string.Empty;
|
|
customer.Active = false;
|
|
await _customerService.UpdateCustomerAsync(customer);
|
|
await _customerService.DeleteCustomerAsync(customer);
|
|
}
|
|
|
|
[Test]
|
|
public async Task EnsureOnlyRegisteredCustomersCanLogin()
|
|
{
|
|
var result = await _customerRegistrationService.ValidateCustomerAsync(NopTestsDefaults.AdminEmail, NopTestsDefaults.AdminPassword);
|
|
result.Should().Be(CustomerLoginResults.Successful);
|
|
|
|
var customer = await CreateCustomerAsync(PasswordFormat.Clear, false);
|
|
|
|
result = await _customerRegistrationService.ValidateCustomerAsync("test@test.com", "password");
|
|
await DeleteCustomerAsync(customer);
|
|
|
|
result.Should().Be(CustomerLoginResults.NotRegistered);
|
|
}
|
|
|
|
[Test]
|
|
public async Task CanValidateHashedPassword()
|
|
{
|
|
var result = await _customerRegistrationService.ValidateCustomerAsync(NopTestsDefaults.AdminEmail, NopTestsDefaults.AdminPassword);
|
|
result.Should().Be(CustomerLoginResults.Successful);
|
|
}
|
|
|
|
[Test]
|
|
public async Task CanValidateClearPassword()
|
|
{
|
|
var customer = await CreateCustomerAsync(PasswordFormat.Clear);
|
|
|
|
var result = await _customerRegistrationService.ValidateCustomerAsync("test@test.com", "password");
|
|
await DeleteCustomerAsync(customer);
|
|
|
|
result.Should().Be(CustomerLoginResults.Successful);
|
|
}
|
|
|
|
[Test]
|
|
public async Task CanValidateEncryptedPassword()
|
|
{
|
|
var customer = await CreateCustomerAsync(PasswordFormat.Encrypted);
|
|
|
|
var result = await _customerRegistrationService.ValidateCustomerAsync("test@test.com", "password");
|
|
await DeleteCustomerAsync(customer);
|
|
|
|
result.Should().Be(CustomerLoginResults.Successful);
|
|
}
|
|
|
|
[Test]
|
|
public async Task CanChangePassword()
|
|
{
|
|
var customer = await CreateCustomerAsync(PasswordFormat.Encrypted);
|
|
|
|
var request = new ChangePasswordRequest("test@test.com", true, PasswordFormat.Clear, "password", "password");
|
|
var unSuccess = await _customerRegistrationService.ChangePasswordAsync(request);
|
|
|
|
request = new ChangePasswordRequest("test@test.com", true, PasswordFormat.Hashed, "newpassword", "password");
|
|
var success = await _customerRegistrationService.ChangePasswordAsync(request);
|
|
|
|
unSuccess.Success.Should().BeFalse();
|
|
success.Success.Should().BeTrue();
|
|
|
|
await DeleteCustomerAsync(customer);
|
|
}
|
|
} |