201 lines
6.9 KiB
C#
201 lines
6.9 KiB
C#
using e_suite.Database.Audit.AuditEngine;
|
|
using e_suite.Database.Audit.UnitTests.Helpers;
|
|
using e_suite.Database.Audit.UnitTests.Helpers.Tables;
|
|
using NUnit.Framework;
|
|
|
|
namespace e_suite.Database.Audit.UnitTests.AuditEngineCore;
|
|
|
|
[TestFixture]
|
|
public class LastUpdatedUnitTests : AuditEngineCoreTestBase
|
|
{
|
|
[Test]
|
|
public async Task NewRow_WhenAdded_SetsLastUpdatedToNow()
|
|
{
|
|
//Arrange
|
|
var auditUserDetails = new AuditUserDetails
|
|
{
|
|
UserDisplayName = "Testy McTester",
|
|
Comment = string.Empty
|
|
};
|
|
|
|
var entry = new TableWithLastUpdated
|
|
{
|
|
Name = "TestName"
|
|
};
|
|
|
|
//Act
|
|
testDBContext.TableWithLastUpdateds.Add(entry);
|
|
await testDBContext.SaveChangesAsync(auditUserDetails);
|
|
|
|
//Assert
|
|
var editedItem = testDBContext.TableWithLastUpdateds.Single(x => x.Name == entry.Name);
|
|
|
|
Assert.That(editedItem.LastUpdated, Is.EqualTo(TestNow));
|
|
|
|
var auditDetail = testDBContext.AuditDetails.First();
|
|
Assert.That(auditDetail.UserDisplayName, Is.EqualTo(auditUserDetails.UserDisplayName));
|
|
Assert.That(auditDetail.UserId, Is.EqualTo(auditUserDetails.UserId));
|
|
Assert.That(auditDetail.Comment, Is.EqualTo(auditUserDetails.Comment));
|
|
Assert.That(auditDetail.DateTime, Is.EqualTo(TestNow));
|
|
Assert.That(auditDetail.Id, Is.EqualTo(1));
|
|
Assert.That(auditDetail.Type, Is.EqualTo(AuditType.Create.ToString()));
|
|
Assert.That(auditDetail.Fields, Is.EqualTo("{\"Deleted\":{\"NewValue\":false},\"Name\":{\"NewValue\":\"TestName\"}}"));
|
|
|
|
}
|
|
|
|
[Test]
|
|
public async Task ExistingRow_WhenUpdated_SetsLastUpdatedToNow()
|
|
{
|
|
//Arrange
|
|
var auditUserDetails = new AuditUserDetails
|
|
{
|
|
UserDisplayName = "Testy McTester",
|
|
Comment = string.Empty
|
|
};
|
|
|
|
var entry = new TableWithLastUpdated
|
|
{
|
|
Name = "TestName"
|
|
};
|
|
|
|
testDBContext.TableWithLastUpdateds.Add(entry);
|
|
await testDBContext.NoAuditSaveChangesAsync();
|
|
|
|
//Act
|
|
var itemToEdit = testDBContext.TableWithLastUpdateds.Single( x => x.Name == entry.Name);
|
|
itemToEdit.Name = "Updated";
|
|
|
|
await testDBContext.SaveChangesAsync(auditUserDetails);
|
|
|
|
//Assert
|
|
var editedItem = testDBContext.TableWithLastUpdateds.Single(x => x.Name == itemToEdit.Name);
|
|
|
|
Assert.That(editedItem.LastUpdated, Is.EqualTo(TestNow));
|
|
|
|
var auditDetail = testDBContext.AuditDetails.First();
|
|
Assert.That(auditDetail.UserDisplayName, Is.EqualTo(auditUserDetails.UserDisplayName));
|
|
Assert.That(auditDetail.UserId, Is.EqualTo(auditUserDetails.UserId));
|
|
Assert.That(auditDetail.Comment, Is.EqualTo(auditUserDetails.Comment));
|
|
Assert.That(auditDetail.DateTime, Is.EqualTo(TestNow));
|
|
Assert.That(auditDetail.Id, Is.EqualTo(1));
|
|
Assert.That(auditDetail.Type, Is.EqualTo(AuditType.Update.ToString()));
|
|
Assert.That(auditDetail.Fields, Is.EqualTo("{\"Name\":{\"OldValue\":\"TestName\",\"NewValue\":\"Updated\"}}"));
|
|
}
|
|
|
|
[Test]
|
|
public async Task ExistingRow_WhenSoftDeleted_SetsLastUpdatedToNow()
|
|
{
|
|
//Arrange
|
|
var auditUserDetails = new AuditUserDetails
|
|
{
|
|
UserDisplayName = "Testy McTester",
|
|
Comment = string.Empty
|
|
};
|
|
|
|
var entry = new TableWithLastUpdated
|
|
{
|
|
Name = "TestName"
|
|
};
|
|
|
|
testDBContext.TableWithLastUpdateds.Add(entry);
|
|
await testDBContext.NoAuditSaveChangesAsync();
|
|
|
|
//Act
|
|
var itemToEdit = testDBContext.TableWithLastUpdateds.Single(x => x.Name == entry.Name);
|
|
itemToEdit.Deleted = true;
|
|
|
|
await testDBContext.SaveChangesAsync(auditUserDetails);
|
|
|
|
//Assert
|
|
var editedItem = testDBContext.TableWithLastUpdateds.Single(x => x.Name == itemToEdit.Name);
|
|
|
|
Assert.That(editedItem.LastUpdated, Is.EqualTo(TestNow));
|
|
|
|
var auditDetail = testDBContext.AuditDetails.First();
|
|
Assert.That(auditDetail.UserDisplayName, Is.EqualTo(auditUserDetails.UserDisplayName));
|
|
Assert.That(auditDetail.UserId, Is.EqualTo(auditUserDetails.UserId));
|
|
Assert.That(auditDetail.Comment, Is.EqualTo(auditUserDetails.Comment));
|
|
Assert.That(auditDetail.DateTime, Is.EqualTo(TestNow));
|
|
Assert.That(auditDetail.Id, Is.EqualTo(1));
|
|
Assert.That(auditDetail.Type, Is.EqualTo(AuditType.Delete.ToString()));
|
|
Assert.That(auditDetail.Fields, Is.EqualTo(string.Empty));
|
|
}
|
|
|
|
[Test]
|
|
public async Task ExistingChildRow_WhenSoftDeleted_SetsParentLastUpdatedToNow()
|
|
{
|
|
//Arrange
|
|
var auditUserDetails = new AuditUserDetails
|
|
{
|
|
UserDisplayName = "Testy McTester",
|
|
Comment = string.Empty
|
|
};
|
|
|
|
var entry = new TableWithLastUpdated
|
|
{
|
|
Name = "TestName"
|
|
};
|
|
|
|
testDBContext.TableWithLastUpdateds.Add(entry);
|
|
|
|
var child = new ChildTableWithLastUpdated
|
|
{
|
|
ParentId = entry.Id,
|
|
Parent = entry,
|
|
Name = "Child row",
|
|
};
|
|
|
|
testDBContext.ChildTableWithLastUpdateds.Add(child);
|
|
|
|
await testDBContext.NoAuditSaveChangesAsync();
|
|
|
|
//Act
|
|
var itemToEdit = testDBContext.ChildTableWithLastUpdateds.Single(x => x.Name == child.Name);
|
|
itemToEdit.Deleted = true;
|
|
|
|
await testDBContext.SaveChangesAsync(auditUserDetails);
|
|
|
|
var editedItem = testDBContext.TableWithLastUpdateds.Single(x => x.Name == entry.Name);
|
|
|
|
Assert.That(editedItem.LastUpdated, Is.EqualTo(TestNow));
|
|
}
|
|
|
|
[Test]
|
|
public async Task ExistingChildRow_WhenPurged_SetsParentLastUpdatedToNow()
|
|
{
|
|
//Arrange
|
|
var auditUserDetails = new AuditUserDetails
|
|
{
|
|
UserDisplayName = "Testy McTester",
|
|
Comment = string.Empty
|
|
};
|
|
|
|
var entry = new TableWithLastUpdated
|
|
{
|
|
Name = "TestName"
|
|
};
|
|
|
|
testDBContext.TableWithLastUpdateds.Add(entry);
|
|
|
|
var child = new ChildTableWithLastUpdated
|
|
{
|
|
ParentId = entry.Id,
|
|
Parent = entry,
|
|
Name = "Child row",
|
|
};
|
|
|
|
testDBContext.ChildTableWithLastUpdateds.Add(child);
|
|
|
|
await testDBContext.NoAuditSaveChangesAsync();
|
|
|
|
//Act
|
|
var itemToEdit = testDBContext.ChildTableWithLastUpdateds.Single(x => x.Name == child.Name);
|
|
testDBContext.ChildTableWithLastUpdateds.Remove(itemToEdit);
|
|
|
|
await testDBContext.SaveChangesAsync(auditUserDetails);
|
|
|
|
var editedItem = testDBContext.TableWithLastUpdateds.Single(x => x.Name == entry.Name);
|
|
|
|
Assert.That(editedItem.LastUpdated, Is.EqualTo(TestNow));
|
|
}
|
|
} |