mirror of https://github.com/abpframework/abp.git
committed by
GitHub
10 changed files with 362 additions and 38 deletions
@ -0,0 +1,177 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Threading.Tasks; |
|||
using Shouldly; |
|||
using Volo.Abp.Data; |
|||
using Volo.Abp.Domain.Repositories; |
|||
using Volo.Abp.MultiTenancy; |
|||
using Volo.Abp.TestApp.Domain; |
|||
using Xunit; |
|||
|
|||
namespace Volo.Abp.EntityFrameworkCore.Repositories; |
|||
|
|||
public class SharedEntity_Repository_Tests : EntityFrameworkCoreTestBase |
|||
{ |
|||
protected readonly IRepository<TestSharedEntity> TestSharedTypeEntityRepository; |
|||
protected readonly ICurrentTenant CurrentTenant; |
|||
protected readonly IDataFilter<ISoftDelete> DataFilter; |
|||
|
|||
public SharedEntity_Repository_Tests() |
|||
{ |
|||
TestSharedTypeEntityRepository = GetRequiredService<IRepository<TestSharedEntity>>(); |
|||
CurrentTenant = GetRequiredService<ICurrentTenant>(); |
|||
DataFilter = GetRequiredService<IDataFilter<ISoftDelete>>(); |
|||
} |
|||
|
|||
[Fact] |
|||
public async Task SharedEntity_Test() |
|||
{ |
|||
await WithUnitOfWorkAsync(async () => |
|||
{ |
|||
TestSharedTypeEntityRepository.SetCustomEntityName("TestSharedEntity1"); |
|||
|
|||
var tenantId = Guid.NewGuid(); |
|||
await TestSharedTypeEntityRepository.InsertManyAsync(new List<TestSharedEntity>() |
|||
{ |
|||
new TestSharedEntity(Guid.NewGuid()) |
|||
{ |
|||
TenantId = null, |
|||
IsDeleted = false, |
|||
Name = "Test Person1", |
|||
Age = 10, |
|||
Birthday = DateTime.Now |
|||
}.SetProperty("testProperty", "Test Value1"), |
|||
new TestSharedEntity(Guid.NewGuid()) |
|||
{ |
|||
TenantId = tenantId, |
|||
IsDeleted = false, |
|||
Name = "Test Person2", |
|||
Age = 20, |
|||
Birthday = DateTime.Now |
|||
}, |
|||
new TestSharedEntity(Guid.NewGuid()) |
|||
{ |
|||
TenantId = tenantId, |
|||
IsDeleted = true, |
|||
Name = "Test Person3", |
|||
Age = 30, |
|||
Birthday = DateTime.Now |
|||
}, |
|||
new TestSharedEntity(Guid.NewGuid()) |
|||
{ |
|||
TenantId = null, |
|||
IsDeleted = true, |
|||
Name = "Test Person4", |
|||
Age = 40, |
|||
Birthday = DateTime.Now |
|||
} |
|||
}, true); |
|||
|
|||
var entities = (await TestSharedTypeEntityRepository.GetListAsync()).OrderBy(x => x.Name).ToList(); |
|||
entities.Count.ShouldBe(1); |
|||
entities[0].TenantId.ShouldBeNull(); |
|||
entities[0].IsDeleted.ShouldBe(false); |
|||
entities[0].Name.ShouldBe("Test Person1"); |
|||
entities[0].Age.ShouldBe(10); |
|||
entities[0].GetProperty("testProperty").ShouldBe("Test Value1"); |
|||
|
|||
using (CurrentTenant.Change(tenantId)) |
|||
{ |
|||
entities = (await TestSharedTypeEntityRepository.GetListAsync()).OrderBy(x => x.Name).ToList(); |
|||
entities.Count.ShouldBe(1); |
|||
entities[0].TenantId.ShouldBe(tenantId); |
|||
entities[0].IsDeleted.ShouldBe(false); |
|||
entities[0].Name.ShouldBe("Test Person2"); |
|||
entities[0].Age.ShouldBe(20); |
|||
} |
|||
|
|||
using (DataFilter.Disable()) |
|||
{ |
|||
entities = (await TestSharedTypeEntityRepository.GetListAsync()).OrderBy(x => x.Name).ToList(); |
|||
entities.Count.ShouldBe(2); |
|||
|
|||
entities[0].TenantId.ShouldBeNull(); |
|||
entities[0].IsDeleted.ShouldBe(false); |
|||
entities[0].Name.ShouldBe("Test Person1"); |
|||
entities[0].Age.ShouldBe(10); |
|||
|
|||
entities[1].TenantId.ShouldBeNull(); |
|||
entities[1].IsDeleted.ShouldBe(true); |
|||
entities[1].Name.ShouldBe("Test Person4"); |
|||
entities[1].Age.ShouldBe(40); |
|||
} |
|||
|
|||
using (CurrentTenant.Change(tenantId)) |
|||
{ |
|||
using (DataFilter.Disable()) |
|||
{ |
|||
entities = (await TestSharedTypeEntityRepository.GetListAsync()).OrderBy(x => x.Name).ToList(); |
|||
entities.Count.ShouldBe(2); |
|||
|
|||
entities[0].TenantId.ShouldBe(tenantId); |
|||
entities[0].IsDeleted.ShouldBe(false); |
|||
entities[0].Name.ShouldBe("Test Person2"); |
|||
entities[0].Age.ShouldBe(20); |
|||
|
|||
entities[1].TenantId.ShouldBe(tenantId); |
|||
entities[1].IsDeleted.ShouldBe(true); |
|||
entities[1].Name.ShouldBe("Test Person3"); |
|||
entities[1].Age.ShouldBe(30); |
|||
} |
|||
} |
|||
|
|||
TestSharedTypeEntityRepository.SetCustomEntityName("TestSharedEntity2"); |
|||
await TestSharedTypeEntityRepository.InsertManyAsync(new List<TestSharedEntity>() |
|||
{ |
|||
new TestSharedEntity(Guid.NewGuid()) |
|||
{ |
|||
Name = "Test Person1 from Second Table", |
|||
Age = 110, |
|||
Birthday = DateTime.Now |
|||
} |
|||
}, true); |
|||
|
|||
var entitiesFromSecondTable = (await TestSharedTypeEntityRepository.GetListAsync()).OrderBy(x => x.Name).ToList(); |
|||
entitiesFromSecondTable.Count.ShouldBe(1); |
|||
entitiesFromSecondTable[0].TenantId.ShouldBeNull(); |
|||
entitiesFromSecondTable[0].IsDeleted.ShouldBe(false); |
|||
entitiesFromSecondTable[0].Name.ShouldBe("Test Person1 from Second Table"); |
|||
entitiesFromSecondTable[0].Age.ShouldBe(110); |
|||
}); |
|||
} |
|||
|
|||
[Fact] |
|||
public async Task SharedEntity_DynamicProperty_Test() |
|||
{ |
|||
await WithUnitOfWorkAsync(async () => |
|||
{ |
|||
TestSharedTypeEntityRepository.SetCustomEntityName("TestSharedEntity1"); |
|||
|
|||
var entity = new TestSharedEntity(Guid.NewGuid()) |
|||
{ |
|||
TenantId = null, |
|||
IsDeleted = false, |
|||
Name = "Test Person1", |
|||
Age = 10, |
|||
Birthday = DateTime.Now |
|||
}; |
|||
|
|||
entity["DynamicProperty"] = "Test Value1"; |
|||
|
|||
await TestSharedTypeEntityRepository.InsertAsync(entity, true); |
|||
|
|||
entity = await TestSharedTypeEntityRepository.FindAsync(x => x.Id == entity.Id!); |
|||
entity.ShouldNotBeNull(); |
|||
|
|||
entity.Name.ShouldBe("Test Person1"); |
|||
entity.Age.ShouldBe(10); |
|||
entity.Birthday.ShouldNotBeNull(); |
|||
entity["DynamicProperty"].ShouldBe("Test Value1"); |
|||
|
|||
TestSharedTypeEntityRepository.SetCustomEntityName("TestSharedEntity2"); |
|||
entity = await TestSharedTypeEntityRepository.FindAsync(x => x.Id == entity.Id!); |
|||
entity.ShouldBeNull(); |
|||
}); |
|||
} |
|||
} |
|||
@ -0,0 +1,38 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using Volo.Abp.Domain.Entities; |
|||
using Volo.Abp.MultiTenancy; |
|||
|
|||
namespace Volo.Abp.TestApp.Domain; |
|||
|
|||
public class TestSharedEntity : AggregateRoot<Guid>, IMultiTenant, ISoftDelete |
|||
{ |
|||
private readonly Dictionary<string, object> _dynamicPropertites = new(); |
|||
|
|||
public object this[string key] |
|||
{ |
|||
get => _dynamicPropertites.GetValueOrDefault(key); |
|||
set => _dynamicPropertites[key] = value; |
|||
} |
|||
|
|||
public Guid? TenantId { get; set; } |
|||
|
|||
public virtual string Name { get; set; } |
|||
|
|||
public virtual int Age { get; set; } |
|||
|
|||
public virtual DateTime? Birthday { get; set; } |
|||
|
|||
public bool IsDeleted { get; set; } |
|||
|
|||
public TestSharedEntity() |
|||
{ |
|||
|
|||
} |
|||
|
|||
public TestSharedEntity(Guid id) |
|||
: base(id) |
|||
{ |
|||
|
|||
} |
|||
} |
|||
Loading…
Reference in new issue