public void Deletes_data_from_simple_table(IDialect dialect)
            {
                using (var database = BlankDatabaseFactory.MakeDatabase(dialect))
                {
                    // Arrange
                    database.Insert(new Dog {
                        Name = "Some Name 1", Age = 10
                    });
                    database.Insert(new Dog {
                        Name = "Some Name 2", Age = 10
                    });
                    database.Insert(new Dog {
                        Name = "Some Name 3", Age = 10
                    });
                    database.Insert(new Dog {
                        Name = "Some Name 4", Age = 11
                    });

                    // Act
                    DataWiper.ClearAllData(database);

                    // Assert
                    database.Count <Dog>().Should().Be(0);
                }
            }
示例#2
0
            public void Deletes_data_from_cyclic_foreign_keyed_tables()
            {
                // Arrange
                var a = new CyclicForeignKeyA();

                a.Id = this.database.Insert <int>(a);

                var b = new CyclicForeignKeyB {
                    ForeignId = a.Id
                };

                b.Id = this.database.Insert <int>(b);

                var c = new CyclicForeignKeyC {
                    ForeignId = b.Id
                };

                c.Id = this.database.Insert <int>(c);

                a.ForeignId = c.Id;
                this.database.Update(a);

                var sut = new DataWiper();

                // Act
                sut.ClearAllData(this.database);

                // Assert
                this.database.Count <CyclicForeignKeyA>().Should().Be(0);
                this.database.Count <CyclicForeignKeyB>().Should().Be(0);
                this.database.Count <CyclicForeignKeyC>().Should().Be(0);
            }
            public void Ignores_tables_in_other_schemas(IDialect dialect)
            {
                using (var database = BlankDatabaseFactory.MakeDatabase(dialect))
                {
                    // Arrange
                    database.Insert(new SchemaOther {
                        Name = "Other"
                    });
                    string name;
                    switch (dialect)
                    {
                    case SqlServer2012Dialect _:
                        name = "Other.SchemaOther";
                        break;

                    case PostgreSqlDialect _:
                        name = "other.schemaother";
                        break;

                    default:
                        throw new NotSupportedException("Unknown dialect: " + dialect.GetType().Name);
                    }

                    // Act
                    DataWiper.ClearAllData(database, new HashSet <string> {
                        name
                    });

                    // Assert
                    database.Count <SchemaOther>().Should().Be(1);
                }
            }
示例#4
0
            public void Errors_when_an_ignored_table_references_an_unignored_one()
            {
                // Arrange
                var userId = this.database.Insert <int>(new User {
                    Name = "Some Name 1", Age = 10
                });

                this.database.Insert(new SimpleForeignKey {
                    Name = "Some Name 1", UserId = userId
                });

                var sut = new DataWiper
                {
                    IgnoredTables = new[] { "dbo.SimpleForeignKeys" }
                };

                // Act
                Action act = () => sut.ClearAllData(this.database);

                // Assert
                act.ShouldThrow <Exception>();

                // Cleanup
                this.database.DeleteAll <SimpleForeignKey>();
            }
            public void Deletes_data_from_cyclic_foreign_keyed_tables(IDialect dialect)
            {
                using (var database = BlankDatabaseFactory.MakeDatabase(dialect))
                {
                    // Arrange
                    var a = new CyclicForeignKeyA();
                    a.Id = database.Insert <int>(a);

                    var b = new CyclicForeignKeyB {
                        ForeignId = a.Id
                    };
                    b.Id = database.Insert <int>(b);

                    var c = new CyclicForeignKeyC {
                        ForeignId = b.Id
                    };
                    c.Id = database.Insert <int>(c);

                    a.ForeignId = c.Id;
                    database.Update(a);

                    // Act
                    DataWiper.ClearAllData(database);

                    // Assert
                    database.Count <CyclicForeignKeyA>().Should().Be(0);
                    database.Count <CyclicForeignKeyB>().Should().Be(0);
                    database.Count <CyclicForeignKeyC>().Should().Be(0);
                }
            }
            public void Ignores_specified_tables(IDialect dialect)
            {
                using (var database = BlankDatabaseFactory.MakeDatabase(dialect))
                {
                    // Arrange
                    database.Insert(new Dog {
                        Name = "Some Name 1", Age = 10
                    });

                    string tableName;
                    switch (dialect)
                    {
                    case SqlServer2012Dialect _:
                        tableName = "dbo.Dogs";
                        break;

                    case PostgreSqlDialect _:
                        tableName = "public.dog";
                        break;

                    default:
                        throw new NotSupportedException("Unknown dialect: " + dialect.GetType().Name);
                    }

                    // Act
                    DataWiper.ClearAllData(database, new HashSet <string> {
                        tableName
                    });

                    // Assert
                    database.Count <Dog>().Should().Be(1);
                }
            }
