public void handles_audit_message_with_entities_and_properties()
        {
            //setup
            var currentEventCount = CountTotalAuditEvents();
            var currentEntityCount = CountTotalAuditEntities();
            var currentPropertyCount = CountTotalAuditEntityProperties();
            var subject = new AuditMessageHandler();
            subject.ObjectContextFactory = _mockobjectContextFactory.Object;
            subject.Log = _mockLog.Object;

            var auditEntity = CreateAuditEntity();
            auditEntity.AuditEntityProperties = new Collection<AuditEntityProperty>();

            var auditEntityProperty = CreateAuditEntityProperty();
            auditEntity.AuditEntityProperties.Add(auditEntityProperty);

            auditEntityProperty = CreateAuditEntityProperty();
            auditEntity.AuditEntityProperties.Add(auditEntityProperty);

            auditEntityProperty = CreateAuditEntityProperty();
            auditEntity.AuditEntityProperties.Add(auditEntityProperty);

            var auditEvent = CreateAuditEvent();
            auditEvent.AuditEntities = new Collection<AuditEntity>();
            auditEvent.AuditEntities.Add(auditEntity);

            auditEntity = CreateAuditEntity();
            auditEntity.AuditEntityProperties = new Collection<AuditEntityProperty>();

            auditEntityProperty = CreateAuditEntityProperty();
            auditEntity.AuditEntityProperties.Add(auditEntityProperty);

            auditEntityProperty = CreateAuditEntityProperty();
            auditEntity.AuditEntityProperties.Add(auditEntityProperty);

            auditEntityProperty = CreateAuditEntityProperty();
            auditEntity.AuditEntityProperties.Add(auditEntityProperty);

            auditEvent.AuditEntities.Add(auditEntity);

            var message = new Mock<IAuditMessage>();
            message.SetupProperty(m => m.AuditEvent, auditEvent);

            //act
            subject.Handle(message.Object);

            //assert
            Assert.AreEqual(currentEventCount + 1, CountTotalAuditEvents());
            Assert.AreEqual(currentEntityCount + 2, CountTotalAuditEntities());
            Assert.AreEqual(currentPropertyCount + 6, CountTotalAuditEntityProperties());
            _mockLog.VerifyNoFatalExceptionsLogged();
        }
        public void logs_exception_when_message_has_null_audit_event()
        {
            //setup
            var subject = new AuditMessageHandler();
            subject.ObjectContextFactory = _mockobjectContextFactory.Object;
            subject.Log = _mockLog.Object;
            var message = new Mock<IAuditMessage>();
            message.SetupProperty(m => m.AuditEvent, null);

            //act
            subject.Handle(message.Object);

            //assert
            _mockLog.VerifyFatalExceptionLogged();
        }
        public void handles_simple_audit_message()
        {
            //setup
            var currentCount = CountTotalAuditEvents();
            var subject = new AuditMessageHandler();
            subject.ObjectContextFactory = _mockobjectContextFactory.Object;
            subject.Log = _mockLog.Object;
            var auditEvent = CreateAuditEvent();
            var message = new Mock<IAuditMessage>();
            message.SetupProperty(m => m.AuditEvent, auditEvent);

            //act
            subject.Handle(message.Object);

            //assert
            _mockLog.VerifyNoFatalExceptionsLogged();
            Assert.AreEqual(currentCount + 1, CountTotalAuditEvents());
        }