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");
            }
        }
Beispiel #2
0
        public void TestDddSeedDatabaseFourBooksDataResetter()
        {
            List <DddBook> entities;
            //SETUP
            var options = SqliteInMemory.CreateOptions <DddBookContext>();

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

                entities = context.DddBooks
                           .Include(x => x.Reviews)
                           .Include(x => x.AuthorsLink)
                           .ThenInclude(x => x.DddAuthor)
                           .ToList();
            }
            using (var context = new DddBookContext(options))
            {
                //ATTEMPT
                var resetter = new DataResetter(context);
                resetter.ResetKeysEntityAndRelationships(entities);
                context.AddRange(entities);
                context.SaveChanges();

                //VERIFY
                context.DddBooks.Count().ShouldEqual(8);
                context.DddAuthors.Count().ShouldEqual(6);
                context.Set <DddReview>().Count().ShouldEqual(4);
            }
        }
Beispiel #3
0
        public void ExampleSetup()
        {
            //This simulates the production database
            //Typically you would get the options for a database using the SqlProductionSetup class.
            var options = SqliteInMemory.CreateOptions <DddBookContext>();

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

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

                //1b. Reset primary and foreign keys (see next version for anonymise)
                var resetter = new DataResetter(context);
                resetter.ResetKeysEntityAndRelationships(entities);

                //1c. Convert to JSON string
                var jsonString = entities.DefaultSerializeToJson();
                //1d. Save to JSON local file in TestData directory
                "DddExampleDatabase".WriteJsonToJsonFile(jsonString);
            }
        }
        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");
            }
        }
Beispiel #5
0
        public void TestResetKeysSingleEntityWithRelationshipsCheckStateIsAdded()
        {
            //SETUP
            var  options = SqliteInMemory.CreateOptions <BookContext>();
            Book entity;

            using (var context = new BookContext(options))
            {
                context.Database.EnsureCreated();
                context.SeedDatabaseFourBooks();
                entity = context.Books
                         .Include(x => x.Reviews)
                         .Include(x => x.Promotion)
                         .Include(x => x.AuthorsLink)
                         .ThenInclude(x => x.Author)
                         .First(x => x.Reviews.Any());

                var resetter = new DataResetter(context);
                resetter.ResetKeysEntityAndRelationships(entity);
            }
            using (var context = new BookContext(options))
            {
                //ATTEMPT
                context.Add(entity);
                var states = context.ChangeTracker.Entries().Select(x => x.State).ToList();

                //VERIFY
                states.Count.ShouldEqual(1 + 2 + 1 + 1 + 1); // Book + 2 reviews + promotion + BookAuthor + author
                states.All(x => x == EntityState.Added).ShouldBeTrue();
            }
        }
Beispiel #6
0
        public void TestResetKeysSingleEntityWithRelationships()
        {
            //SETUP
            var options = SqliteInMemory.CreateOptions <BookContext>();

            using (var context = new BookContext(options))
            {
                context.Database.EnsureCreated();
                context.SeedDatabaseFourBooks();
                var entity = context.Books
                             .Include(x => x.Reviews)
                             .Include(x => x.Promotion)
                             .Include(x => x.AuthorsLink)
                             .ThenInclude(x => x.Author)
                             .First(x => x.Reviews.Any());

                //ATTEMPT
                var resetter = new DataResetter(context);
                resetter.ResetKeysEntityAndRelationships(entity);

                //VERIFY
                entity.BookId.ShouldEqual(0);
                entity.Reviews.All(x => x.ReviewId == 0).ShouldBeTrue();
                entity.Reviews.All(x => x.BookId == 0).ShouldBeTrue();
                entity.Promotion.BookId.ShouldEqual(0);
                entity.Promotion.PriceOfferId.ShouldEqual(0);
                entity.AuthorsLink.All(x => x.AuthorId == 0).ShouldBeTrue();
                entity.AuthorsLink.All(x => x.BookId == 0).ShouldBeTrue();
                entity.AuthorsLink.Select(x => x.Author).All(x => x.AuthorId == 0).ShouldBeTrue();
            }
        }
Beispiel #7
0
    private void OnEnable()
    {
        resettersProperty = serializedObject.FindProperty(dataResetterPropResettableScriptableObjectsName);

        dataResetter = (DataResetter)target;

        if (dataResetter.resettableScriptableObjects == null)
        {
            dataResetter.resettableScriptableObjects = new ResettableScriptableObject[0];
        }
    }
    // The name of the field to be represented.


    private void OnEnable()
    {
        // Cache the property and target.
        resettersProperty = serializedObject.FindProperty(dataResetterPropResettableScriptableObjectsName);

        dataResetter = (DataResetter)target;

        // If the array is null, initialise it to prevent null refs.
        if (dataResetter.resettableScriptableObjects == null)
        {
            dataResetter.resettableScriptableObjects = new ResettableScriptableObject[0];
        }
    }
Beispiel #9
0
    // Called when Script is Enabled
    private void OnEnable()
    {
        // Cache Property
        resettersProperty = serializedObject.FindProperty(dataResetterPropResettableScriptableObjectsName);
        // Cache the Target
        dataResetter = (DataResetter)target;

        // If no DataResetters Found (Array is Null)
        if (dataResetter.resettableScriptableObjects == null)
        {
            // Prevent Null reference
            dataResetter.resettableScriptableObjects = new ResettableScriptableObject[0];
        }
    }
Beispiel #10
0
        public void TestResetAndSerializeFourBooks()
        {
            //SETUP
            var options = SqliteInMemory.CreateOptions <DddBookContext>();

            using (var context = new DddBookContext(options))
            {
                var books    = DddEfTestData.CreateFourBooks();
                var resetter = new DataResetter(context);
                resetter.ResetKeysEntityAndRelationships(books);

                //ATTEMPT
                var jsonString = books.DefaultSerializeToJson();

                //VERIFY
            }
        }
        public void TestResetKeysSingleEntityNonEntityClassBad()
        {
            //SETUP
            var options = SqliteInMemory.CreateOptions <BookContext>();

            using (var context = new BookContext(options))
            {
                var entity = new User();

                //ATTEMPT
                var resetter = new DataResetter(context);
                var ex       = Assert.Throws <InvalidOperationException>(() => resetter.ResetKeysSingleEntity(entity));

                //VERIFY
                ex.Message.ShouldEqual("The class User is not a class that the provided DbContext knows about.");
            }
        }
Beispiel #12
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 TestResetKeysSingleEntityPrivateSetter()
        {
            //SETUP
            var options = SqliteInMemory.CreateOptions <SpecializedDbContext>();

            using (var context = new SpecializedDbContext(options))
            {
                var entity = new AllTypesEntity();
                entity.SetId(123);

                //ATTEMPT
                var resetter = new DataResetter(context);
                resetter.ResetKeysSingleEntity(entity);

                //VERIFY
                entity.Id.ShouldEqual(0);
            }
        }
        public void TestResetKeysSingleEntityPkOnly()
        {
            //SETUP
            var options = SqliteInMemory.CreateOptions <BookContext>();

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

                //ATTEMPT
                var resetter = new DataResetter(context);
                resetter.ResetKeysSingleEntity(entity);

                //VERIFY
                entity.BookId.ShouldEqual(0);
            }
        }
        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);
            }
        }