示例#7
0
        public static IDatabase MakeDatabase(IDialect dialect)
        {
            CleanUp();

            switch (dialect)
            {
            case PostgreSqlDialect _:
                return(OpenBlankDatabase(PostgresPool, cs => new NpgsqlConnection(cs), PeregrineConfig.Postgres));

            case SqlServer2012Dialect _:
                return(OpenBlankDatabase(SqlServer2012Pool, cs => new SqlConnection(cs), PeregrineConfig.SqlServer2012));

            default:
                throw new NotSupportedException("Unknown dialect: " + dialect.GetType().Name);
            }

            IDatabase OpenBlankDatabase(
                ObjectPool <string> pool,
                Func <string, IDbConnection> makeConnection,
                PeregrineConfig config)
            {
                var pooledConnectionString = pool.Acquire();

                try
                {
                    IDbConnection dbConnection = null;
                    try
                    {
                        dbConnection = makeConnection(pooledConnectionString.Item);
                        dbConnection.Open();

                        IDbConnection pooledConnection = new PooledConnection <IDbConnection>(pooledConnectionString, dbConnection);
                        var           database         = new DefaultDatabase(pooledConnection, config);

                        DataWiper.ClearAllData(database);
                        return(database);
                    }
                    catch
                    {
                        dbConnection?.Dispose();
                        throw;
                    }
                }
                catch
                {
                    pooledConnectionString?.Dispose();
                    throw;
                }
            }
        }
示例#8
0
            public void Deletes_data_from_self_referenced_foreign_keyed_tables()
            {
                // Arrange
                var id = this.database.Insert <int>(new SelfReferenceForeignKey());

                this.database.Insert(new SelfReferenceForeignKey {
                    ForeignId = id
                });

                var sut = new DataWiper();

                // Act
                sut.ClearAllData(this.database);

                // Assert
                this.database.Count <SelfReferenceForeignKey>().Should().Be(0);
            }
            public void Deletes_data_from_self_referenced_foreign_keyed_tables(IDialect dialect)
            {
                using (var database = BlankDatabaseFactory.MakeDatabase(dialect))
                {
                    // Arrange
                    var id = database.Insert <int>(new SelfReferenceForeignKey());
                    database.Insert(new SelfReferenceForeignKey {
                        ForeignId = id
                    });

                    // Act
                    DataWiper.ClearAllData(database);

                    // Assert
                    database.Count <SelfReferenceForeignKey>().Should().Be(0);
                }
            }
            public void Can_delete_tables_which_reference_another_twice(IDialect dialect)
            {
                using (var database = BlankDatabaseFactory.MakeDatabase(dialect))
                {
                    // Arrange
                    var id = database.Insert <int>(new WipeMultipleForeignKeyTarget {
                        Name = "Other"
                    });
                    database.Insert(new WipeMultipleForeignKeySource {
                        NameId = id, OptionalNameId = id
                    });

                    // Act
                    DataWiper.ClearAllData(database);

                    // Assert
                    database.Count <WipeMultipleForeignKeyTarget>().Should().Be(0);
                }
            }
            public void Deletes_data_from_tables_in_other_schemas(IDialect dialect)
            {
                using (var database = BlankDatabaseFactory.MakeDatabase(dialect))
                {
                    // Arrange
                    var otherId = database.Insert <int>(new SchemaOther {
                        Name = "Other"
                    });
                    database.Insert(new SchemaSimpleForeignKeys {
                        SchemaOtherId = otherId
                    });

                    // Act
                    DataWiper.ClearAllData(database);

                    // Assert
                    database.Count <SchemaOther>().Should().Be(0);
                    database.Count <SchemaSimpleForeignKeys>().Should().Be(0);
                }
            }
