Skip to content

Commit 40bd4b2

Browse files
committed
Add ITenantValidator.
1 parent d0d4427 commit 40bd4b2

File tree

6 files changed

+64
-60
lines changed

6 files changed

+64
-60
lines changed
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
using System.Threading.Tasks;
2+
using Volo.Abp.DependencyInjection;
3+
4+
namespace Volo.Abp.TenantManagement;
5+
6+
public class AbpTenantValidator : ITenantValidator, ITransientDependency
7+
{
8+
protected ITenantRepository TenantRepository { get; }
9+
10+
public AbpTenantValidator(ITenantRepository tenantRepository)
11+
{
12+
TenantRepository = tenantRepository;
13+
}
14+
15+
public virtual async Task ValidateAsync(Tenant tenant)
16+
{
17+
Check.NotNullOrWhiteSpace(tenant.Name, nameof(tenant.Name));
18+
Check.NotNullOrWhiteSpace(tenant.NormalizedName, nameof(tenant.NormalizedName));
19+
20+
var owner = await TenantRepository.FindByNameAsync(tenant.NormalizedName);
21+
if (owner != null && owner.Id != tenant.Id)
22+
{
23+
throw new BusinessException("Volo.Abp.TenantManagement:DuplicateTenantName").WithData("Name", tenant.NormalizedName);
24+
}
25+
}
26+
}

modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo/Abp/TenantManagement/DefaultTenantNameValidator.cs

Lines changed: 0 additions & 28 deletions
This file was deleted.

modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo/Abp/TenantManagement/ITenantNameValidator.cs

Lines changed: 0 additions & 9 deletions
This file was deleted.
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
using System.Threading.Tasks;
2+
3+
namespace Volo.Abp.TenantManagement;
4+
5+
public interface ITenantValidator
6+
{
7+
Task ValidateAsync(Tenant tenant);
8+
}
Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
using System;
2-
using System.Threading.Tasks;
3-
using Volo.Abp.Caching;
1+
using System.Threading.Tasks;
42
using Volo.Abp.Domain.Services;
53
using Volo.Abp.EventBus.Local;
64
using Volo.Abp.MultiTenancy;
@@ -9,39 +7,36 @@ namespace Volo.Abp.TenantManagement;
97

108
public class TenantManager : DomainService, ITenantManager
119
{
12-
public ITenantNameValidator TenantNameValidator { get; }
10+
protected ITenantValidator TenantValidator { get; }
1311
protected ITenantNormalizer TenantNormalizer { get; }
1412
protected ILocalEventBus LocalEventBus { get; }
1513

1614
public TenantManager(
17-
ITenantNameValidator tenantNameValidator,
15+
ITenantValidator tenantValidator,
1816
ITenantNormalizer tenantNormalizer,
1917
ILocalEventBus localEventBus)
2018
{
21-
TenantNameValidator = tenantNameValidator;
19+
TenantValidator = tenantValidator;
2220
TenantNormalizer = tenantNormalizer;
2321
LocalEventBus = localEventBus;
2422
}
2523

2624
public virtual async Task<Tenant> CreateAsync(string name)
2725
{
28-
Check.NotNull(name, nameof(name));
29-
30-
var normalizedName = TenantNormalizer.NormalizeName(name);
31-
await TenantNameValidator.ValidateAsync(normalizedName);
32-
return new Tenant(GuidGenerator.Create(), name, normalizedName);
26+
var tenant = new Tenant(GuidGenerator.Create(), name, TenantNormalizer.NormalizeName(name));
27+
await TenantValidator.ValidateAsync(tenant);
28+
return tenant;
3329
}
3430

3531
public virtual async Task ChangeNameAsync(Tenant tenant, string name)
3632
{
3733
Check.NotNull(tenant, nameof(tenant));
3834
Check.NotNull(name, nameof(name));
3935

40-
var normalizedName = TenantNormalizer.NormalizeName(name);
41-
42-
await TenantNameValidator.ValidateAsync(normalizedName, tenant.Id);
4336
await LocalEventBus.PublishAsync(new TenantChangedEvent(tenant.Id, tenant.NormalizedName));
37+
4438
tenant.SetName(name);
45-
tenant.SetNormalizedName(normalizedName);
39+
tenant.SetNormalizedName( TenantNormalizer.NormalizeName(name));
40+
await TenantValidator.ValidateAsync(tenant);
4641
}
4742
}
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,47 @@
11
using System;
22
using System.Threading.Tasks;
3-
using Volo.Abp.Guids;
3+
using Shouldly;
44
using Xunit;
55

66
namespace Volo.Abp.TenantManagement;
77

8-
public class TenantNameValidator_Tests : AbpTenantManagementDomainTestBase
8+
public class TenantValidator_Tests : AbpTenantManagementDomainTestBase
99
{
10-
private readonly ITenantNameValidator _tenantNameValidator;
10+
private readonly TenantManager _tenantManager;
1111
private readonly ITenantRepository _tenantRepository;
12-
public TenantNameValidator_Tests()
12+
13+
public TenantValidator_Tests()
1314
{
15+
_tenantManager = GetRequiredService<TenantManager>();
1416
_tenantRepository = GetRequiredService<ITenantRepository>();
15-
_tenantNameValidator = GetRequiredService<ITenantNameValidator>();
1617
}
1718

1819
[Fact]
1920
public async Task Should_Throw_If_Name_Is_Null()
2021
{
21-
await Assert.ThrowsAsync<ArgumentException>(() => _tenantNameValidator.ValidateAsync(null));
22+
await Assert.ThrowsAsync<ArgumentException>(() => _tenantManager.CreateAsync(""));
2223
}
2324

2425
[Fact]
2526
public async Task Should_Throw_If_Duplicate_Name()
2627
{
27-
await Assert.ThrowsAsync<BusinessException>(() => _tenantNameValidator.ValidateAsync("VOLOSOFT"));
28+
await Assert.ThrowsAsync<BusinessException>(() => _tenantManager.CreateAsync("VOLOSOFT"));
29+
30+
var tenant = await _tenantRepository.FindByNameAsync("ABP");
31+
await Assert.ThrowsAsync<BusinessException>(() => _tenantManager.ChangeNameAsync(tenant, "VOLOSOFT"));
2832
}
2933

3034
[Fact]
3135
public async Task Should_Not_Throw_For_Unique_Name()
3236
{
33-
await _tenantNameValidator.ValidateAsync("UNIQUE-TENANT-NAME");
37+
var tenant = await _tenantManager.CreateAsync("VOLOSOFT2");
38+
await _tenantRepository.InsertAsync(tenant);
39+
40+
tenant = await _tenantRepository.FindByNameAsync("ABP");
41+
await _tenantManager.ChangeNameAsync(tenant, "VOLOSOFT3");
42+
await _tenantRepository.UpdateAsync(tenant);
43+
44+
tenant = await _tenantRepository.FindByNameAsync("VOLOSOFT3");
45+
tenant.ShouldNotBeNull();
3446
}
3547
}

0 commit comments

Comments
 (0)