678 lines
28 KiB
C#
678 lines
28 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 AddRowUnitTests : AuditEngineCoreTestBase
|
|
{
|
|
[Test]
|
|
public async Task AddRow_WhenTableMarkedNoAudit_DoesNotCreateAuditEntry()
|
|
{
|
|
//Arrange
|
|
var auditUserDetails = new AuditUserDetails
|
|
{
|
|
UserId = 1,
|
|
UserDisplayName = "Testy McTester",
|
|
Comment = "If this gets inserted, something went wrong"
|
|
};
|
|
|
|
//Act
|
|
var generalComment = new GeneralComment
|
|
{
|
|
Comment = "This is a test"
|
|
};
|
|
|
|
testDBContext.GeneralComments.Add(generalComment);
|
|
await testDBContext.SaveChangesAsync(auditUserDetails);
|
|
|
|
//Assert
|
|
Assert.That(testDBContext.GeneralComments.Count(), Is.EqualTo(1));
|
|
Assert.That(testDBContext.AuditDetails.Count(), Is.EqualTo(0));
|
|
Assert.That(testDBContext.AuditEntries.Count(), Is.EqualTo(0));
|
|
Assert.That(testDBContext.AuditDrillHierarchies.Count(), Is.EqualTo(0));
|
|
}
|
|
|
|
[TestCase("")]
|
|
[TestCase("Test Comment")]
|
|
public async Task AddRow_WhenTableNotMarkedNoAudit_CreatesAuditEntry(string auditComment)
|
|
{
|
|
//Arrange
|
|
TestNow = new DateTimeOffset(2022, 06, 15, 18, 50, 52, 32, TimeSpan.Zero);
|
|
|
|
var auditUserDetails = new AuditUserDetails
|
|
{
|
|
UserId = 1,
|
|
UserDisplayName = "Testy McTester",
|
|
Comment = auditComment
|
|
};
|
|
|
|
var recordedComment = new RecordedComment
|
|
{
|
|
Id = 42,
|
|
Comment = "This is a test"
|
|
};
|
|
|
|
//Act
|
|
testDBContext.RecordedComments.Add(recordedComment);
|
|
await testDBContext.SaveChangesAsync(auditUserDetails);
|
|
|
|
//Assert
|
|
Assert.That(testDBContext.RecordedComments.Count(), Is.EqualTo(1));
|
|
|
|
Assert.That(testDBContext.AuditDetails.Count(), Is.EqualTo(1));
|
|
|
|
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( $"{{\"{nameof(recordedComment.Id)}\":{{\"NewValue\":{recordedComment.Id}}},\"{nameof(recordedComment.Comment)}\":{{\"NewValue\":\"{recordedComment.Comment}\"}}}}" ));
|
|
|
|
//Ensure that the AuditEntry is saved properly.
|
|
Assert.That(testDBContext.AuditEntries.Count(), Is.EqualTo(1));
|
|
var auditEntry = testDBContext.AuditEntries.First();
|
|
Assert.That(auditEntry.Id, Is.EqualTo(1));
|
|
Assert.That(auditEntry.EntityName, Is.EqualTo(typeof(RecordedComment).FullName));
|
|
Assert.That(auditEntry.DisplayName, Is.EqualTo(string.Empty));
|
|
Assert.That(auditEntry.AuditLogId, Is.EqualTo(auditDetail.Id));
|
|
Assert.That(auditEntry.PrimaryKey, Is.EqualTo("{\"Id\":42}"));
|
|
Assert.That(auditEntry.IsPrimary, Is.True);
|
|
|
|
Assert.That(testDBContext.AuditDrillHierarchies.Count(), Is.EqualTo(0));
|
|
}
|
|
|
|
[Test]
|
|
public async Task AddRow_SaveChangesNoAuditCalled_AuditingBypassedCompletely()
|
|
{
|
|
//Arrange
|
|
//Act
|
|
var recordedComment = new RecordedComment
|
|
{
|
|
Comment = "This is a test"
|
|
};
|
|
|
|
testDBContext.RecordedComments.Add(recordedComment);
|
|
await testDBContext.NoAuditSaveChangesAsync();
|
|
|
|
//Assert
|
|
Assert.That(testDBContext.RecordedComments.Count(), Is.EqualTo(1));
|
|
|
|
Assert.That(testDBContext.AuditDetails.Count(), Is.EqualTo(0));
|
|
Assert.That(testDBContext.AuditEntries.Count(), Is.EqualTo(0));
|
|
Assert.That(testDBContext.AuditDrillHierarchies.Count(), Is.EqualTo(0));
|
|
}
|
|
|
|
[TestCase("")]
|
|
[TestCase("Test Comment")]
|
|
public async Task AddRow_WhenFieldHasAuditName_DisplayNameFilledIn(string auditComment)
|
|
{
|
|
//Arrange
|
|
var auditUserDetails = new AuditUserDetails
|
|
{
|
|
UserId = 1,
|
|
UserDisplayName = "Testy McTester",
|
|
Comment = auditComment
|
|
};
|
|
|
|
//Act
|
|
var entryWithName = new EntryWithName
|
|
{
|
|
Name = "TestName"
|
|
};
|
|
|
|
testDBContext.EntriesWithName.Add(entryWithName);
|
|
await testDBContext.SaveChangesAsync(auditUserDetails);
|
|
|
|
//Assert
|
|
Assert.That(testDBContext.AuditEntries.Count(), Is.EqualTo(1));
|
|
var auditEntry = testDBContext.AuditEntries.First();
|
|
Assert.That(auditEntry.DisplayName, Is.EqualTo(entryWithName.Name));
|
|
}
|
|
|
|
[TestCase("")]
|
|
[TestCase("Test Comment")]
|
|
public async Task AddRow_WhenFieldHasRedactAudit_FieldValueRedacted(string auditComment)
|
|
{
|
|
//Arrange
|
|
var auditUserDetails = new AuditUserDetails
|
|
{
|
|
UserId = 1,
|
|
UserDisplayName = "Testy McTester",
|
|
Comment = auditComment
|
|
};
|
|
|
|
//Act
|
|
var secretValue = new SecretValue
|
|
{
|
|
Id = 10,
|
|
Name = "TestName",
|
|
Secret = "I'm not telling you"
|
|
};
|
|
|
|
testDBContext.SecretValues.Add(secretValue);
|
|
await testDBContext.SaveChangesAsync(auditUserDetails);
|
|
|
|
//Assert
|
|
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.Id, Is.EqualTo(1));
|
|
Assert.That(auditDetail.Type, Is.EqualTo(AuditType.Create.ToString()));
|
|
Assert.That(auditDetail.Fields, Is.EqualTo($"{{\"{nameof(SecretValue.Id)}\":{{\"NewValue\":{secretValue.Id}}},\"{nameof(secretValue.Name)}\":{{\"NewValue\":\"{secretValue.Name}\"}},\"{nameof(secretValue.Secret)}\":{{\"NewValue\":\"<Redacted>\"}}}}"));
|
|
}
|
|
|
|
[TestCase("")]
|
|
[TestCase("Test Comment")]
|
|
public async Task AddRow_WhenKeyFieldNotAssigned_FieldNotIncludedInAuditRecord(string auditComment)
|
|
{
|
|
//Arrange
|
|
var auditUserDetails = new AuditUserDetails
|
|
{
|
|
UserId = 1,
|
|
UserDisplayName = "Testy McTester",
|
|
Comment = auditComment
|
|
};
|
|
|
|
//Act
|
|
var secretValue = new SecretValue
|
|
{
|
|
Name = "TestName",
|
|
Secret = "I'm not telling you"
|
|
};
|
|
|
|
testDBContext.SecretValues.Add(secretValue);
|
|
await testDBContext.SaveChangesAsync(auditUserDetails);
|
|
|
|
//Assert
|
|
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.Id, Is.EqualTo(1));
|
|
Assert.That(auditDetail.Type, Is.EqualTo(AuditType.Create.ToString()));
|
|
Assert.That(auditDetail.Fields, Is.EqualTo($"{{\"{nameof(secretValue.Name)}\":{{\"NewValue\":\"{secretValue.Name}\"}},\"{nameof(secretValue.Secret)}\":{{\"NewValue\":\"<Redacted>\"}}}}"));
|
|
}
|
|
|
|
[TestCase("")]
|
|
[TestCase("Test Comment")]
|
|
public async Task AddRow_WhenFieldHasAuditParentWithNullId_OnlyPrimaryAuditEntrySaved(string auditComment)
|
|
{
|
|
//Arrange
|
|
var auditUserDetails = new AuditUserDetails
|
|
{
|
|
UserId = 1,
|
|
UserDisplayName = "Testy McTester",
|
|
Comment = auditComment
|
|
};
|
|
|
|
//Act
|
|
var childValue = new ChildValue
|
|
{
|
|
Name = "TestName",
|
|
ParentId = null
|
|
};
|
|
|
|
testDBContext.ChildValues.Add(childValue);
|
|
|
|
await testDBContext.SaveChangesAsync(auditUserDetails);
|
|
|
|
//Assert
|
|
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.Id, Is.EqualTo(1));
|
|
Assert.That(auditDetail.Type, Is.EqualTo(AuditType.Create.ToString()));
|
|
|
|
Assert.That(testDBContext.AuditEntries.Count(), Is.EqualTo(1));
|
|
|
|
var auditEntries = testDBContext.AuditEntries.ToList();
|
|
var childAuditEntry = auditEntries[0];
|
|
Assert.That(childAuditEntry.Id, Is.EqualTo(1));
|
|
Assert.That(childAuditEntry.EntityName, Is.EqualTo(typeof(ChildValue).FullName));
|
|
Assert.That(childAuditEntry.DisplayName, Is.EqualTo(childValue.Name));
|
|
Assert.That(childAuditEntry.AuditLogId, Is.EqualTo(auditDetail.Id));
|
|
Assert.That(childAuditEntry.PrimaryKey, Is.EqualTo($"{{\"Id\":{childValue.Id}}}"));
|
|
Assert.That(childAuditEntry.IsPrimary, Is.True);
|
|
|
|
Assert.That(testDBContext.AuditDrillHierarchies.Count(), Is.EqualTo(0));
|
|
}
|
|
|
|
[TestCase("")]
|
|
[TestCase("Test Comment")]
|
|
public async Task AddRow_ChildValueHasParent_BothParentAndChildKeysAreRecorded(string auditComment)
|
|
{
|
|
//Arrange
|
|
var auditUserDetails = new AuditUserDetails
|
|
{
|
|
UserId = 1,
|
|
UserDisplayName = "Testy McTester",
|
|
Comment = auditComment
|
|
};
|
|
|
|
var parentValue = new ParentValue
|
|
{
|
|
Id = 100,
|
|
Name = "Parent Entry"
|
|
};
|
|
|
|
testDBContext.ParentValues.Add(parentValue);
|
|
await testDBContext.NoAuditSaveChangesAsync();
|
|
|
|
//Act
|
|
var childValue = new ChildValue
|
|
{
|
|
Id = 1000,
|
|
Name = "TestName",
|
|
ParentId = parentValue.Id
|
|
};
|
|
|
|
testDBContext.ChildValues.Add(childValue);
|
|
await testDBContext.SaveChangesAsync(auditUserDetails);
|
|
|
|
//Assert
|
|
Assert.That(testDBContext.AuditDetails.Count(), Is.EqualTo(1));
|
|
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.Id, Is.EqualTo(1));
|
|
Assert.That(auditDetail.Type, Is.EqualTo(AuditType.Create.ToString()));
|
|
|
|
Assert.That(testDBContext.AuditEntries.Count(), Is.EqualTo(2));
|
|
|
|
var auditEntries = testDBContext.AuditEntries.ToList();
|
|
var childAuditEntry = auditEntries[0];
|
|
Assert.That(childAuditEntry.Id, Is.EqualTo(1));
|
|
Assert.That(childAuditEntry.EntityName, Is.EqualTo(typeof(ChildValue).FullName));
|
|
Assert.That(childAuditEntry.DisplayName, Is.EqualTo(childValue.Name));
|
|
Assert.That(childAuditEntry.AuditLogId, Is.EqualTo(auditDetail.Id));
|
|
Assert.That(childAuditEntry.PrimaryKey, Is.EqualTo($"{{\"Id\":{childValue.Id}}}"));
|
|
Assert.That(childAuditEntry.IsPrimary, Is.True);
|
|
|
|
var parentAuditEntry = auditEntries[1];
|
|
Assert.That(parentAuditEntry.Id, Is.EqualTo(2));
|
|
Assert.That(parentAuditEntry.EntityName, Is.EqualTo(typeof(ParentValue).FullName));
|
|
Assert.That(parentAuditEntry.DisplayName, Is.EqualTo(parentValue.Name));
|
|
Assert.That(parentAuditEntry.AuditLogId, Is.EqualTo(auditDetail.Id));
|
|
Assert.That(parentAuditEntry.PrimaryKey, Is.EqualTo($"{{\"Id\":{parentValue.Id}}}"));
|
|
Assert.That(parentAuditEntry.IsPrimary, Is.False);
|
|
|
|
Assert.That(testDBContext.AuditDrillHierarchies.Count(), Is.EqualTo(1));
|
|
var auditDrillHierarchies = testDBContext.AuditDrillHierarchies.ToList();
|
|
Assert.That(auditDrillHierarchies[0].ChildAuditDrillDownEntityId, Is.EqualTo(1));
|
|
Assert.That(auditDrillHierarchies[0].ParentAuditDrillDownEntityId, Is.EqualTo(2));
|
|
}
|
|
|
|
[TestCase("")]
|
|
[TestCase("Test Comment")]
|
|
public async Task AddRow_WhenFieldHasAuditParentWithId_OnlyPrimaryAndParentIdsEntered(string auditComment)
|
|
{
|
|
//Arrange
|
|
var auditUserDetails = new AuditUserDetails
|
|
{
|
|
UserId = 1,
|
|
UserDisplayName = "Testy McTester",
|
|
Comment = auditComment
|
|
};
|
|
|
|
var grandParentValue = new GrandParentValue
|
|
{
|
|
Id = 10000,
|
|
Name = "GrandParent Entry"
|
|
};
|
|
|
|
var parentValue = new ParentValue
|
|
{
|
|
Id = 100,
|
|
Name = "Parent Entry",
|
|
GrandParentId = grandParentValue.Id
|
|
};
|
|
|
|
testDBContext.GrandParentValues.Add(grandParentValue);
|
|
testDBContext.ParentValues.Add(parentValue);
|
|
await testDBContext.NoAuditSaveChangesAsync();
|
|
|
|
//Act
|
|
var childValue = new ChildValue
|
|
{
|
|
Id = 1000,
|
|
Name = "TestName",
|
|
ParentId = parentValue.Id
|
|
};
|
|
|
|
testDBContext.ChildValues.Add(childValue);
|
|
await testDBContext.SaveChangesAsync(auditUserDetails);
|
|
|
|
//Assert
|
|
Assert.That(testDBContext.AuditDetails.Count(), Is.EqualTo(1));
|
|
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.Id, Is.EqualTo(1));
|
|
Assert.That(auditDetail.Type, Is.EqualTo(AuditType.Create.ToString()));
|
|
|
|
Assert.That(testDBContext.AuditEntries.Count(), Is.EqualTo(3));
|
|
|
|
var auditEntries = testDBContext.AuditEntries.ToList();
|
|
var childAuditEntry = auditEntries[0];
|
|
Assert.That(childAuditEntry.Id, Is.EqualTo(1));
|
|
Assert.That(childAuditEntry.EntityName, Is.EqualTo(typeof(ChildValue).FullName));
|
|
Assert.That(childAuditEntry.DisplayName, Is.EqualTo(childValue.Name));
|
|
Assert.That(childAuditEntry.AuditLogId, Is.EqualTo(auditDetail.Id));
|
|
Assert.That(childAuditEntry.PrimaryKey, Is.EqualTo($"{{\"Id\":{childValue.Id}}}"));
|
|
Assert.That(childAuditEntry.IsPrimary, Is.True);
|
|
|
|
var parentAuditEntry = auditEntries[1];
|
|
Assert.That(parentAuditEntry.Id, Is.EqualTo(2));
|
|
Assert.That(parentAuditEntry.EntityName, Is.EqualTo(typeof(ParentValue).FullName));
|
|
Assert.That(parentAuditEntry.DisplayName, Is.EqualTo(parentValue.Name));
|
|
Assert.That(parentAuditEntry.AuditLogId, Is.EqualTo(auditDetail.Id));
|
|
Assert.That(parentAuditEntry.PrimaryKey, Is.EqualTo($"{{\"Id\":{parentValue.Id}}}"));
|
|
Assert.That(parentAuditEntry.IsPrimary, Is.False);
|
|
|
|
var grandParentAuditEntry = auditEntries[2];
|
|
Assert.That(grandParentAuditEntry.Id, Is.EqualTo(3));
|
|
Assert.That(grandParentAuditEntry.EntityName, Is.EqualTo(typeof(GrandParentValue).FullName));
|
|
Assert.That(grandParentAuditEntry.DisplayName, Is.EqualTo(grandParentValue.Name));
|
|
Assert.That(grandParentAuditEntry.AuditLogId, Is.EqualTo(auditDetail.Id));
|
|
Assert.That(grandParentAuditEntry.PrimaryKey, Is.EqualTo($"{{\"Id\":{grandParentValue.Id}}}"));
|
|
Assert.That(grandParentAuditEntry.IsPrimary, Is.False);
|
|
|
|
Assert.That(testDBContext.AuditDrillHierarchies.Count(), Is.EqualTo(2));
|
|
var auditDrillHierarchies = testDBContext.AuditDrillHierarchies.ToList();
|
|
Assert.That(auditDrillHierarchies[0].ChildAuditDrillDownEntityId, Is.EqualTo(1));
|
|
Assert.That(auditDrillHierarchies[0].ParentAuditDrillDownEntityId, Is.EqualTo(2));
|
|
|
|
Assert.That(auditDrillHierarchies[1].ChildAuditDrillDownEntityId, Is.EqualTo(2));
|
|
Assert.That(auditDrillHierarchies[1].ParentAuditDrillDownEntityId, Is.EqualTo(3));
|
|
}
|
|
|
|
|
|
[TestCase("")]
|
|
[TestCase("Test Comment")]
|
|
public async Task AddRow_TableHasSelfReferenceAndReferenceNull_OnlyPrimaryAndParentIdsEntered(string auditComment)
|
|
{
|
|
//Arrange
|
|
var auditUserDetails = new AuditUserDetails
|
|
{
|
|
UserId = 1,
|
|
UserDisplayName = "Testy McTester",
|
|
Comment = auditComment
|
|
};
|
|
|
|
//Act
|
|
var leafSimpleTreeValue = new SimpleTreeValue
|
|
{
|
|
Id = 30000,
|
|
Name = "Leaf Level item",
|
|
ParentId = null
|
|
};
|
|
|
|
testDBContext.SimpleTreeValues.Add(leafSimpleTreeValue);
|
|
await testDBContext.SaveChangesAsync(auditUserDetails);
|
|
|
|
//Assert
|
|
Assert.That(testDBContext.SimpleTreeValues.Count(), Is.EqualTo(1));
|
|
|
|
Assert.That(testDBContext.AuditDetails.Count(), Is.EqualTo(1));
|
|
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.Id, Is.EqualTo(1));
|
|
Assert.That(auditDetail.Type, Is.EqualTo(AuditType.Create.ToString()));
|
|
|
|
Assert.That(testDBContext.AuditEntries.Count(), Is.EqualTo(1));
|
|
|
|
var auditEntries = testDBContext.AuditEntries.ToList();
|
|
var childAuditEntry = auditEntries[0];
|
|
Assert.That(childAuditEntry.Id, Is.EqualTo(1));
|
|
Assert.That(childAuditEntry.EntityName, Is.EqualTo(typeof(SimpleTreeValue).FullName));
|
|
Assert.That(childAuditEntry.DisplayName, Is.EqualTo(leafSimpleTreeValue.Name));
|
|
Assert.That(childAuditEntry.AuditLogId, Is.EqualTo(auditDetail.Id));
|
|
Assert.That(childAuditEntry.PrimaryKey, Is.EqualTo($"{{\"Id\":{leafSimpleTreeValue.Id}}}"));
|
|
Assert.That(childAuditEntry.IsPrimary, Is.True);
|
|
|
|
Assert.That(testDBContext.AuditDrillHierarchies.Count(), Is.EqualTo(0));
|
|
}
|
|
|
|
[TestCase("")]
|
|
[TestCase("Test Comment")]
|
|
public async Task AddRow_TableHasSelfReferenceWithSingleAncestor_BothValuesAreRecorded(string auditComment)
|
|
{
|
|
//Arrange
|
|
var auditUserDetails = new AuditUserDetails
|
|
{
|
|
UserId = 1,
|
|
UserDisplayName = "Testy McTester",
|
|
Comment = auditComment
|
|
};
|
|
|
|
var rootSimpleTreeValue = new SimpleTreeValue
|
|
{
|
|
Id = 3000,
|
|
Name = "Leaf Level item",
|
|
ParentId = null
|
|
};
|
|
|
|
testDBContext.SimpleTreeValues.Add(rootSimpleTreeValue);
|
|
await testDBContext.NoAuditSaveChangesAsync();
|
|
|
|
//Act
|
|
var leafSimpleTreeValue = new SimpleTreeValue
|
|
{
|
|
Id = 30000,
|
|
Name = "Leaf Level item",
|
|
ParentId = rootSimpleTreeValue.Id
|
|
};
|
|
|
|
testDBContext.SimpleTreeValues.Add(leafSimpleTreeValue);
|
|
await testDBContext.SaveChangesAsync(auditUserDetails);
|
|
|
|
//Assert
|
|
Assert.That(testDBContext.SimpleTreeValues.Count(), Is.EqualTo(2));
|
|
|
|
Assert.That(testDBContext.AuditDetails.Count(), Is.EqualTo(1));
|
|
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.Id, Is.EqualTo(1));
|
|
Assert.That(auditDetail.Type, Is.EqualTo(AuditType.Create.ToString()));
|
|
|
|
Assert.That(testDBContext.AuditEntries.Count(), Is.EqualTo(2));
|
|
|
|
var auditEntries = testDBContext.AuditEntries.ToList();
|
|
var childAuditEntry = auditEntries[0];
|
|
Assert.That(childAuditEntry.Id, Is.EqualTo(1));
|
|
Assert.That(childAuditEntry.EntityName, Is.EqualTo(typeof(SimpleTreeValue).FullName));
|
|
Assert.That(childAuditEntry.DisplayName, Is.EqualTo(leafSimpleTreeValue.Name));
|
|
Assert.That(childAuditEntry.AuditLogId, Is.EqualTo(auditDetail.Id));
|
|
Assert.That(childAuditEntry.PrimaryKey, Is.EqualTo($"{{\"Id\":{leafSimpleTreeValue.Id}}}"));
|
|
Assert.That(childAuditEntry.IsPrimary, Is.True);
|
|
|
|
var parentAuditEntry = auditEntries[1];
|
|
Assert.That(parentAuditEntry.Id, Is.EqualTo(2));
|
|
Assert.That(parentAuditEntry.EntityName, Is.EqualTo(typeof(SimpleTreeValue).FullName));
|
|
Assert.That(parentAuditEntry.DisplayName, Is.EqualTo(rootSimpleTreeValue.Name));
|
|
Assert.That(parentAuditEntry.AuditLogId, Is.EqualTo(auditDetail.Id));
|
|
Assert.That(parentAuditEntry.PrimaryKey, Is.EqualTo($"{{\"Id\":{rootSimpleTreeValue.Id}}}"));
|
|
Assert.That(parentAuditEntry.IsPrimary, Is.False);
|
|
|
|
Assert.That(testDBContext.AuditDrillHierarchies.Count(), Is.EqualTo(1));
|
|
var auditDrillHierarchies = testDBContext.AuditDrillHierarchies.ToList();
|
|
Assert.That(auditDrillHierarchies[0].ChildAuditDrillDownEntityId, Is.EqualTo(1));
|
|
Assert.That(auditDrillHierarchies[0].ParentAuditDrillDownEntityId, Is.EqualTo(2));
|
|
}
|
|
|
|
[TestCase("")]
|
|
[TestCase("Test Comment")]
|
|
public async Task AddRow_TableHasSelfReferenceWithTwoAncestors_BothValuesAreRecorded(string auditComment)
|
|
{
|
|
//Arrange
|
|
var auditUserDetails = new AuditUserDetails
|
|
{
|
|
UserId = 1,
|
|
UserDisplayName = "Testy McTester",
|
|
Comment = auditComment
|
|
};
|
|
|
|
var rootSimpleTreeValue = new SimpleTreeValue
|
|
{
|
|
Id = 300,
|
|
Name = "Leaf Level item",
|
|
ParentId = null
|
|
};
|
|
|
|
|
|
var level1SimpleTreeValue = new SimpleTreeValue
|
|
{
|
|
Id = 3000,
|
|
Name = "Level 1 item",
|
|
ParentId = rootSimpleTreeValue.Id
|
|
};
|
|
|
|
testDBContext.SimpleTreeValues.Add(rootSimpleTreeValue);
|
|
testDBContext.SimpleTreeValues.Add(level1SimpleTreeValue);
|
|
await testDBContext.NoAuditSaveChangesAsync();
|
|
|
|
//Act
|
|
var leafSimpleTreeValue = new SimpleTreeValue
|
|
{
|
|
Id = 30000,
|
|
Name = "Leaf Level item",
|
|
ParentId = level1SimpleTreeValue.Id
|
|
};
|
|
|
|
testDBContext.SimpleTreeValues.Add(leafSimpleTreeValue);
|
|
await testDBContext.SaveChangesAsync(auditUserDetails);
|
|
|
|
//Assert
|
|
Assert.That(testDBContext.SimpleTreeValues.Count(), Is.EqualTo(3));
|
|
|
|
Assert.That(testDBContext.AuditDetails.Count(), Is.EqualTo(1));
|
|
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.Id, Is.EqualTo(1));
|
|
Assert.That(auditDetail.Type, Is.EqualTo(AuditType.Create.ToString()));
|
|
|
|
Assert.That(testDBContext.AuditEntries.Count(), Is.EqualTo(3));
|
|
|
|
var auditEntries = testDBContext.AuditEntries.ToList();
|
|
var childAuditEntry = auditEntries[0];
|
|
Assert.That(childAuditEntry.Id, Is.EqualTo(1));
|
|
Assert.That(childAuditEntry.EntityName, Is.EqualTo(typeof(SimpleTreeValue).FullName));
|
|
Assert.That(childAuditEntry.DisplayName, Is.EqualTo(leafSimpleTreeValue.Name));
|
|
Assert.That(childAuditEntry.AuditLogId, Is.EqualTo(auditDetail.Id));
|
|
Assert.That(childAuditEntry.PrimaryKey, Is.EqualTo($"{{\"Id\":{leafSimpleTreeValue.Id}}}"));
|
|
Assert.That(childAuditEntry.IsPrimary, Is.True);
|
|
|
|
var parentAuditEntry = auditEntries[1];
|
|
Assert.That(parentAuditEntry.Id, Is.EqualTo(2));
|
|
Assert.That(parentAuditEntry.EntityName, Is.EqualTo(typeof(SimpleTreeValue).FullName));
|
|
Assert.That(parentAuditEntry.DisplayName, Is.EqualTo(level1SimpleTreeValue.Name));
|
|
Assert.That(parentAuditEntry.AuditLogId, Is.EqualTo(auditDetail.Id));
|
|
Assert.That(parentAuditEntry.PrimaryKey, Is.EqualTo($"{{\"Id\":{level1SimpleTreeValue.Id}}}"));
|
|
Assert.That(parentAuditEntry.IsPrimary, Is.False);
|
|
|
|
var grandParentAuditEntry = auditEntries[2];
|
|
Assert.That(grandParentAuditEntry.Id, Is.EqualTo(3));
|
|
Assert.That(grandParentAuditEntry.EntityName, Is.EqualTo(typeof(SimpleTreeValue).FullName));
|
|
Assert.That(grandParentAuditEntry.DisplayName, Is.EqualTo(rootSimpleTreeValue.Name));
|
|
Assert.That(grandParentAuditEntry.AuditLogId, Is.EqualTo(auditDetail.Id));
|
|
Assert.That(grandParentAuditEntry.PrimaryKey, Is.EqualTo($"{{\"Id\":{rootSimpleTreeValue.Id}}}"));
|
|
Assert.That(grandParentAuditEntry.IsPrimary, Is.False);
|
|
|
|
Assert.That(testDBContext.AuditDrillHierarchies.Count(), Is.EqualTo(2));
|
|
var auditDrillHierarchies = testDBContext.AuditDrillHierarchies.ToList();
|
|
Assert.That(auditDrillHierarchies[0].ChildAuditDrillDownEntityId, Is.EqualTo(1));
|
|
Assert.That(auditDrillHierarchies[0].ParentAuditDrillDownEntityId, Is.EqualTo(2));
|
|
|
|
Assert.That(auditDrillHierarchies[1].ChildAuditDrillDownEntityId, Is.EqualTo(2));
|
|
Assert.That(auditDrillHierarchies[1].ParentAuditDrillDownEntityId, Is.EqualTo(3));
|
|
}
|
|
|
|
[TestCase("")]
|
|
public async Task AddRow_RowContainsEnum_EnumValueAuditedProperly(string auditComment)
|
|
{
|
|
//Arrange
|
|
TestNow = new DateTimeOffset(2022, 06, 15, 18, 50, 52, 32, TimeSpan.Zero);
|
|
|
|
var auditUserDetails = new AuditUserDetails
|
|
{
|
|
UserId = 1,
|
|
UserDisplayName = "Testy McTester",
|
|
Comment = auditComment
|
|
};
|
|
|
|
var recordedComment = new TableWithEnums
|
|
{
|
|
Id = 1,
|
|
RawEnum = TestEnum.Item1
|
|
};
|
|
|
|
//Act
|
|
testDBContext.TableWithEnums.Add(recordedComment);
|
|
await testDBContext.SaveChangesAsync(auditUserDetails);
|
|
|
|
//Assert
|
|
Assert.That(testDBContext.TableWithEnums.Count(), Is.EqualTo(1));
|
|
|
|
Assert.That(testDBContext.AuditDetails.Count(), Is.EqualTo(1));
|
|
|
|
var auditDetail = testDBContext.AuditDetails.First();
|
|
Assert.That(auditDetail.Id, Is.EqualTo(1));
|
|
Assert.That(auditDetail.Fields, Is.EqualTo($"{{\"{nameof(recordedComment.Id)}\":{{\"NewValue\":{recordedComment.Id}}},\"{nameof(recordedComment.RawEnum)}\":{{\"NewValue\":0,\"NewDisplayName\":\"Item1\"}}}}"));
|
|
}
|
|
|
|
[TestCase("")]
|
|
public async Task AddRow_RowContainsEnumWithDisplayValue_EnumValueAuditedProperly(string auditComment)
|
|
{
|
|
//Arrange
|
|
TestNow = new DateTimeOffset(2022, 06, 15, 18, 50, 52, 32, TimeSpan.Zero);
|
|
|
|
var auditUserDetails = new AuditUserDetails
|
|
{
|
|
UserId = 1,
|
|
UserDisplayName = "Testy McTester",
|
|
Comment = auditComment
|
|
};
|
|
|
|
var recordedComment = new TableWithDisplayEnums
|
|
{
|
|
Id = 1
|
|
};
|
|
|
|
//Act
|
|
testDBContext.TableWithDisplayEnums.Add(recordedComment);
|
|
await testDBContext.SaveChangesAsync(auditUserDetails);
|
|
|
|
//Assert
|
|
Assert.That(testDBContext.TableWithDisplayEnums.Count(), Is.EqualTo(1));
|
|
|
|
Assert.That(testDBContext.AuditDetails.Count(), Is.EqualTo(1));
|
|
|
|
var auditDetail = testDBContext.AuditDetails.First();
|
|
Assert.That(auditDetail.Id, Is.EqualTo(1));
|
|
|
|
Assert.That(auditDetail.Fields, Is.EqualTo($"{{\"{nameof(recordedComment.Id)}\":{{\"NewValue\":{recordedComment.Id}}},\"{nameof(recordedComment.DisplayEnum)}\":{{\"NewValue\":0,\"NewDisplayName\":\"Item 1\"}}}}"));
|
|
}
|
|
} |