public void publishes_delete_audit()
        {
            var context = CreateUserContext();
            var mockPublisher = new Mock<IAuditEventPublisher>();
            var id = AddGenderAndReturnId();

            //act
            using (var subject = new TestAuditableContext(GetEFConnectionString(), context, mockPublisher.Object, _defaultMockConfiguration.Object))
            {
                var currentEntity = subject.Genders.Single(g => g.Id == id);
                subject.DeleteObject(currentEntity);
                subject.SaveChanges();
            }

            //assert
            mockPublisher.Verify
                (
                m => m.Publish
                    (
                        It.Is<AuditEvent>
                        (
                            auditEvent =>
                            EventMatchesContext(auditEvent, context)
                            &&
                            auditEvent.AuditEntities.Count() == 1
                            &&
                            auditEvent.AuditEntities[0].AuditEntityAction == AuditEntityAction.Delete
                        )
                    ),
                    Times.Once()
                );
        }
        public void works_without_auditing()
        {
            int id;
            Exception noException = null;

            try
            {
                using (var subject = new TestAuditableContext(GetEFConnectionString()))
                {
                    var entity = new Gender { Name = Guid.NewGuid().ToString() };
                    subject.Genders.AddObject(entity);
                    subject.SaveChanges();
                    id = entity.Id;
                }

                Gender toUpdate;
                using (var subject = new TestAuditableContext(GetEFConnectionString()))
                {
                    toUpdate = subject.Genders.Single(g => g.Id == id);
                }
                toUpdate.Name = Guid.NewGuid().ToString();

                using (var subject = new TestAuditableContext(GetEFConnectionString()))
                {
                    var currentEntity = subject.Genders.Single(g => g.Id == id);
                    subject.Genders.ApplyCurrentValues(toUpdate);
                    subject.SaveChanges();
                }

                using (var subject = new TestAuditableContext(GetEFConnectionString()))
                {
                    var currentEntity = subject.Genders.Single(g => g.Id == id);
                    subject.DeleteObject(currentEntity);
                    subject.SaveChanges();
                }
            }
            catch (Exception ex)
            {
                noException = ex;
            }

            Assert.IsNull(noException);
        }
        public void honors_false_configuration_on_delete()
        {
            var context = CreateUserContext();
            var mockPublisher = new Mock<IAuditEventPublisher>();
            var mockConfig = new Mock<IAuditConfiguration>();
            mockConfig.Setup(m => m.ContainsEntityType(typeof(Gender))).Returns(false);

            var id = AddGenderAndReturnId();

            //act
            using (var subject = new TestAuditableContext(GetEFConnectionString(), context, mockPublisher.Object, mockConfig.Object))
            {
                var currentEntity = subject.Genders.Single(g => g.Id == id);
                subject.DeleteObject(currentEntity);
                subject.SaveChanges();
            }

            //assert
            mockPublisher.Verify(m => m.Publish(It.IsAny<AuditEvent>()), Times.Never());
        }