public void TestResetKeysSingleEntityAlternativeNotReset()
        {
            //SETUP
            var options = SqliteInMemory.CreateOptions <OwnedWithKeyDbContext>();

            using (var context = new OwnedWithKeyDbContext(options))
            {
                var entity = new User
                {
                    UserId = 123,
                    Email  = "Hello"
                };

                //ATTEMPT
                var config = new DataResetterConfig {
                    DoNotResetAlternativeKey = true
                };
                var resetter = new DataResetter(context, config);
                resetter.ResetKeysSingleEntity(entity);

                //VERIFY
                entity.UserId.ShouldEqual(0);
                entity.Email.ShouldEqual("Hello");
            }
        }
        public void TestResetKeysSingleEntityAnonymiseOwnAnonymiser()
        {
            //SETUP
            string MyAnonymiser(AnonymiserData data, object objectInstance)
            {
                return("My Replacement text");
            }

            var options = SqliteInMemory.CreateOptions <BookContext>();

            using (var context = new BookContext(options))
            {
                var entity = new Author {
                    Name = "Test"
                };

                //ATTEMPT
                var config = new DataResetterConfig
                {
                    AnonymiserFunc = MyAnonymiser
                };
                config.AddToAnonymiseList <Author>(x => x.Name, "Name");
                var resetter = new DataResetter(context, config);
                resetter.ResetKeysSingleEntity(entity);

                //VERIFY
                entity.Name.ShouldEqual("My Replacement text");
            }
        }
示例#3
0
        public void ExampleSetupWithAnonymiseLinkToLibrary()
        {
            //SETUP

            //This simulates the production database
            //Typically you would open a database
            var options = SqliteInMemory.CreateOptions <BookContext>();

            using (var context = new BookContext(options))
            {
                context.Database.EnsureCreated();
                context.SeedDatabaseFourBooks();

                //1a. Read in the data to want to seed the database with
                var entities = context.Books
                               .Include(x => x.Reviews)
                               .Include(x => x.Promotion)
                               .Include(x => x.AuthorsLink)
                               .ThenInclude(x => x.Author)
                               .ToList();

                //1b-ii. Set up resetter config to use own method
                var myAnonymiser = new MyAnonymiser(42);
                var config       = new DataResetterConfig
                {
                    AnonymiserFunc = myAnonymiser.AnonymiseThis
                };
                //1b-ii. Add all class/properties that you want to anonymise
                config.AddToAnonymiseList <Author>(x => x.Name, "FullName");
                config.AddToAnonymiseList <Review>(x => x.VoterName, "FirstName");
                //1b. Reset primary and foreign keys and anonymise author's name and Review's VoterName
                var resetter = new DataResetter(context, config);
                resetter.ResetKeysEntityAndRelationships(entities);

                //Show author's myAnonymiser
                foreach (var author in entities.SelectMany(x => x.AuthorsLink.Select(y => y.Author)).Distinct())
                {
                    _output.WriteLine($"Author name = {author.Name}");
                }

                //1c. Convert to JSON string
                var jsonString = entities.DefaultSerializeToJson();
                //1d. Save to JSON local file in TestData directory
                "ExampleDatabaseAnonymised".WriteJsonToJsonFile(jsonString);
            }
        }
        public void TestResetKeysSingleEntityAnonymiseNameAsEmail()
        {
            //SETUP
            var options = SqliteInMemory.CreateOptions <BookContext>();

            using (var context = new BookContext(options))
            {
                var entity = new Author {
                    Name = "Test"
                };

                //ATTEMPT
                var config = new DataResetterConfig();
                config.AddToAnonymiseList <Author>(x => x.Name, "Email");
                var resetter = new DataResetter(context, config);
                resetter.ResetKeysSingleEntity(entity);

                //VERIFY
                entity.Name.ShouldEndWith(DataResetterConfig.EmailSuffix);
            }
        }
        public void TestResetKeysSingleEntityAnonymiseNameMinLength()
        {
            //SETUP
            var options = SqliteInMemory.CreateOptions <BookContext>();

            using (var context = new BookContext(options))
            {
                var entity = new Author {
                    Name = "Test"
                };

                //ATTEMPT
                var config = new DataResetterConfig();
                config.AddToAnonymiseList <Author>(x => x.Name, "Name:Min=100");
                var resetter = new DataResetter(context, config);
                resetter.ResetKeysSingleEntity(entity);

                //VERIFY
                entity.Name.Length.ShouldBeInRange(100, 140);
            }
        }
 public void AnonymiseMember(object entityToUpdate, DataResetterConfig config)
 {
     PropertyToAnonymise.SetValue(entityToUpdate, config.AnonymiserFunc(AnonymiserData, entityToUpdate));
 }