|
|
|
@ -333,5 +333,330 @@ namespace Volo.Abp.AuditLogging |
|
|
|
results.Count.ShouldBe(1); |
|
|
|
results.Values.First().ShouldBe(50); // (45 + 55) / 2
|
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public async Task GetEntityChangeListAsync() |
|
|
|
{ |
|
|
|
// Arrange
|
|
|
|
var userId = new Guid("4456fb0d-74cc-4807-9eee-23e551e6cb06"); |
|
|
|
var userId2 = new Guid("4456fb0d-74cc-4807-9eee-23e551e6cb06"); |
|
|
|
var ipAddress = "153.1.7.61"; |
|
|
|
var firstComment = "first Comment"; |
|
|
|
|
|
|
|
var log1 = new AuditLogInfo |
|
|
|
{ |
|
|
|
UserId = userId, |
|
|
|
ImpersonatorUserId = Guid.NewGuid(), |
|
|
|
ImpersonatorTenantId = Guid.NewGuid(), |
|
|
|
ExecutionTime = DateTime.Today, |
|
|
|
ExecutionDuration = 42, |
|
|
|
ClientIpAddress = ipAddress, |
|
|
|
ClientName = "MyDesktop", |
|
|
|
BrowserInfo = "Chrome", |
|
|
|
Comments = new List<string> { firstComment, "Second Comment" }, |
|
|
|
UserName = "Douglas", |
|
|
|
EntityChanges = { |
|
|
|
new EntityChangeInfo |
|
|
|
{ |
|
|
|
EntityId = Guid.NewGuid().ToString(), |
|
|
|
EntityTypeFullName = "Volo.Abp.AuditLogging.TestEntity_Deleted", |
|
|
|
ChangeType = EntityChangeType.Deleted, |
|
|
|
ChangeTime = DateTime.Now, |
|
|
|
PropertyChanges = new List<EntityPropertyChangeInfo> |
|
|
|
{ |
|
|
|
new EntityPropertyChangeInfo |
|
|
|
{ |
|
|
|
PropertyTypeFullName = typeof(string).FullName, |
|
|
|
PropertyName = "Name", |
|
|
|
NewValue = "New value", |
|
|
|
OriginalValue = null |
|
|
|
} |
|
|
|
} |
|
|
|
}, |
|
|
|
new EntityChangeInfo |
|
|
|
{ |
|
|
|
EntityId = Guid.NewGuid().ToString(), |
|
|
|
EntityTypeFullName = "Volo.Abp.AuditLogging.TestEntity_Created", |
|
|
|
ChangeType = EntityChangeType.Created, |
|
|
|
ChangeTime = DateTime.Now, |
|
|
|
PropertyChanges = new List<EntityPropertyChangeInfo> |
|
|
|
{ |
|
|
|
new EntityPropertyChangeInfo |
|
|
|
{ |
|
|
|
PropertyTypeFullName = typeof(string).FullName, |
|
|
|
PropertyName = "Name", |
|
|
|
NewValue = "New value", |
|
|
|
OriginalValue = null |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
var log2 = new AuditLogInfo |
|
|
|
{ |
|
|
|
UserId = userId2, |
|
|
|
ImpersonatorUserId = Guid.NewGuid(), |
|
|
|
ImpersonatorTenantId = Guid.NewGuid(), |
|
|
|
ExecutionTime = DateTime.Today, |
|
|
|
ExecutionDuration = 42, |
|
|
|
ClientIpAddress = ipAddress, |
|
|
|
ClientName = "MyDesktop", |
|
|
|
BrowserInfo = "Chrome", |
|
|
|
Comments = new List<string> { firstComment, "Second Comment" }, |
|
|
|
HttpStatusCode = (int?)HttpStatusCode.BadGateway, |
|
|
|
EntityChanges = { |
|
|
|
new EntityChangeInfo |
|
|
|
{ |
|
|
|
EntityId = Guid.NewGuid().ToString(), |
|
|
|
EntityTypeFullName = "Volo.Abp.AuditLogging.TestEntity_Updated", |
|
|
|
ChangeType = EntityChangeType.Updated, |
|
|
|
ChangeTime = DateTime.Now, |
|
|
|
PropertyChanges = new List<EntityPropertyChangeInfo> |
|
|
|
{ |
|
|
|
new EntityPropertyChangeInfo |
|
|
|
{ |
|
|
|
PropertyTypeFullName = typeof(string).FullName, |
|
|
|
PropertyName = "Name", |
|
|
|
NewValue = "New value", |
|
|
|
OriginalValue = null |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
await AuditLogRepository.InsertAsync(new AuditLog(GuidGenerator, log1)); |
|
|
|
await AuditLogRepository.InsertAsync(new AuditLog(GuidGenerator, log2)); |
|
|
|
|
|
|
|
//Assert
|
|
|
|
var logs = await AuditLogRepository.GetEntityChangeListAsync(); |
|
|
|
logs.ShouldNotBeNull(); |
|
|
|
logs.Count.ShouldBe(3); |
|
|
|
|
|
|
|
logs.Single(x => x.ChangeType == EntityChangeType.Created).ShouldNotBeNull(); |
|
|
|
logs.Single(x => x.ChangeType == EntityChangeType.Deleted).ShouldNotBeNull(); |
|
|
|
logs.Single(x => x.ChangeType == EntityChangeType.Updated).ShouldNotBeNull(); |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public async Task GetOrderedEntityChangeListAsync() |
|
|
|
{ |
|
|
|
// Arrange
|
|
|
|
var userId = new Guid("4456fb0d-74cc-4807-9eee-23e551e6cb06"); |
|
|
|
var userId2 = new Guid("4456fb0d-74cc-4807-9eee-23e551e6cb06"); |
|
|
|
var ipAddress = "153.1.7.61"; |
|
|
|
var firstComment = "first Comment"; |
|
|
|
|
|
|
|
var deletedEntityChangeTime = new DateTime(2000, 05, 05, 05, 05, 05); |
|
|
|
var createdEntityChangeTime = new DateTime(2005, 05, 05, 05, 05, 05); |
|
|
|
var updatedEntityChangeTime = new DateTime(2010, 05, 05, 05, 05, 05); |
|
|
|
|
|
|
|
var log1 = new AuditLogInfo |
|
|
|
{ |
|
|
|
UserId = userId, |
|
|
|
ImpersonatorUserId = Guid.NewGuid(), |
|
|
|
ImpersonatorTenantId = Guid.NewGuid(), |
|
|
|
ExecutionTime = DateTime.Today, |
|
|
|
ExecutionDuration = 42, |
|
|
|
ClientIpAddress = ipAddress, |
|
|
|
ClientName = "MyDesktop", |
|
|
|
BrowserInfo = "Chrome", |
|
|
|
Comments = new List<string> { firstComment, "Second Comment" }, |
|
|
|
UserName = "Douglas", |
|
|
|
EntityChanges = { |
|
|
|
new EntityChangeInfo |
|
|
|
{ |
|
|
|
EntityId = Guid.NewGuid().ToString(), |
|
|
|
EntityTypeFullName = "Volo.Abp.AuditLogging.TestEntity_Deleted", |
|
|
|
ChangeType = EntityChangeType.Deleted, |
|
|
|
ChangeTime = deletedEntityChangeTime, |
|
|
|
PropertyChanges = new List<EntityPropertyChangeInfo> |
|
|
|
{ |
|
|
|
new EntityPropertyChangeInfo |
|
|
|
{ |
|
|
|
PropertyTypeFullName = typeof(string).FullName, |
|
|
|
PropertyName = "Name", |
|
|
|
NewValue = "New value", |
|
|
|
OriginalValue = null |
|
|
|
} |
|
|
|
} |
|
|
|
}, |
|
|
|
new EntityChangeInfo |
|
|
|
{ |
|
|
|
EntityId = Guid.NewGuid().ToString(), |
|
|
|
EntityTypeFullName = "Volo.Abp.AuditLogging.TestEntity_Created", |
|
|
|
ChangeType = EntityChangeType.Created, |
|
|
|
ChangeTime = createdEntityChangeTime, |
|
|
|
PropertyChanges = new List<EntityPropertyChangeInfo> |
|
|
|
{ |
|
|
|
new EntityPropertyChangeInfo |
|
|
|
{ |
|
|
|
PropertyTypeFullName = typeof(string).FullName, |
|
|
|
PropertyName = "Name", |
|
|
|
NewValue = "New value", |
|
|
|
OriginalValue = null |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
var log2 = new AuditLogInfo |
|
|
|
{ |
|
|
|
UserId = userId2, |
|
|
|
ImpersonatorUserId = Guid.NewGuid(), |
|
|
|
ImpersonatorTenantId = Guid.NewGuid(), |
|
|
|
ExecutionTime = DateTime.Today, |
|
|
|
ExecutionDuration = 42, |
|
|
|
ClientIpAddress = ipAddress, |
|
|
|
ClientName = "MyDesktop", |
|
|
|
BrowserInfo = "Chrome", |
|
|
|
Comments = new List<string> { firstComment, "Second Comment" }, |
|
|
|
HttpStatusCode = (int?)HttpStatusCode.BadGateway, |
|
|
|
EntityChanges = { |
|
|
|
new EntityChangeInfo |
|
|
|
{ |
|
|
|
EntityId = Guid.NewGuid().ToString(), |
|
|
|
EntityTypeFullName = "Volo.Abp.AuditLogging.TestEntity_Updated", |
|
|
|
ChangeType = EntityChangeType.Updated, |
|
|
|
ChangeTime = updatedEntityChangeTime, |
|
|
|
PropertyChanges = new List<EntityPropertyChangeInfo> |
|
|
|
{ |
|
|
|
new EntityPropertyChangeInfo |
|
|
|
{ |
|
|
|
PropertyTypeFullName = typeof(string).FullName, |
|
|
|
PropertyName = "Name", |
|
|
|
NewValue = "New value", |
|
|
|
OriginalValue = null |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
await AuditLogRepository.InsertAsync(new AuditLog(GuidGenerator, log1)); |
|
|
|
await AuditLogRepository.InsertAsync(new AuditLog(GuidGenerator, log2)); |
|
|
|
|
|
|
|
//Assert
|
|
|
|
var logs = await AuditLogRepository.GetEntityChangeListAsync(); |
|
|
|
logs.ShouldNotBeNull(); |
|
|
|
logs.Count.ShouldBe(3); |
|
|
|
|
|
|
|
logs.First().EntityTypeFullName.ShouldBe("Volo.Abp.AuditLogging.TestEntity_Updated"); |
|
|
|
logs.Last().EntityTypeFullName.ShouldBe("Volo.Abp.AuditLogging.TestEntity_Deleted"); |
|
|
|
|
|
|
|
var logsReversed = await AuditLogRepository.GetEntityChangeListAsync("changeTime asc"); |
|
|
|
|
|
|
|
logsReversed.First().EntityTypeFullName.ShouldBe("Volo.Abp.AuditLogging.TestEntity_Deleted"); |
|
|
|
logsReversed.Last().EntityTypeFullName.ShouldBe("Volo.Abp.AuditLogging.TestEntity_Updated"); |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public async Task GetSpecifiedEntityChangeListAsync() |
|
|
|
{ |
|
|
|
// Arrange
|
|
|
|
var userId = new Guid("4456fb0d-74cc-4807-9eee-23e551e6cb06"); |
|
|
|
var userId2 = new Guid("4456fb0d-74cc-4807-9eee-23e551e6cb06"); |
|
|
|
var ipAddress = "153.1.7.61"; |
|
|
|
var firstComment = "first Comment"; |
|
|
|
|
|
|
|
var deletedEntityChangeTime = new DateTime(2000, 05, 05, 05, 05, 05); |
|
|
|
var createdEntityChangeTime = new DateTime(2005, 05, 05, 05, 05, 05); |
|
|
|
var updatedEntityChangeTime = new DateTime(2010, 05, 05, 05, 05, 05); |
|
|
|
|
|
|
|
var log1 = new AuditLogInfo |
|
|
|
{ |
|
|
|
UserId = userId, |
|
|
|
ImpersonatorUserId = Guid.NewGuid(), |
|
|
|
ImpersonatorTenantId = Guid.NewGuid(), |
|
|
|
ExecutionTime = DateTime.Today, |
|
|
|
ExecutionDuration = 42, |
|
|
|
ClientIpAddress = ipAddress, |
|
|
|
ClientName = "MyDesktop", |
|
|
|
BrowserInfo = "Chrome", |
|
|
|
Comments = new List<string> { firstComment, "Second Comment" }, |
|
|
|
UserName = "Douglas", |
|
|
|
EntityChanges = { |
|
|
|
new EntityChangeInfo |
|
|
|
{ |
|
|
|
EntityId = Guid.NewGuid().ToString(), |
|
|
|
EntityTypeFullName = "Volo.Abp.AuditLogging.TestEntity_Deleted", |
|
|
|
ChangeType = EntityChangeType.Deleted, |
|
|
|
ChangeTime = deletedEntityChangeTime, |
|
|
|
PropertyChanges = new List<EntityPropertyChangeInfo> |
|
|
|
{ |
|
|
|
new EntityPropertyChangeInfo |
|
|
|
{ |
|
|
|
PropertyTypeFullName = typeof(string).FullName, |
|
|
|
PropertyName = "Name", |
|
|
|
NewValue = "New value", |
|
|
|
OriginalValue = null |
|
|
|
} |
|
|
|
} |
|
|
|
}, |
|
|
|
new EntityChangeInfo |
|
|
|
{ |
|
|
|
EntityId = Guid.NewGuid().ToString(), |
|
|
|
EntityTypeFullName = "Volo.Abp.AuditLogging.TestEntity_Created", |
|
|
|
ChangeType = EntityChangeType.Created, |
|
|
|
ChangeTime = createdEntityChangeTime, |
|
|
|
PropertyChanges = new List<EntityPropertyChangeInfo> |
|
|
|
{ |
|
|
|
new EntityPropertyChangeInfo |
|
|
|
{ |
|
|
|
PropertyTypeFullName = typeof(string).FullName, |
|
|
|
PropertyName = "Name", |
|
|
|
NewValue = "New value", |
|
|
|
OriginalValue = null |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
var log2 = new AuditLogInfo |
|
|
|
{ |
|
|
|
UserId = userId2, |
|
|
|
ImpersonatorUserId = Guid.NewGuid(), |
|
|
|
ImpersonatorTenantId = Guid.NewGuid(), |
|
|
|
ExecutionTime = DateTime.Today, |
|
|
|
ExecutionDuration = 42, |
|
|
|
ClientIpAddress = ipAddress, |
|
|
|
ClientName = "MyDesktop", |
|
|
|
BrowserInfo = "Chrome", |
|
|
|
Comments = new List<string> { firstComment, "Second Comment" }, |
|
|
|
HttpStatusCode = (int?)HttpStatusCode.BadGateway, |
|
|
|
EntityChanges = { |
|
|
|
new EntityChangeInfo |
|
|
|
{ |
|
|
|
EntityId = Guid.NewGuid().ToString(), |
|
|
|
EntityTypeFullName = "Volo.Abp.AuditLogging.TestEntity_Updated", |
|
|
|
ChangeType = EntityChangeType.Updated, |
|
|
|
ChangeTime = updatedEntityChangeTime, |
|
|
|
PropertyChanges = new List<EntityPropertyChangeInfo> |
|
|
|
{ |
|
|
|
new EntityPropertyChangeInfo |
|
|
|
{ |
|
|
|
PropertyTypeFullName = typeof(string).FullName, |
|
|
|
PropertyName = "Name", |
|
|
|
NewValue = "New value", |
|
|
|
OriginalValue = null |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
await AuditLogRepository.InsertAsync(new AuditLog(GuidGenerator, log1)); |
|
|
|
await AuditLogRepository.InsertAsync(new AuditLog(GuidGenerator, log2)); |
|
|
|
|
|
|
|
//Assert
|
|
|
|
var logs = await AuditLogRepository.GetEntityChangeListAsync(changeType: EntityChangeType.Created); |
|
|
|
logs.ShouldNotBeNull(); |
|
|
|
logs.Count.ShouldBe(1); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|