diff --git a/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/AuditPropertySetterTestBase.cs b/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/AuditPropertySetterTestBase.cs index 4bdad632be..dd1ba7a235 100644 --- a/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/AuditPropertySetterTestBase.cs +++ b/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/AuditPropertySetterTestBase.cs @@ -43,8 +43,14 @@ namespace Volo.Abp.Auditing ); } - public class MyAuditedObject : IFullAudited + public class MyEmptyObject { + + } + + public class MyAuditedObject : IMultiTenant, IFullAudited + { + public Guid? TenantId { get; set; } public DateTime CreationTime { get; set; } public Guid? CreatorId { get; set; } public DateTime? LastModificationTime { get; set; } diff --git a/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/AuditPropertySetter_CreationAudit_Tests.cs b/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/AuditPropertySetter_CreationAudit_Tests.cs index 5ea1b120e5..9ca0f16101 100644 --- a/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/AuditPropertySetter_CreationAudit_Tests.cs +++ b/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/AuditPropertySetter_CreationAudit_Tests.cs @@ -6,12 +6,27 @@ namespace Volo.Abp.Auditing { public class AuditPropertySetter_CreationAudit_Tests : AuditPropertySetterTestBase { + [Fact] + public void Should_Do_Nothing_For_Non_Audited_Entity() + { + AuditPropertySetter.SetCreationAuditProperties(new MyEmptyObject()); + } + [Fact] public void Should_Set_CreationTime() { AuditPropertySetter.SetCreationAuditProperties(TargetObject); - TargetObject.CreationTime.ShouldNotBe(default); + TargetObject.CreationTime.ShouldBe(Now); + } + + [Fact] + public void Should_Not_Set_CreatorId_If_Current_User_Is_Not_Available() + { + AuditPropertySetter.SetCreationAuditProperties(TargetObject); + + TargetObject.CreationTime.ShouldBe(Now); + TargetObject.CreatorId.ShouldBe(null); } [Fact] @@ -21,8 +36,52 @@ namespace Volo.Abp.Auditing AuditPropertySetter.SetCreationAuditProperties(TargetObject); - TargetObject.CreationTime.ShouldNotBe(default); + TargetObject.CreationTime.ShouldBe(Now); + TargetObject.CreatorId.ShouldBe(CurrentUserId); + } + + [Fact] + public void Should_Not_Set_CreatorId_If_It_Is_Already_Set() + { + var oldCreatorUserId = Guid.NewGuid(); + + CurrentUserId = Guid.NewGuid(); + TargetObject.CreatorId = oldCreatorUserId; + + AuditPropertySetter.SetCreationAuditProperties(TargetObject); + + TargetObject.CreationTime.ShouldBe(Now); + TargetObject.CreatorId.ShouldBe(oldCreatorUserId); + } + + [Fact] + public void Should_Set_CreatorId_If_Entity_Tenant_Is_Same_With_Current_User_Tenant() + { + CurrentTenantId = Guid.NewGuid(); + CurrentUserId = Guid.NewGuid(); + + CurrentUserTenantId = CurrentTenantId; + TargetObject.TenantId = CurrentTenantId; + + AuditPropertySetter.SetCreationAuditProperties(TargetObject); + + TargetObject.CreationTime.ShouldBe(Now); TargetObject.CreatorId.ShouldBe(CurrentUserId); } + + [Fact] + public void Should_Not_Set_CreatorId_If_Entity_Tenant_Is_Different_From_Current_User_Tenant() + { + CurrentTenantId = Guid.NewGuid(); + CurrentUserId = Guid.NewGuid(); + + CurrentUserTenantId = CurrentTenantId; + TargetObject.TenantId = Guid.NewGuid(); + + AuditPropertySetter.SetCreationAuditProperties(TargetObject); + + TargetObject.CreationTime.ShouldBe(Now); + TargetObject.CreatorId.ShouldBe(null); + } } } \ No newline at end of file diff --git a/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/AuditPropertySetter_ModificationAudit_Tests.cs b/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/AuditPropertySetter_ModificationAudit_Tests.cs new file mode 100644 index 0000000000..8dd9c03520 --- /dev/null +++ b/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/AuditPropertySetter_ModificationAudit_Tests.cs @@ -0,0 +1,87 @@ +using System; +using Shouldly; +using Xunit; + +namespace Volo.Abp.Auditing +{ + public class AuditPropertySetter_ModificationAudit_Tests : AuditPropertySetterTestBase + { + [Fact] + public void Should_Do_Nothing_For_Non_Audited_Entity() + { + AuditPropertySetter.SetModificationAuditProperties(new MyEmptyObject()); + } + + [Fact] + public void Should_Set_LastModificationTime() + { + AuditPropertySetter.SetModificationAuditProperties(TargetObject); + + TargetObject.LastModificationTime.ShouldBe(Now); + } + + [Fact] + public void Should_Clear_LastModifierId_If_Current_User_Is_Not_Available() + { + TargetObject.LastModifierId = Guid.NewGuid(); + + AuditPropertySetter.SetModificationAuditProperties(TargetObject); + + TargetObject.LastModificationTime.ShouldBe(Now); + TargetObject.LastModifierId.ShouldBe(null); + } + + [Fact] + public void Should_Set_LastModifierId() + { + CurrentUserId = Guid.NewGuid(); + + AuditPropertySetter.SetModificationAuditProperties(TargetObject); + + TargetObject.LastModificationTime.ShouldBe(Now); + TargetObject.LastModifierId.ShouldBe(CurrentUserId); + } + + [Fact] + public void Should_Set_LastModifierId_Again_Even_If_It_Is_Set_Before() + { + CurrentUserId = Guid.NewGuid(); + TargetObject.LastModifierId = Guid.NewGuid(); + + AuditPropertySetter.SetModificationAuditProperties(TargetObject); + + TargetObject.LastModificationTime.ShouldBe(Now); + TargetObject.LastModifierId.ShouldBe(CurrentUserId); + } + + [Fact] + public void Should_Set_LastModifierId_If_Entity_Tenant_Is_Same_With_Current_User_Tenant() + { + CurrentTenantId = Guid.NewGuid(); + CurrentUserId = Guid.NewGuid(); + + CurrentUserTenantId = CurrentTenantId; + TargetObject.TenantId = CurrentTenantId; + + AuditPropertySetter.SetModificationAuditProperties(TargetObject); + + TargetObject.LastModificationTime.ShouldBe(Now); + TargetObject.LastModifierId.ShouldBe(CurrentUserId); + } + + [Fact] + public void Should_Clear_LastModifierId_If_Entity_Tenant_Is_Different_From_Current_User_Tenant() + { + CurrentTenantId = Guid.NewGuid(); + CurrentUserId = Guid.NewGuid(); + CurrentUserTenantId = CurrentTenantId; + TargetObject.TenantId = Guid.NewGuid(); + TargetObject.LastModifierId = Guid.NewGuid(); + + AuditPropertySetter.SetModificationAuditProperties(TargetObject); + + TargetObject.LastModificationTime.ShouldBe(Now); + TargetObject.LastModifierId.ShouldBe(null); + } + } +} \ No newline at end of file