示例#12
0
            public void Deletes_data_from_foreign_keyed_tables()
            {
                // Arrange
                var userId = this.database.Insert <int>(new User {
                    Name = "Some Name 1", Age = 10
                });

                this.database.Insert(new SimpleForeignKey {
                    Name = "Some Name 1", UserId = userId
                });

                var sut = new DataWiper();

                // Act
                sut.ClearAllData(this.database);

                // Assert
                this.database.Count <User>().Should().Be(0);
                this.database.Count <SimpleForeignKey>().Should().Be(0);
            }
示例#13
0
            public void Ignores_tables_in_other_schemas()
            {
                // Arrange
                this.database.Insert(new SchemaOther {
                    Name = "Other"
                });
                var sut = new DataWiper
                {
                    IgnoredTables = new[]
                    {
                        "Other.SchemaOther"
                    }
                };

                // Act
                sut.ClearAllData(this.database);

                // Assert
                this.database.Count <SchemaOther>().Should().Be(1);
            }
示例#14
0
            public void Deletes_data_from_tables_in_other_schemas()
            {
                // Arrange
                var otherId = this.database.Insert <int>(new SchemaOther {
                    Name = "Other"
                });

                this.database.Insert(new SchemaSimpleForeignKeys {
                    SchemaOtherId = otherId
                });

                var sut = new DataWiper();

                // Act
                sut.ClearAllData(this.database);

                // Assert
                this.database.Count <SchemaOther>().Should().Be(0);
                this.database.Count <SchemaSimpleForeignKeys>().Should().Be(0);
            }
示例#15
0
            public void Ignores_specified_tables()
            {
                // Arrange
                this.database.Insert(new User {
                    Name = "Some Name 1", Age = 10
                });

                var sut = new DataWiper
                {
                    IgnoredTables = new[]
                    {
                        "dbo.Users"
                    }
                };

                // Act
                sut.ClearAllData(this.database);

                // Assert
                this.database.Count <User>().Should().Be(1);
            }
            public void Deletes_data_from_foreign_keyed_tables(IDialect dialect)
            {
                using (var database = BlankDatabaseFactory.MakeDatabase(dialect))
                {
                    // Arrange
                    var dogId = database.Insert <int>(new Dog {
                        Name = "Some Name 1", Age = 10
                    });

                    database.Insert(new SimpleForeignKey {
                        Name = "Some Name 1", DogId = dogId
                    });

                    // Act
                    DataWiper.ClearAllData(database);

                    // Assert
                    database.Count <Dog>().Should().Be(0);
                    database.Count <SimpleForeignKey>().Should().Be(0);
                }
            }
            public void Errors_when_an_ignored_table_references_an_unignored_one(IDialect dialect)
            {
                using (var database = BlankDatabaseFactory.MakeDatabase(dialect))
                {
                    // Arrange
                    var dogId = database.Insert <int>(new Dog {
                        Name = "Some Name 1", Age = 10
                    });

                    database.Insert(new SimpleForeignKey {
                        Name = "Some Name 1", DogId = dogId
                    });

                    string tableName;
                    switch (dialect)
                    {
                    case SqlServer2012Dialect _:
                        tableName = "dbo.SimpleForeignKeys";
                        break;

                    case PostgreSqlDialect _:
                        tableName = "public.simple_foreign_key";
                        break;

                    default:
                        throw new NotSupportedException("Unknown dialect: " + dialect.GetType().Name);
                    }

                    // Act
                    Action act = () => DataWiper.ClearAllData(database, new HashSet <string> {
                        tableName
                    });

                    // Assert
                    act.Should().Throw <Exception>();

                    // Cleanup
                    database.DeleteAll <SimpleForeignKey>();
                }
            }
示例#18
0
            public void Deletes_data_from_simple_table()
            {
                // Arrange
                this.database.Insert(new User {
                    Name = "Some Name 1", Age = 10
                });
                this.database.Insert(new User {
                    Name = "Some Name 2", Age = 10
                });
                this.database.Insert(new User {
                    Name = "Some Name 3", Age = 10
                });
                this.database.Insert(new User {
                    Name = "Some Name 4", Age = 11
                });

                var sut = new DataWiper();

                // Act
                sut.ClearAllData(this.database);

                // Assert
                this.database.Count <User>().Should().Be(0);
            }