public async Task WithTryOnceSynchronizationStrategyExecuteOnceIfFails() { // Arrange SynchronizationStrategy = SchemaSynchronizationStrategy.TryOnce; DatabaseDriver.CreateConnection(ConnectionString) .Returns( x => throw new ApplicationException(), x => throw new ApplicationException(), x => DbConnection); var target = GetTarget(); // Act try { await target.SynchronizeSchemaAsync(ConnectionString, DatabaseDriver, CancellationToken); } catch (ApplicationException) { } await target.SynchronizeSchemaAsync(ConnectionString, DatabaseDriver, CancellationToken); await target.SynchronizeSchemaAsync(ConnectionString, DatabaseDriver, CancellationToken); // Assert DatabaseDriver.Received(1).CreateConnection(ConnectionString); }
protected async Task <DbConnection> GetConnectionAsync(CancellationToken cancellationToken) { await Table.SynchronizeSchemaAsync(ConnectionString, DatabaseDriver, cancellationToken).ConfigureAwait(false); var connection = DatabaseDriver.CreateConnection(ConnectionString); await connection.OpenAsync(cancellationToken).ConfigureAwait(false); return(connection); }
public void DropTable(string schemaName, string tableName) { using (var connection = DatabaseDriver.CreateConnection(ConnectionString)) { connection.Open(); using (var command = connection.CreateCommand()) { command.CommandText = $"DROP TABLE IF EXISTS {DatabaseDriver.ParseIdentifier(schemaName ?? DatabaseDriver.DefaultSchema)}.{DatabaseDriver.ParseIdentifier(tableName)}"; command.ExecuteNonQuery(); } connection.Close(); } }
public TableFacts() { Schema = "my"; Name = "Items"; KeyColumnsNames = new[] { "Id" }; Columns = new Dictionary <string, SqlType>() { { "Id", new SqlType(DbType.Guid) }, { "Name", new SqlType(DbType.String, 250) }, }; SynchronizationStrategy = SchemaSynchronizationStrategy.UntilSuccess; ConnectionString = "db=fake;user=a;pass=b"; DatabaseDriver = Substitute.For <IDatabaseDriver>(); DbConnection = Substitute.For <DbConnection>(); DbCommand = Substitute.For <DbCommand>(); DbDataReader = Substitute.For <DbDataReader>(); DatabaseDriver.CreateConnection(ConnectionString).Returns(DbConnection); DatabaseDriver.GetSqlStatementTemplate(Arg.Any <SqlStatement>()).Returns(""); DbConnection.CreateCommand().Returns(DbCommand); DbCommand.ExecuteScalarAsync(Arg.Any <CancellationToken>()).Returns(true); DbCommand.ExecuteReaderAsync(Arg.Any <CancellationToken>()).Returns(DbDataReader); }