diff --git a/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Auditing/Auditing_Tests.cs b/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Auditing/Auditing_Tests.cs new file mode 100644 index 0000000000..d1b1018e5c --- /dev/null +++ b/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Auditing/Auditing_Tests.cs @@ -0,0 +1,9 @@ +using Volo.Abp.TestApp.Testing; + +namespace Volo.Abp.EntityFrameworkCore.Auditing +{ + public class Auditing_Tests : Auditing_Tests + { + + } +} diff --git a/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/Auditing/Auditing_Tests.cs b/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/Auditing/Auditing_Tests.cs new file mode 100644 index 0000000000..c5d7b87752 --- /dev/null +++ b/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/Auditing/Auditing_Tests.cs @@ -0,0 +1,9 @@ +using Volo.Abp.TestApp.Testing; + +namespace Volo.Abp.MongoDB.Auditing +{ + public class Auditing_Tests : Auditing_Tests + { + + } +} diff --git a/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/MultiTenant_Filter_Tests.cs b/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/DataFiltering/MultiTenant_Filter_Tests.cs similarity index 78% rename from test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/MultiTenant_Filter_Tests.cs rename to test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/DataFiltering/MultiTenant_Filter_Tests.cs index d4cee46471..c23761a05c 100644 --- a/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/MultiTenant_Filter_Tests.cs +++ b/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/DataFiltering/MultiTenant_Filter_Tests.cs @@ -1,6 +1,6 @@ using Volo.Abp.TestApp.Testing; -namespace Volo.Abp.MongoDB +namespace Volo.Abp.MongoDB.DataFiltering { public class MultiTenant_Filter_Tests : MultiTenant_Filter_Tests { diff --git a/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/SoftDelete_Filter_Tests.cs b/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/DataFiltering/SoftDelete_Filter_Tests.cs similarity index 77% rename from test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/SoftDelete_Filter_Tests.cs rename to test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/DataFiltering/SoftDelete_Filter_Tests.cs index 3bc3dfe979..3636b998bb 100644 --- a/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/SoftDelete_Filter_Tests.cs +++ b/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/DataFiltering/SoftDelete_Filter_Tests.cs @@ -1,6 +1,6 @@ using Volo.Abp.TestApp.Testing; -namespace Volo.Abp.MongoDB +namespace Volo.Abp.MongoDB.DataFiltering { public class SoftDelete_Filter_Tests : SoftDelete_Filter_Tests { diff --git a/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/Repository_Basic_Tests.cs b/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/Repositories/Repository_Basic_Tests.cs similarity index 97% rename from test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/Repository_Basic_Tests.cs rename to test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/Repositories/Repository_Basic_Tests.cs index 335916e308..6be5fb265a 100644 --- a/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/Repository_Basic_Tests.cs +++ b/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/Repositories/Repository_Basic_Tests.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Linq; using System.Threading.Tasks; using Shouldly; @@ -7,7 +7,7 @@ using Volo.Abp.TestApp.Domain; using Volo.Abp.TestApp.Testing; using Xunit; -namespace Volo.Abp.MongoDB +namespace Volo.Abp.MongoDB.Repositories { public class Repository_Basic_Tests : Repository_Basic_Tests { diff --git a/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/Repository_Queryable_Tests.cs b/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/Repositories/Repository_Queryable_Tests.cs similarity index 78% rename from test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/Repository_Queryable_Tests.cs rename to test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/Repositories/Repository_Queryable_Tests.cs index ee49c19526..d396471bed 100644 --- a/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/Repository_Queryable_Tests.cs +++ b/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/Repositories/Repository_Queryable_Tests.cs @@ -1,6 +1,6 @@ using Volo.Abp.TestApp.Testing; -namespace Volo.Abp.MongoDB +namespace Volo.Abp.MongoDB.Repositories { public class Repository_Queryable_Tests : Repository_Queryable_Tests { diff --git a/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Domain/Person.cs b/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Domain/Person.cs index 88f3088572..068509cc19 100644 --- a/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Domain/Person.cs +++ b/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Domain/Person.cs @@ -1,12 +1,11 @@ using System; -using System.Collections.Generic; using System.Collections.ObjectModel; -using Volo.Abp.Domain.Entities; +using Volo.Abp.Domain.Entities.Auditing; using Volo.Abp.MultiTenancy; namespace Volo.Abp.TestApp.Domain { - public class Person : AggregateRoot, IMultiTenant, ISoftDelete + public class Person : FullAuditedAggregateRoot, IMultiTenant { public virtual Guid? TenantId { get; set; } @@ -18,8 +17,6 @@ namespace Volo.Abp.TestApp.Domain public virtual Collection Phones { get; set; } - public virtual bool IsDeleted { get; set; } - private Person() { diff --git a/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/Auditing_Tests.cs b/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/Auditing_Tests.cs new file mode 100644 index 0000000000..13aaf69ca9 --- /dev/null +++ b/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/Auditing_Tests.cs @@ -0,0 +1,115 @@ +using System; +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using NSubstitute; +using Shouldly; +using Volo.Abp.Data; +using Volo.Abp.Domain.Repositories; +using Volo.Abp.Modularity; +using Volo.Abp.TestApp.Domain; +using Volo.Abp.Timing; +using Volo.Abp.Users; +using Xunit; + +namespace Volo.Abp.TestApp.Testing +{ + public abstract class Auditing_Tests : TestAppTestBase + where TStartupModule : IAbpModule + { + protected Guid? CurrentUserId; + + protected readonly IRepository PersonRepository; + protected readonly IClock Clock; + protected readonly IDataFilter DataFilter; + + protected Auditing_Tests() + { + PersonRepository = GetRequiredService>(); + Clock = GetRequiredService(); + DataFilter = GetRequiredService(); + } + + protected override void AfterAddApplication(IServiceCollection services) + { + var currentUser = Substitute.For(); + currentUser.Id.Returns(ci => CurrentUserId); + + services.AddSingleton(currentUser); + } + + [Theory] + [InlineData(null)] + [InlineData("4b2790fc-3f51-43d5-88a1-a92d96a9e6ea")] + public async Task Should_Set_Creation_Properties(string currentUserId) + { + if (currentUserId != null) + { + CurrentUserId = Guid.Parse(currentUserId); + } + + var personId = Guid.NewGuid(); + + await PersonRepository.InsertAsync(new Person(personId, "Adam", 42)); + + var person = await PersonRepository.FindAsync(personId); + + person.ShouldNotBeNull(); + person.CreationTime.ShouldBeLessThanOrEqualTo(Clock.Now); + person.CreatorId.ShouldBe(CurrentUserId); + } + + [Theory] + [InlineData(null)] + [InlineData("4b2790fc-3f51-43d5-88a1-a92d96a9e6ea")] + public async Task Should_Set_Modification_Properties(string currentUserId) + { + if (currentUserId != null) + { + CurrentUserId = Guid.Parse(currentUserId); + } + + var douglas = await PersonRepository.GetAsync(TestDataBuilder.UserDouglasId); + + douglas.Age++; + + await PersonRepository.UpdateAsync(douglas); + + douglas = await PersonRepository.FindAsync(TestDataBuilder.UserDouglasId); + + douglas.ShouldNotBeNull(); + douglas.LastModificationTime.ShouldNotBeNull(); + douglas.LastModificationTime.Value.ShouldBeLessThanOrEqualTo(Clock.Now); + douglas.LastModifierId.ShouldBe(CurrentUserId); + } + + + [Theory] + [InlineData(null)] + [InlineData("4b2790fc-3f51-43d5-88a1-a92d96a9e6ea")] + public async Task Should_Set_Deletion_Properties(string currentUserId) + { + if (currentUserId != null) + { + CurrentUserId = Guid.Parse(currentUserId); + } + + var douglas = await PersonRepository.GetAsync(TestDataBuilder.UserDouglasId); + + await PersonRepository.DeleteAsync(douglas); + + douglas = await PersonRepository.FindAsync(TestDataBuilder.UserDouglasId); + + douglas.ShouldBeNull(); + + using (DataFilter.Disable()) + { + douglas = await PersonRepository.FindAsync(TestDataBuilder.UserDouglasId); + + douglas.ShouldNotBeNull(); + douglas.DeletionTime.ShouldNotBeNull(); + douglas.DeletionTime.Value.ShouldBeLessThanOrEqualTo(Clock.Now); + douglas.DeleterId.ShouldBe(CurrentUserId); + } + } + } +}