Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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));
            }
        }
Ejemplo n.º 6
0
        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());
        }