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"); } }
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); } }