public void WithChanges_WhenChangesAreValid_SetsBeforeAndAfterJson() { var before = "before_changes"; var after = "after_changes"; AuditedOperationTypeEnum type = AuditedOperationTypeEnum.Update; var model = new ModelToAudit { Id = Guid.NewGuid().ToString() }; var mockChanges = new Mock <IChangeDetectionService>(); mockChanges .Setup(c => c.GetChangeType(It.IsAny <EntityEntry>())) .Returns(type); mockChanges .Setup(c => c.SerializeEntityChanges(It.IsAny <AuditedOperationTypeEnum>(), It.IsAny <EntityEntry>())) .Returns((before, after)); AuditService <FakeContext> auditService = GenerateAuditService(mockChanges.Object); AuditEntryModel entry = auditService.GenerateEntry <AuditEntryModel, ModelToAudit>(model); Assert.AreEqual(type, entry.Type); Assert.AreEqual(before, entry.EntityBeforeJson); Assert.AreEqual(after, entry.EntityAfterJson); }
public void GetChangeType_WhenModelMemberIsUpdated_ReturnsUpdate() { ChangeDetectionService cds = MakeService(); ModelToAudit model = GenerateModel(); model.Name = Guid.NewGuid().ToString(); Microsoft.EntityFrameworkCore.ChangeTracking.EntityEntry <ModelToAudit> entity = Context.Entry(model); AuditedOperationTypeEnum changeType = cds.GetChangeType(entity); Assert.AreEqual(AuditedOperationTypeEnum.Update, changeType); }
public void GetChangeType_WhenModelIsAttachedWithId_ReturnsUpdate() { ChangeDetectionService cds = MakeService(); ModelToAudit model = GenerateModel(false); Context.Attach(model); Microsoft.EntityFrameworkCore.ChangeTracking.EntityEntry <ModelToAudit> entity = Context.Entry(model); AuditedOperationTypeEnum changeType = cds.GetChangeType(entity); Assert.AreEqual(AuditedOperationTypeEnum.Update, changeType); }
public static (AuditedOperationTypeEnum type, string beforeJson, string afterJson) SerializeEntityChanges(this IChangeDetectionService service, EntityEntry entity) { if (service is null) { throw new ArgumentNullException(nameof(service)); } AuditedOperationTypeEnum type = service.GetChangeType(entity); (string before, string after) = service.SerializeEntityChanges(type, entity); return(type, before, after); }
public (string original, string updated) SerializeEntityChanges(AuditedOperationTypeEnum changeType, EntityEntry entity) { string jsonEntity; switch (changeType) { case AuditedOperationTypeEnum.Insert: jsonEntity = _changeSerializerService.Serialize(entity.Entity); return(null, jsonEntity); case AuditedOperationTypeEnum.Update: IEnumerable <ChangedMember> updatedMembers = GetUpdatedMembers(entity); return(SerializeEntityChanges(updatedMembers)); case AuditedOperationTypeEnum.Delete: jsonEntity = _changeSerializerService.Serialize(entity.Entity); return(jsonEntity, null); default: throw new ArgumentOutOfRangeException(nameof(changeType)); } }
public void Write_WhenAuditIsValid_WritesAuditToDatabase() { AuditedOperationTypeEnum type = AuditedOperationTypeEnum.Update; var model = new ModelToAudit(); var mockChanges = new Mock <IChangeDetectionService>(); mockChanges .Setup(c => c.GetChangeType(It.IsAny <EntityEntry>())) .Returns(type); mockChanges .Setup(c => c.SerializeEntityChanges(It.IsAny <AuditedOperationTypeEnum>(), It.IsAny <EntityEntry>())) .Returns((string.Empty, string.Empty)); AuditService <FakeContext> auditService = GenerateAuditService(mockChanges.Object); var fluent = auditService.GenerateEntry <AuditEntryModel, ModelToAudit>(model); Context.SaveChanges(); Assert.AreEqual(1, Context.AuditEntries.Count()); }