public void Test_DbCommandInterceptor_IgnoreParams()
        {
            var inserted = new List <AuditEventCommandEntityFramework>();

            Audit.Core.Configuration.Setup()
            .UseDynamicProvider(_ => _
                                .OnInsert(ev => inserted.Add(AuditEvent.FromJson <AuditEventCommandEntityFramework>(ev.ToJson()))))
            .WithCreationPolicy(EventCreationPolicy.InsertOnEnd);

            Audit.EntityFramework.Configuration.Setup()
            .ForContext <DbCommandInterceptContext>(_ => _
                                                    .IncludeEntityObjects(true));

            using (var ctx = new DbCommandInterceptContext(new DbContextOptionsBuilder().Options))
            {
                ctx.Database.EnsureCreated();
            }
            var interceptor = new AuditCommandInterceptor()
            {
                LogParameterValues = false
            };

            using (var ctx = new DbCommandInterceptContext(new DbContextOptionsBuilder().AddInterceptors(interceptor).Options))
            {
                //NonQueryExecuting
                var result = ctx.Database.ExecuteSqlRaw("SELECT {0}", "test");
            }

            Assert.AreEqual(1, inserted.Count);
            Assert.IsNull(inserted[0].CommandEvent.Parameters);
        }
        public void Test_DbCommandInterceptor_HappyPath()
        {
            var inserted = new List <AuditEventCommandEntityFramework>();
            var replaced = new List <AuditEventCommandEntityFramework>();

            Audit.Core.Configuration.Setup()
            .UseDynamicProvider(_ => _
                                .OnInsert(ev => inserted.Add(AuditEvent.FromJson <AuditEventCommandEntityFramework>(ev.ToJson())))
                                .OnReplace((eventId, ev) => replaced.Add(AuditEvent.FromJson <AuditEventCommandEntityFramework>(ev.ToJson()))))
            .WithCreationPolicy(EventCreationPolicy.InsertOnEnd);

            Audit.EntityFramework.Configuration.Setup()
            .ForContext <DbCommandInterceptContext>(_ => _
                                                    .IncludeEntityObjects(true));

            using (var ctx = new DbCommandInterceptContext(new DbContextOptionsBuilder().Options))
            {
                // not intercepted
                ctx.Database.EnsureDeleted();
                ctx.Database.EnsureCreated();
            }
            var interceptor = new AuditCommandInterceptor()
            {
                AuditEventType = "{database}:{method}"
            };
            int id = new Random().Next();

            using (var ctx = new DbCommandInterceptContext(new DbContextOptionsBuilder().AddInterceptors(interceptor).Options))
            {
                //ReaderExecuting
                var depts = ctx.Departments.Where(d => d.Comments != null).FirstOrDefault();

                //NonQueryExecuting
                var result = ctx.Database.ExecuteSqlRaw("INSERT INTO DEPARTMENTS (Id, Name, Comments) VALUES ({0}, 'test', {1})", id, "comments");

                Assert.AreEqual(1, result);
            }

            Assert.AreEqual(2, inserted.Count);
            Assert.AreEqual(0, replaced.Count);

            Assert.IsTrue(inserted[0].CommandEvent.CommandText.Contains("SELECT"));
            Assert.AreEqual(CommandType.Text, inserted[0].CommandEvent.CommandType);
            Assert.IsNotNull(inserted[0].CommandEvent.ConnectionId);
            Assert.IsNull(inserted[0].CommandEvent.ErrorMessage);
            Assert.IsFalse(inserted[0].CommandEvent.IsAsync);
            Assert.IsNull(inserted[0].CommandEvent.Parameters);
            Assert.IsNull(inserted[0].CommandEvent.Result);
            Assert.IsTrue(inserted[0].CommandEvent.Success);
            Assert.AreEqual("DbCommandIntercept:ExecuteReader", inserted[0].EventType);

            Assert.AreEqual("DbCommandIntercept:ExecuteNonQuery", inserted[1].EventType);
            Assert.AreEqual(DbCommandMethod.ExecuteNonQuery, inserted[1].CommandEvent.Method);
            Assert.IsTrue(inserted[1].CommandEvent.CommandText.Contains("INSERT INTO DEPARTMENTS"));
            Assert.AreEqual(CommandType.Text, inserted[1].CommandEvent.CommandType);
            Assert.IsNotNull(inserted[1].CommandEvent.ConnectionId);
            Assert.IsNull(inserted[1].CommandEvent.ErrorMessage);
            Assert.IsFalse(inserted[1].CommandEvent.IsAsync);
            Assert.AreEqual(2, inserted[1].CommandEvent.Parameters.Count);
            Assert.IsTrue(inserted[1].CommandEvent.Parameters.Any(p => p.Value.ToString() == "comments"));
            Assert.IsTrue(inserted[1].CommandEvent.Parameters.Any(p => p.Value.ToString() == id.ToString()));
            Assert.AreEqual("1", inserted[1].CommandEvent.Result.ToString());
            Assert.IsTrue(inserted[1].CommandEvent.Success);

            Assert.AreEqual(inserted[0].CommandEvent.ConnectionId, inserted[1].CommandEvent.ConnectionId);
        }