示例#1
0
        private void ReloadTestData()
        {
            if (PersonTestData == default)
            {
                PersonTestData = new List <PersonEntity>();
            }
            if (AddressTestData == default)
            {
                AddressTestData = new List <AddressEntity>();
            }
            if (PersonAttributeTestData == default)
            {
                PersonAttributeTestData = new List <PersonAttributesEntity>();
            }

            PersonTestData.Clear();
            AddressTestData.Clear();
            PersonAttributeTestData.Clear();

            using (StreamReader file = File.OpenText("persontestdata.json"))
            {
                Newtonsoft.Json.JsonSerializer serializer = new Newtonsoft.Json.JsonSerializer();
                PersonTestData.AddRange((List <PersonEntity>)serializer.Deserialize(file, typeof(List <PersonEntity>)));
            }
            using (StreamReader file = File.OpenText("addresstestdata.json"))
            {
                Newtonsoft.Json.JsonSerializer serializer = new Newtonsoft.Json.JsonSerializer();
                AddressTestData.AddRange((List <AddressEntity>)serializer.Deserialize(file, typeof(List <AddressEntity>)));
            }
            using (StreamReader file = File.OpenText("personattributetestdata.json"))
            {
                Newtonsoft.Json.JsonSerializer serializer = new Newtonsoft.Json.JsonSerializer();
                PersonAttributeTestData.AddRange((List <PersonAttributesEntity>)serializer.Deserialize(file, typeof(List <PersonAttributesEntity>)));
            }
        }
        public async Task Add_and_update_one_entity_with_preGeneratedProperties_Generates_two_audit_and_one_auditMetaDataEntity()
        {
            using (var transaction = Connection.BeginTransaction())
            {
                EntityEntry  entityEntry;
                PersonEntity personEntity;
                string       notModifiedFirstName;
                //Arrange and Act
                using (var context = CreateContext(transaction))
                {
                    personEntity         = PersonTestData.FirstOrDefault();
                    notModifiedFirstName = personEntity.FirstName;
                    entityEntry          = await context.Persons.AddAsync(personEntity);

                    await context.SaveChangesAsync();

                    personEntity = await context.Persons.FirstOrDefaultAsync();

                    personEntity.FirstName = $"{personEntity.FirstName}Modified";
                    await context.SaveChangesAsync();
                }

                using (var context = CreateContext(transaction))
                {
                    //Assert
                    AuditMetaDataEntity auditMetaData = await context.AuditMetaDatas.Include(amd => amd.AuditChanges).FirstOrDefaultAsync();

                    AuditEntity auditAdded = await context.Audits.Include(a => a.AuditMetaData).OrderBy(x => x.DateTimeOffset).FirstOrDefaultAsync();

                    AuditEntity auditModified = await context.Audits.Include(a => a.AuditMetaData).OrderByDescending(x => x.DateTimeOffset).FirstOrDefaultAsync();

                    Assert.Single(context.AuditMetaDatas);
                    Assert.Equal("PersonEntity", auditMetaData.DisplayName);
                    Assert.Equal("Persons", auditMetaData.Table);
                    Assert.Equal(entityEntry.ToReadablePrimaryKey(), auditMetaData.ReadablePrimaryKey);
                    Assert.Equal(entityEntry.ToReadablePrimaryKey().ToGuidHash(), auditMetaData.HashPrimaryKey);
                    Assert.Equal(2, auditMetaData.AuditChanges.Count());

                    Assert.Equal(2, context.Audits.Count());
                    Assert.Equal(auditMetaData, auditAdded.AuditMetaData);
                    Assert.Equal(EntityState.Added, auditAdded.EntityState);
                    Assert.NotNull(auditAdded.ByUser);
                    Assert.Null(auditAdded.OldValues);
                    Assert.Equal(auditMetaData, auditModified.AuditMetaData);
                    Assert.Equal(EntityState.Modified, auditModified.EntityState);
                    Assert.NotNull(auditModified.ByUser);
                    Assert.NotNull(auditModified.OldValues);

                    PersonEntity auditAddedValues = JsonConvert.DeserializeObject <PersonEntity>(auditAdded.NewValues);
                    Assert.Equal(personEntity.Id, auditAddedValues.Id);
                    Assert.Equal(notModifiedFirstName, auditAddedValues.FirstName);
                    Assert.Equal(personEntity.LastName, auditAddedValues.LastName);
                    Assert.Equal(personEntity.Gender, auditAddedValues.Gender);
                    Assert.Null(auditAddedValues.Addresses);
                    Assert.Null(auditAddedValues.Attributes);

                    PersonEntity auditModifiedNewValues = JsonConvert.DeserializeObject <PersonEntity>(auditModified.NewValues);
                    Assert.Equal(default, auditModifiedNewValues.Id);
示例#3
0
        private void ReloadTestData()
        {
            if (PersonTestData == default)
            {
                PersonTestData = new List <PersonEntity>();
            }
            if (SettingTestData == default)
            {
                SettingTestData = new List <SettingEntity>();
            }
            if (SettingDevelopmentTestData == default)
            {
                SettingDevelopmentTestData = new List <SettingEntity>();
            }
            if (SettingMobileTestData == default)
            {
                SettingMobileTestData = new List <SettingEntity>();
            }
            if (SettingMobileDevelopmentTestData == default)
            {
                SettingMobileDevelopmentTestData = new List <SettingEntity>();
            }

            PersonTestData.Clear();
            SettingTestData.Clear();
            SettingDevelopmentTestData.Clear();
            SettingMobileTestData.Clear();
            SettingMobileDevelopmentTestData.Clear();

            using (StreamReader file = File.OpenText("persontestdata.json"))
            {
                Newtonsoft.Json.JsonSerializer serializer = new Newtonsoft.Json.JsonSerializer();
                PersonTestData.AddRange((List <PersonEntity>)serializer.Deserialize(file, typeof(List <PersonEntity>)));
            }
            using (StreamReader file = File.OpenText("settingtestdata.json"))
            {
                JObject fileAsJson = JObject.Parse(file.ReadToEnd());
                foreach (KeyValuePair <string, JToken> entry in fileAsJson)
                {
                    SettingTestData.Add(new SettingEntity()
                    {
                        Key         = entry.Key,
                        Value       = entry.Value.ToString(),
                        Application = "",
                        Environment = ""
                    });
                }
            }
            using (StreamReader file = File.OpenText("settingtestdata.Development.json"))
            {
                JObject fileAsJson = JObject.Parse(file.ReadToEnd());
                foreach (KeyValuePair <string, JToken> entry in fileAsJson)
                {
                    SettingDevelopmentTestData.Add(new SettingEntity()
                    {
                        Key         = entry.Key,
                        Value       = entry.Value.ToString(),
                        Application = "",
                        Environment = "Development"
                    });
                }
            }
            using (StreamReader file = File.OpenText("settingtestdata.Mobile.json"))
            {
                JObject fileAsJson = JObject.Parse(file.ReadToEnd());
                foreach (KeyValuePair <string, JToken> entry in fileAsJson)
                {
                    SettingMobileTestData.Add(new SettingEntity()
                    {
                        Key         = entry.Key,
                        Value       = entry.Value.ToString(),
                        Application = "Mobile",
                        Environment = ""
                    });
                }
            }
            using (StreamReader file = File.OpenText("settingtestdata.Mobile.Development.json"))
            {
                JObject fileAsJson = JObject.Parse(file.ReadToEnd());
                foreach (KeyValuePair <string, JToken> entry in fileAsJson)
                {
                    SettingMobileDevelopmentTestData.Add(new SettingEntity()
                    {
                        Key         = entry.Key,
                        Value       = entry.Value.ToString(),
                        Application = "Mobile",
                        Environment = "Development"
                    });
                }
            }
        }
        public void Add_and_update_entities_preGenerated_and_onAddGeneratedProperties_Generates_two_audit_and_one_audit_metaDataEntity()
        {
            using (var transaction = Connection.BeginTransaction())
            {
                PersonEntity           personEntity;
                AddressEntity          addressEntity1;
                AddressEntity          addressEntity2;
                PersonAttributesEntity personAttributesEntity1;
                PersonAttributesEntity personAttributesEntity2;
                //Arrange and Act
                using (var context = CreateContext(transaction))
                {
                    personEntity = PersonTestData.FirstOrDefault();
                    context.Persons.Add(personEntity);
                    context.SaveChanges();
                    personEntity           = context.Persons.FirstOrDefault();
                    personEntity.FirstName = $"{personEntity.FirstName}Modified";
                    context.SaveChanges();

                    addressEntity1 = AddressTestData.Where(x => x.PersonId == personEntity.Id).ElementAt(0);
                    context.Addresses.Add(addressEntity1);
                    addressEntity2 = AddressTestData.Where(x => x.PersonId == personEntity.Id).ElementAt(1);
                    context.Addresses.Add(addressEntity2);
                    context.SaveChanges();
                    addressEntity1            = context.Addresses.FirstOrDefault(x => x.PersonId == personEntity.Id && x.Type == addressEntity1.Type);
                    addressEntity1.PostalCode = 12345;
                    addressEntity2            = context.Addresses.FirstOrDefault(x => x.PersonId == personEntity.Id && x.Type == addressEntity2.Type);
                    addressEntity2.PostalCode = 54321;
                    context.SaveChanges();

                    personAttributesEntity1 = PersonAttributeTestData.Where(x => x.PersonId == personEntity.Id).ElementAt(0);
                    context.PersonAttributes.Add(personAttributesEntity1);
                    personAttributesEntity2 = PersonAttributeTestData.Where(x => x.PersonId == personEntity.Id).ElementAt(1);
                    context.PersonAttributes.Add(personAttributesEntity2);
                    context.SaveChanges();
                    personAttributesEntity1                = context.PersonAttributes.FirstOrDefault(x => x.Id == personAttributesEntity1.Id);
                    personAttributesEntity2                = context.PersonAttributes.FirstOrDefault(x => x.Id == personAttributesEntity2.Id);
                    personAttributesEntity1.DummyString    = "cahangingDummyString";
                    personAttributesEntity1.Attribute      = AttributeType.Profession;
                    personAttributesEntity1.AttributeValue = "Graphic Designer";
                    context.Remove(personAttributesEntity2);
                    context.SaveChanges();
                }

                using (var context = CreateContext(transaction))
                {
                    //Assert
                    List <AuditMetaDataEntity> auditMetaDatas = context.AuditMetaDatas.Include(amd => amd.AuditChanges).ToList();
                    List <AuditEntity>         audits         = context.Audits.Include(a => a.AuditMetaData).ToList();

                    Assert.Equal(5, auditMetaDatas.Count);
                    Assert.Equal(10, audits.Count);

                    /************************************************************************************************************************/

                    Assert.Single(auditMetaDatas,
                                  (x => x.DisplayName == "PersonEntity" && x.Schema == default && x.Table == "Persons" && x.SchemaTable == "Persons" &&
                                   x.ReadablePrimaryKey == "Id=caf3feb5-730e-40a3-9610-404a17b0deba" &&
                                   x.HashPrimaryKey == "Id=caf3feb5-730e-40a3-9610-404a17b0deba".ToGuidHash() &&
                                   x.AuditChanges.Count == 2));

                    Assert.Equal(2, auditMetaDatas.Count(x => x.DisplayName == "PersonAttributesEntity" && x.Schema == default && x.Table == "PersonAttributes" && x.SchemaTable == "PersonAttributes" &&
                                                         x.AuditChanges.Count == 2));

                    Assert.Single(auditMetaDatas,
                                  (x => x.DisplayName == "AddressEntity" && x.Schema == default && x.Table == "Addresses" && x.SchemaTable == "Addresses" &&
                                   x.ReadablePrimaryKey == "PersonId=caf3feb5-730e-40a3-9610-404a17b0deba,Type=Home" &&
                                   x.HashPrimaryKey == "PersonId=caf3feb5-730e-40a3-9610-404a17b0deba,Type=Home".ToGuidHash() &&
                                   x.AuditChanges.Count == 2));

                    Assert.Single(auditMetaDatas,
                                  (x => x.DisplayName == "AddressEntity" && x.Schema == default && x.Table == "Addresses" && x.SchemaTable == "Addresses" &&
                                   x.ReadablePrimaryKey == "PersonId=caf3feb5-730e-40a3-9610-404a17b0deba,Type=Work" &&
                                   x.HashPrimaryKey == "PersonId=caf3feb5-730e-40a3-9610-404a17b0deba,Type=Work".ToGuidHash() &&
                                   x.AuditChanges.Count == 2));

                    /************************************************************************************************************************/

                    Assert.Single(audits,
                                  (x => x.AuditMetaData != default && x.Id != default && x.EntityState == EntityState.Added &&
                                   x.NewValues == "{\"Id\":\"caf3feb5-730e-40a3-9610-404a17b0deba\",\"FirstName\":\"Ofella\",\"Gender\":1,\"LastName\":\"Andrichuk\"}" &&
                                   x.OldValues == default && x.ByUser != default && x.DateTimeOffset != default));

                    Assert.Single(audits,
                                  (x => x.AuditMetaData != default && x.Id != default && x.EntityState == EntityState.Modified &&
                                   x.NewValues == "{\"FirstName\":\"OfellaModified\"}" &&
                                   x.OldValues == "{\"FirstName\":\"Ofella\"}" && x.ByUser != default && x.DateTimeOffset != default));

                    Assert.Single(audits,
                                  (x => x.AuditMetaData != default && x.Id != default && x.EntityState == EntityState.Added &&
                                   x.NewValues == "{\"PersonId\":\"caf3feb5-730e-40a3-9610-404a17b0deba\",\"Type\":1,\"City\":\"Azteca\",\"HouseNumber\":\"844\",\"PostalCode\":50188,\"Street\":\"Vahlen\"}" &&
                                   x.OldValues == default && x.ByUser != default && x.DateTimeOffset != default));

                    Assert.Single(audits,
                                  (x => x.AuditMetaData != default && x.Id != default && x.EntityState == EntityState.Added &&
                                   x.NewValues == "{\"PersonId\":\"caf3feb5-730e-40a3-9610-404a17b0deba\",\"Type\":2,\"City\":\"Tawun\",\"HouseNumber\":\"7\",\"PostalCode\":32921,\"Street\":\"Welch\"}" &&
                                   x.OldValues == default && x.ByUser != default && x.DateTimeOffset != default));

                    Assert.Single(audits,
                                  (x => x.AuditMetaData != default && x.Id != default && x.EntityState == EntityState.Modified &&
                                   x.NewValues == "{\"PostalCode\":54321}" &&
                                   x.OldValues == "{\"PostalCode\":50188}" && x.ByUser != default && x.DateTimeOffset != default));

                    Assert.Single(audits,
                                  (x => x.AuditMetaData != default && x.Id != default && x.EntityState == EntityState.Modified &&
                                   x.NewValues == "{\"PostalCode\":12345}" &&
                                   x.OldValues == "{\"PostalCode\":32921}" && x.ByUser != default && x.DateTimeOffset != default));

                    Assert.Equal(2, audits.Count(x => x.AuditMetaData.DisplayName == "PersonAttributesEntity" && x.Id != default && x.EntityState == EntityState.Added &&
                                                 x.OldValues == default && x.ByUser != default && x.DateTimeOffset != default));

                    Assert.Single(audits,
                                  (x => x.AuditMetaData != default && x.Id != default && x.EntityState == EntityState.Modified &&
                                   x.NewValues == "{\"Attribute\":2,\"AttributeValue\":\"Graphic Designer\"}" &&
                                   x.OldValues == "{\"Attribute\":1,\"AttributeValue\":\"Married\"}" && x.ByUser != default && x.DateTimeOffset != default));

                    Assert.Single(audits,
                                  (x => x.AuditMetaData != default && x.Id != default && x.EntityState == EntityState.Deleted &&
                                   x.NewValues == default && x.ByUser != default && x.DateTimeOffset != default));
                }
            }
        }
        public void Add_and_update_entities_preGenerated_and_onAddGeneratedProperties_Generates_two_audit_and_one_audit_metaDataEntity()
        {
            using (var transaction = Connection.BeginTransaction())
            {
                PersonEntity           personEntity;
                AddressEntity          addressEntity1;
                AddressEntity          addressEntity2;
                PersonAttributesEntity personAttributesEntity1;
                PersonAttributesEntity personAttributesEntity2;
                //Arrange and Act
                using (var context = CreateContext(transaction))
                {
                    personEntity = PersonTestData.FirstOrDefault();
                    context.Persons.Add(personEntity);
                    context.SaveChanges();
                    personEntity           = context.Persons.FirstOrDefault();
                    personEntity.FirstName = $"{personEntity.FirstName}Modified";
                    context.SaveChanges();

                    addressEntity1 = AddressTestData.Where(x => x.PersonId == personEntity.Id).ElementAt(0);
                    context.Addresses.Add(addressEntity1);
                    addressEntity2 = AddressTestData.Where(x => x.PersonId == personEntity.Id).ElementAt(1);
                    context.Addresses.Add(addressEntity2);
                    context.SaveChanges();
                    addressEntity1            = context.Addresses.FirstOrDefault(x => x.PersonId == personEntity.Id && x.Type == addressEntity1.Type);
                    addressEntity1.PostalCode = 12345;
                    addressEntity2            = context.Addresses.FirstOrDefault(x => x.PersonId == personEntity.Id && x.Type == addressEntity2.Type);
                    addressEntity2.PostalCode = 54321;
                    context.SaveChanges();

                    personAttributesEntity1 = PersonAttributeTestData.Where(x => x.PersonId == personEntity.Id).ElementAt(0);
                    context.PersonAttributes.Add(personAttributesEntity1);
                    personAttributesEntity2 = PersonAttributeTestData.Where(x => x.PersonId == personEntity.Id).ElementAt(1);
                    context.PersonAttributes.Add(personAttributesEntity2);
                    context.SaveChanges();
                    personAttributesEntity1                = context.PersonAttributes.FirstOrDefault(x => x.Id == personAttributesEntity1.Id);
                    personAttributesEntity2                = context.PersonAttributes.FirstOrDefault(x => x.Id == personAttributesEntity2.Id);
                    personAttributesEntity1.DummyString    = "cahangingDummyString";
                    personAttributesEntity1.Attribute      = AttributeType.Profession;
                    personAttributesEntity1.AttributeValue = "Graphic Designer";
                    context.Remove(personAttributesEntity2);
                    context.SaveChanges();
                }

                using (var context = CreateContext(transaction))
                {
                    //Assert
                    List <AuditMetaDataEntity> auditMetaDatas = context.AuditMetaDatas.Include(amd => amd.AuditChanges).ToList();
                    List <AuditEntity>         audits         = context.Audits.Include(a => a.AuditMetaData).ToList();

                    Assert.Equal(5, auditMetaDatas.Count);
                    Assert.Equal(10, audits.Count);

                    /************************************************************************************************************************/

                    Assert.Equal(2, auditMetaDatas[0].AuditChanges.Count);
                    Assert.Equal("AddressEntity", auditMetaDatas[0].DisplayName);
                    Assert.Null(auditMetaDatas[0].Schema);
                    Assert.Equal("Addresses", auditMetaDatas[0].Table);
                    Assert.Equal("Addresses", auditMetaDatas[0].SchemaTable);
                    Assert.Equal("PersonId=caf3feb5-730e-40a3-9610-404a17b0deba,Type=Home", auditMetaDatas[0].ReadablePrimaryKey);
                    Assert.Equal("PersonId=caf3feb5-730e-40a3-9610-404a17b0deba,Type=Home".ToGuidHash(), auditMetaDatas[0].HashPrimaryKey);

                    Assert.Equal(2, auditMetaDatas[1].AuditChanges.Count);
                    Assert.Equal("PersonEntity", auditMetaDatas[1].DisplayName);
                    Assert.Null(auditMetaDatas[1].Schema);
                    Assert.Equal("Persons", auditMetaDatas[1].Table);
                    Assert.Equal("Persons", auditMetaDatas[1].SchemaTable);
                    Assert.Equal("Id=caf3feb5-730e-40a3-9610-404a17b0deba", auditMetaDatas[1].ReadablePrimaryKey);
                    Assert.Equal("Id=caf3feb5-730e-40a3-9610-404a17b0deba".ToGuidHash(), auditMetaDatas[1].HashPrimaryKey);

                    Assert.Equal(2, auditMetaDatas[2].AuditChanges.Count);
                    Assert.Equal("AddressEntity", auditMetaDatas[2].DisplayName);
                    Assert.Null(auditMetaDatas[2].Schema);
                    Assert.Equal("Addresses", auditMetaDatas[2].Table);
                    Assert.Equal("Addresses", auditMetaDatas[2].SchemaTable);
                    Assert.Equal("PersonId=caf3feb5-730e-40a3-9610-404a17b0deba,Type=Work", auditMetaDatas[2].ReadablePrimaryKey);
                    Assert.Equal("PersonId=caf3feb5-730e-40a3-9610-404a17b0deba,Type=Work".ToGuidHash(), auditMetaDatas[2].HashPrimaryKey);

                    Assert.Equal(2, auditMetaDatas[3].AuditChanges.Count);
                    Assert.Equal("PersonAttributesEntity", auditMetaDatas[3].DisplayName);
                    Assert.Null(auditMetaDatas[3].Schema);
                    Assert.Equal("PersonAttributes", auditMetaDatas[3].Table);
                    Assert.Equal("PersonAttributes", auditMetaDatas[3].SchemaTable);
                    Assert.Equal("Id=2", auditMetaDatas[3].ReadablePrimaryKey);
                    Assert.Equal("Id=2".ToGuidHash(), auditMetaDatas[3].HashPrimaryKey);

                    Assert.Equal(2, auditMetaDatas[4].AuditChanges.Count);
                    Assert.Equal("PersonAttributesEntity", auditMetaDatas[4].DisplayName);
                    Assert.Null(auditMetaDatas[4].Schema);
                    Assert.Equal("PersonAttributes", auditMetaDatas[4].Table);
                    Assert.Equal("PersonAttributes", auditMetaDatas[4].SchemaTable);
                    Assert.Equal("Id=1", auditMetaDatas[4].ReadablePrimaryKey);
                    Assert.Equal("Id=1".ToGuidHash(), auditMetaDatas[4].HashPrimaryKey);

                    /************************************************************************************************************************/

                    Assert.NotNull(audits[0].AuditMetaData);
                    Assert.NotEqual(default, audits[0].Id);