Browse Source

Tested MultiTenantManager.

pull/81/head
Halil İbrahim Kalkan 9 years ago
parent
commit
728fb018be
  1. 9
      src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/CurrentTenantResolveContext.cs
  2. 9
      src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/ICurrentTenantResolveContext.cs
  3. 7
      src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/IMultiTenancyManager.cs
  4. 9
      src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/ITenantInfo.cs
  5. 7
      src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/ITenantResolver.cs
  6. 41
      src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/MultiTenancyManager.cs
  7. 25
      src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/TenantInfo.cs
  8. 22
      src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/TenantResolverAction.cs
  9. 3
      test/Volo.Abp.MultiTenancy.Tests/Volo.Abp.MultiTenancy.Tests.xproj
  10. 77
      test/Volo.Abp.MultiTenancy.Tests/Volo/Abp/MultiTenancy/MultiTenantManager_TenantResolver_Tests.cs

9
src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/CurrentTenantResolveContext.cs

@ -0,0 +1,9 @@
namespace Volo.Abp.MultiTenancy
{
public class CurrentTenantResolveContext : ICurrentTenantResolveContext
{
public ITenantInfo Tenant { get; set; }
public bool Handled { get; set; }
}
}

9
src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/ICurrentTenantResolveContext.cs

@ -0,0 +1,9 @@
namespace Volo.Abp.MultiTenancy
{
public interface ICurrentTenantResolveContext
{
ITenantInfo Tenant { get; set; }
bool Handled { get; set; }
}
}

7
src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/IMultiTenancyManager.cs

@ -0,0 +1,7 @@
namespace Volo.Abp.MultiTenancy
{
public interface IMultiTenancyManager
{
ITenantInfo CurrentTenant { get; }
}
}

9
src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/ITenantInfo.cs

@ -0,0 +1,9 @@
namespace Volo.Abp.MultiTenancy
{
public interface ITenantInfo
{
string Id { get; }
string Name { get; }
}
}

7
src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/ITenantResolver.cs

@ -0,0 +1,7 @@
namespace Volo.Abp.MultiTenancy
{
public interface ITenantResolver
{
void Resolve(ICurrentTenantResolveContext context);
}
}

41
src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/MultiTenancyManager.cs

@ -3,42 +3,31 @@ using System.Collections.Generic;
namespace Volo.Abp.MultiTenancy
{
public interface ITenantInfo
{
Guid Id { get; }
string Name { get; }
}
public interface IMultiTenancyManager
{
ITenantInfo CurrentTenant { get; }
}
public class MultiTenancyManager : IMultiTenancyManager
{
public ITenantInfo CurrentTenant => GetCurrentTenant();
private readonly IEnumerable<ICurrentTenantResolver> _currentTenantResolvers;
private readonly IEnumerable<ITenantResolver> _currentTenantResolvers;
public MultiTenancyManager(IEnumerable<ICurrentTenantResolver> currentTenantResolvers)
public MultiTenancyManager(IEnumerable<ITenantResolver> currentTenantResolvers)
{
_currentTenantResolvers = currentTenantResolvers;
}
public virtual ITenantInfo GetCurrentTenant()
protected virtual ITenantInfo GetCurrentTenant()
{
throw new NotImplementedException();
var context = new CurrentTenantResolveContext();
foreach (var currentTenantResolver in _currentTenantResolvers)
{
currentTenantResolver.Resolve(context);
if (context.Handled)
{
break;
}
}
return context.Tenant;
}
}
public interface ICurrentTenantResolver
{
void Resolve(ICurrentTenantResolveContext context);
}
public interface ICurrentTenantResolveContext
{
}
}

25
src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/TenantInfo.cs

@ -0,0 +1,25 @@
using JetBrains.Annotations;
namespace Volo.Abp.MultiTenancy
{
public class TenantInfo : ITenantInfo
{
public string Id { get; }
public string Name { get; }
private TenantInfo()
{
}
public TenantInfo([NotNull] string id, [NotNull] string name)
{
Check.NotNull(id, nameof(id));
Check.NotNull(name, nameof(name));
Id = id;
Name = name;
}
}
}

22
src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/TenantResolverAction.cs

@ -0,0 +1,22 @@
using System;
using JetBrains.Annotations;
namespace Volo.Abp.MultiTenancy
{
public class TenantResolverAction : ITenantResolver
{
private readonly Action<ICurrentTenantResolveContext> _resolveAction;
public TenantResolverAction([NotNull] Action<ICurrentTenantResolveContext> resolveAction)
{
Check.NotNull(resolveAction, nameof(resolveAction));
_resolveAction = resolveAction;
}
public void Resolve(ICurrentTenantResolveContext context)
{
_resolveAction(context);
}
}
}

3
test/Volo.Abp.MultiTenancy.Tests/Volo.Abp.MultiTenancy.Tests.xproj

@ -16,5 +16,8 @@
<PropertyGroup>
<SchemaVersion>2.0</SchemaVersion>
</PropertyGroup>
<ItemGroup>
<Service Include="{82a7f48d-3b50-4b1e-b82e-3ada8210c358}" />
</ItemGroup>
<Import Project="$(VSToolsPath)\DotNet\Microsoft.DotNet.targets" Condition="'$(VSToolsPath)' != ''" />
</Project>

77
test/Volo.Abp.MultiTenancy.Tests/Volo/Abp/MultiTenancy/MultiTenantManager_TenantResolver_Tests.cs

@ -0,0 +1,77 @@
using System;
using Shouldly;
using Xunit;
namespace Volo.Abp.MultiTenancy
{
public class MultiTenantManager_TenantResolver_Tests
{
[Fact]
public void Should_Get_Current_Tenant_As_Null_If_No_Resolver()
{
//Arrange
var manager = new MultiTenancyManager(new ITenantResolver[0]);
//Act
manager.CurrentTenant.ShouldBeNull();
}
[Fact]
public void Should_Get_Current_Tenant_From_Single_Resolver()
{
//Arrange
var fakeTenant = new TenantInfo(Guid.NewGuid().ToString(), "acme");
//Act
var manager = new MultiTenancyManager(new[]
{
new TenantResolverAction(context =>
{
context.Tenant = fakeTenant;
context.Handled = true;
})
});
//Assert
manager.CurrentTenant.ShouldBe(fakeTenant);
}
[Fact]
public void Should_Get_Current_Tenant_From_Two_Resolvers()
{
//Arrange
var fakeTenant = new TenantInfo(Guid.NewGuid().ToString(), "acme");
//Act
var manager = new MultiTenancyManager(new[]
{
new TenantResolverAction(context =>
{
context.Tenant = new TenantInfo(Guid.NewGuid().ToString(), "skipped-tenant");
}),
new TenantResolverAction(context =>
{
context.Tenant = fakeTenant;
context.Handled = true;
}),
new TenantResolverAction(context =>
{
context.Tenant = new TenantInfo(Guid.NewGuid().ToString(), "skipped-tenant");
context.Handled = true;
})
});
//Assert
manager.CurrentTenant.ShouldBe(fakeTenant);
}
}
}
Loading…
Cancel
Save