Example #1
0
        public void LoggableEntity_SetsName()
        {
            String actual = new LoggableEntity(entry).Name;
            String expected = nameof(Role);

            Assert.Equal(expected, actual);
        }
        public void LoggableEntity_SetsEntityId()
        {
            String actual   = new LoggableEntity(entry).Id;
            String expected = model.Id;

            Assert.Equal(expected, actual);
        }
Example #3
0
        public void ToString_Modified_Changes()
        {
            model.Title += "Test";
            entry.State = EntityState.Modified;

            String actual = new LoggableEntity(entry).ToString();
            String expected = $"Title: \"{model.Title[..^4]}\" => \"{model.Title}\"\n";
Example #4
0
        public void LoggableEntity_SetsId()
        {
            Int64 expected = model.Id;
            Int64 actual = new LoggableEntity(entry).Id();

            Assert.Equal(expected, actual);
        }
        public void LoggableEntity_SetsEntityTypeName()
        {
            String actual   = new LoggableEntity(entry).Name;
            String expected = typeof(TestModel).Name;

            Assert.Equal(expected, actual);
        }
Example #6
0
        public void LoggableEntity_CreatesPropertiesForAttachedEntity()
        {
            context.Dispose();
            String roleName = model.Name;

            context = new TestingContext();
            context.Set <Role>().Attach(model);

            entry = context.Entry <BaseModel>(model);
            entry.OriginalValues["Name"] = "Role";
            entry.CurrentValues["Name"]  = "Role";
            entry.State = EntityState.Modified;

            IEnumerator <LoggableProperty> expected = new List <LoggableProperty>()
            {
                new LoggableProperty(entry.Property("Name"), roleName)
            }.GetEnumerator();
            IEnumerator <LoggableProperty> actual = new LoggableEntity(entry).Properties.GetEnumerator();

            while (expected.MoveNext() | actual.MoveNext())
            {
                Assert.AreEqual(expected.Current.IsModified, actual.Current.IsModified);
                Assert.AreEqual(expected.Current.ToString(), actual.Current.ToString());
            }
        }
        public void LoggableEntity_SetsEntityTypeNameFromProxy()
        {
            String actual   = new LoggableEntity(entry).Name;
            String expected = typeof(Role).Name;

            Assert.Equal("System.Data.Entity.DynamicProxies", entry.Entity.GetType().Namespace);
            Assert.Equal(expected, actual);
        }
Example #8
0
        public void LoggableEntity_SetsAction()
        {
            entry.State = EntityState.Deleted;

            String expected = nameof(EntityState.Deleted);
            String actual = new LoggableEntity(entry).Action;

            Assert.Equal(expected, actual);
        }
Example #9
0
        public void LoggableEntity_SetsAction()
        {
            entry.State = EntityState.Deleted;

            String actual   = new LoggableEntity(entry).Action;
            String expected = entry.State.ToString();

            Assert.AreEqual(expected, actual);
        }
Example #10
0
        public void ToString_Added_Changes()
        {
            entry.State = EntityState.Added;

            String actual = new LoggableEntity(entry).ToString();
            String expected = $"CreationDate: \"{model.CreationDate}\"\nTitle: \"{model.Title}\"\n";

            Assert.Equal(expected, actual);
        }
        public void LoggableEntity_SetsEntityTypeName()
        {
            entry = context.Entry <BaseModel>(context.Set <Role>().Add(new Role()));

            String actual   = new LoggableEntity(entry).Name;
            String expected = typeof(Role).Name;

            Assert.NotEqual("System.Data.Entity.DynamicProxies", entry.Entity.GetType().Namespace);
            Assert.Equal(expected, actual);
        }
Example #12
0
        public void LoggableEntity_SetsEntityTypeNameFromProxy()
        {
            DbEntityEntry <BaseModel> proxy = context.Entry <BaseModel>(context.Set <Role>().Single());

            String actual   = new LoggableEntity(proxy).Name;
            String expected = typeof(Role).Name;

            Assert.Equal("System.Data.Entity.DynamicProxies", proxy.Entity.GetType().Namespace);
            Assert.Equal(expected, actual);
        }
Example #13
0
        public void LoggableEntity_Proxy_SetsName()
        {
            model = context.Set<Role>().Single();
            entry = context.ChangeTracker.Entries<AModel>().Single();

            String actual = new LoggableEntity(entry).Name;
            String expected = nameof(Role);

            Assert.IsAssignableFrom<IProxyTargetAccessor>(model);
            Assert.Equal(expected, actual);
        }
        public void Log_DoesNotSave()
        {
            entry.State = EntityState.Added;
            LoggableEntity entity = new LoggableEntity(entry);

            HttpContext.Current = HttpContextFactory.CreateHttpContext();

            logger.Log(entity);

            Assert.Empty(context.Set <AuditLog>());
        }
Example #15
0
        private void AsssertProperties(DbPropertyValues newValues)
        {
            LoggableProperty[] actual   = new LoggableEntity(entry).Properties.ToArray();
            LoggableProperty[] expected = newValues.PropertyNames.Where(property => property != "Id")
                                          .Select(name => new LoggableProperty(entry.Property(name), newValues[name])).ToArray();

            for (Int32 i = 0; i < expected.Length || i < actual.Length; i++)
            {
                Assert.Equal(expected[i].IsModified, actual[i].IsModified);
                Assert.Equal(expected[i].ToString(), actual[i].ToString());
            }
        }
Example #16
0
        public void Log_DoesNotSaveLog()
        {
            entry.State = EntityState.Added;
            DbContext      context = Substitute.For <DbContext>();
            LoggableEntity entity  = new LoggableEntity(entry);

            logger = Substitute.ForPartsOf <AuditLogger>(context);
            logger.When(sub => sub.Log(Arg.Any <LoggableEntity>())).DoNotCallBase();

            logger.Log(entity);

            logger.DidNotReceive().Save();
            context.DidNotReceive().SaveChanges();
        }
Example #17
0
        public void LoggableEntity_CreatesPropertiesForModifiedEntity()
        {
            String title = model.Title;

            entry.State = EntityState.Modified;
            entry.CurrentValues["Title"]  = "Role";
            entry.OriginalValues["Title"] = "Role";

            LoggableProperty expected = new LoggableProperty(entry.Property("Title"), title);
            LoggableProperty actual   = new LoggableEntity(entry).Properties.Single();

            Assert.Equal(expected.IsModified, actual.IsModified);
            Assert.Equal(expected.ToString(), actual.ToString());
        }
        private void AsssertProperties(DbPropertyValues originalValues)
        {
            IEnumerable <String> properties = originalValues.PropertyNames;

            IEnumerator <LoggableProperty> actual   = new LoggableEntity(entry).Properties.GetEnumerator();
            IEnumerator <LoggableProperty> expected = properties.Where(property => property != "Id")
                                                      .Select(name => new LoggableProperty(entry.Property(name), originalValues[name])).GetEnumerator();

            while (expected.MoveNext() | actual.MoveNext())
            {
                Assert.Equal(expected.Current.IsModified, actual.Current.IsModified);
                Assert.Equal(expected.Current.ToString(), actual.Current.ToString());
            }
        }
        public void ToString_FormsEntityChanges()
        {
            StringBuilder  changes        = new StringBuilder();
            LoggableEntity loggableEntity = new LoggableEntity(entry);

            foreach (LoggableProperty property in loggableEntity.Properties)
            {
                changes.AppendFormat("{0}{1}", property, Environment.NewLine);
            }

            String actual   = loggableEntity.ToString();
            String expected = changes.ToString();

            Assert.Equal(expected, actual);
        }
Example #20
0
        public void Log_AddsLogToTheSet()
        {
            LoggableEntity entity = new LoggableEntity(entry);

            logger.Log(entity);

            AuditLog       actual   = context.ChangeTracker.Entries <AuditLog>().First().Entity;
            LoggableEntity expected = entity;

            Assert.AreEqual(HttpContext.Current.User.Identity.Name, actual.AccountId);
            Assert.AreEqual(expected.ToString(), actual.Changes);
            Assert.AreEqual(expected.Name, actual.EntityName);
            Assert.AreEqual(expected.Action, actual.Action);
            Assert.AreEqual(expected.Id, actual.EntityId);
        }
        public void Log_Added()
        {
            entry.State = EntityState.Added;

            logger.Log(new[] { entry });
            logger.Save();

            LoggableEntity expected = new LoggableEntity(entry);
            AuditLog       actual   = context.Set <AuditLog>().Single();

            Assert.Equal(expected.ToString(), actual.Changes);
            Assert.Equal(expected.Name, actual.EntityName);
            Assert.Equal(expected.Action, actual.Action);
            Assert.Equal(expected.Id(), actual.EntityId);
            Assert.Equal(1, actual.AccountId);
        }
        public void Log_Entity()
        {
            LoggableEntity entity = new LoggableEntity(entry);

            logger.Log(entity);
            logger.Save();

            AuditLog       actual   = context.Set <AuditLog>().Single();
            LoggableEntity expected = entity;

            Assert.Equal(expected.ToString(), actual.Changes);
            Assert.Equal(expected.Name, actual.EntityName);
            Assert.Equal(expected.Action, actual.Action);
            Assert.Equal(expected.Id(), actual.EntityId);
            Assert.Equal(1, actual.AccountId);
        }
Example #23
0
        public void Commit_DeletedAudit()
        {
            unitOfWork.Delete(model);

            LoggableEntity expected = new LoggableEntity(context.ChangeTracker.Entries <AModel>().Single());

            unitOfWork.Commit();

            AuditLog actual = Assert.Single(unitOfWork.Select <AuditLog>());

            Assert.Equal(expected.ToString(), actual.Changes);
            Assert.Equal(expected.Name, actual.EntityName);
            Assert.Equal(expected.Action, actual.Action);
            Assert.Equal(expected.Id(), actual.EntityId);
            Assert.Equal(1, actual.AccountId);
        }
        public void Log_Modified()
        {
            Assert.IsType <TestModel>(entry.Entity).Title += "Test";
            entry.State = EntityState.Modified;

            logger.Log(new[] { entry });
            logger.Save();

            LoggableEntity expected = new LoggableEntity(entry);
            AuditLog       actual   = context.Set <AuditLog>().Single();

            Assert.Equal(expected.ToString(), actual.Changes);
            Assert.Equal(expected.Name, actual.EntityName);
            Assert.Equal(expected.Action, actual.Action);
            Assert.Equal(expected.Id(), actual.EntityId);
            Assert.Equal(1, actual.AccountId);
        }
Example #25
0
        public void LoggableEntity_CreatesPropertiesForAttachedEntity()
        {
            context.Dispose();
            String title = model.Title;

            context = new TestingContext();
            context.Set <TestModel>().Attach(model);

            entry = context.Entry <BaseModel>(model);
            entry.OriginalValues["Title"] = "Role";
            entry.CurrentValues["Title"]  = "Role";
            entry.State = EntityState.Modified;

            LoggableProperty expected = new LoggableProperty(entry.Property("Title"), title);
            LoggableProperty actual   = new LoggableEntity(entry).Properties.Single();

            Assert.Equal(expected.IsModified, actual.IsModified);
            Assert.Equal(expected.ToString(), actual.ToString());
        }
        public void Log_AddsLogToTheSet(String accountId, String identityName, String expectedAccountId)
        {
            HttpContext.Current = HttpContextFactory.CreateHttpContext();
            HttpContext.Current.User.Identity.Name.Returns(identityName);
            LoggableEntity entity = new LoggableEntity(entry);

            logger = new AuditLogger(context, accountId);

            logger.Log(entity);

            AuditLog       actual   = context.ChangeTracker.Entries <AuditLog>().First().Entity;
            LoggableEntity expected = entity;

            Assert.Equal(expectedAccountId, actual.AccountId);
            Assert.Equal(expected.ToString(), actual.Changes);
            Assert.Equal(expected.Name, actual.EntityName);
            Assert.Equal(expected.Action, actual.Action);
            Assert.Equal(expected.Id, actual.EntityId);
        }
        private void Logs(DbEntityEntry <BaseModel> entry)
        {
            LoggableEntity expected = new LoggableEntity(entry);

            logger.When(sub => sub.Log(Arg.Any <LoggableEntity>())).DoNotCallBase();
            logger.When(sub => sub.Log(Arg.Any <LoggableEntity>())).Do(info =>
            {
                LoggableEntity actual = info.Arg <LoggableEntity>();

                Assert.Equal(expected.ToString(), actual.ToString());
                Assert.Equal(expected.Action, actual.Action);
                Assert.Equal(expected.Name, actual.Name);
                Assert.Equal(expected.Id, actual.Id);
            });

            logger.Log(new[] { entry });

            logger.ReceivedWithAnyArgs().Log(expected);
        }
        public void LoggableEntity_CreatesPropertiesForModifiedEntity()
        {
            String title = model.Title;

            entry.State = EntityState.Modified;
            entry.CurrentValues["Title"]  = "Role";
            entry.OriginalValues["Title"] = "Role";

            IEnumerator <LoggableProperty> expected = new List <LoggableProperty> {
                new LoggableProperty(entry.Property("Title"), title)
            }.GetEnumerator();
            IEnumerator <LoggableProperty> actual = new LoggableEntity(entry).Properties.GetEnumerator();

            while (expected.MoveNext() | actual.MoveNext())
            {
                Assert.Equal(expected.Current.IsModified, actual.Current.IsModified);
                Assert.Equal(expected.Current.ToString(), actual.Current.ToString());
            }
        }
Example #29
0
        public void Commit_AddedAudit()
        {
            context.Dispose();
            unitOfWork.Dispose();
            context    = TestingContext.Create();
            unitOfWork = new AuditedUnitOfWork(context, 1);
            unitOfWork.Insert(ObjectsFactory.CreateRole(1));

            LoggableEntity expected = new LoggableEntity(context.ChangeTracker.Entries <AModel>().Single());

            unitOfWork.Commit();

            AuditLog actual = Assert.Single(unitOfWork.Select <AuditLog>());

            Assert.Equal(expected.ToString(), actual.Changes);
            Assert.Equal(expected.Name, actual.EntityName);
            Assert.Equal(expected.Action, actual.Action);
            Assert.Equal(expected.Id(), actual.EntityId);
            Assert.Equal(1, actual.AccountId);
        }
        public void Save_LogsOnce(Int32?accountId, String identity, Int32?expectedAccountId)
        {
            HttpContext.Current = HttpContextFactory.CreateHttpContext();
            HttpContext.Current.User.Identity.Name.Returns(identity);
            LoggableEntity entity = new LoggableEntity(entry);

            logger = new AuditLogger(context, accountId);

            logger.Log(entity);
            logger.Save();
            logger.Save();

            AuditLog       actual   = context.Set <AuditLog>().Single();
            LoggableEntity expected = entity;

            Assert.Equal(expectedAccountId, actual.AccountId);
            Assert.Equal(expected.ToString(), actual.Changes);
            Assert.Equal(expected.Name, actual.EntityName);
            Assert.Equal(expected.Action, actual.Action);
            Assert.Equal(expected.Id(), actual.EntityId);
        }