diff --git a/riverdriver/riverdatabasesql/river_database_sql_driver_test.go b/riverdriver/riverdatabasesql/river_database_sql_driver_test.go index b5d2e59e..a452dd01 100644 --- a/riverdriver/riverdatabasesql/river_database_sql_driver_test.go +++ b/riverdriver/riverdatabasesql/river_database_sql_driver_test.go @@ -20,7 +20,7 @@ var _ riverdriver.Driver[*sql.Tx] = New(nil) func TestNew(t *testing.T) { t.Parallel() - t.Run("AllowsNilDatabasePool", func(t *testing.T) { + t.Run("DatabasePool", func(t *testing.T) { t.Parallel() dbPool := &sql.DB{} @@ -28,12 +28,24 @@ func TestNew(t *testing.T) { require.Equal(t, dbPool, driver.dbPool) }) - t.Run("AllowsNilDatabasePool", func(t *testing.T) { + t.Run("NoDatabasePool", func(t *testing.T) { t.Parallel() driver := New(nil) require.Nil(t, driver.dbPool) }) + + t.Run("PollOnly", func(t *testing.T) { + t.Parallel() + + driver := New(&sql.DB{}) + require.Nil(t, driver.listenerDriver) + require.False(t, driver.SupportsListener()) + require.True(t, driver.SupportsListenNotify()) + require.PanicsWithValue(t, riverdriver.ErrNotImplemented, func() { + driver.GetListener(&riverdriver.GetListenenerParams{}) + }) + }) } func TestNewWithPgxListener(t *testing.T) { diff --git a/riverdriver/riverdrivertest/driver_client_test.go b/riverdriver/riverdrivertest/driver_client_test.go index 644cffae..83bb4c9a 100644 --- a/riverdriver/riverdrivertest/driver_client_test.go +++ b/riverdriver/riverdrivertest/driver_client_test.go @@ -54,6 +54,26 @@ func TestClientWithDriverRiverDatabaseSQLLibPQ(t *testing.T) { func TestClientWithDriverRiverDatabaseSQLPgx(t *testing.T) { t.Parallel() + var ( + ctx = context.Background() + dbPool = riversharedtest.DBPool(ctx, t) + stdPool = stdlib.OpenDBFromPool(dbPool) + driver = riverdatabasesql.New(stdPool) + ) + t.Cleanup(func() { require.NoError(t, stdPool.Close()) }) + + ExerciseClient(ctx, t, + func(ctx context.Context, t *testing.T) (riverdriver.Driver[*sql.Tx], string) { + t.Helper() + + return driver, riverdbtest.TestSchema(ctx, t, driver, nil) + }, + ) +} + +func TestClientWithDriverRiverDatabaseSQLPgxWithPgxListener(t *testing.T) { + t.Parallel() + var ( ctx = context.Background() dbPool = riversharedtest.DBPool(ctx, t) @@ -71,7 +91,7 @@ func TestClientWithDriverRiverDatabaseSQLPgx(t *testing.T) { ) } -func TestClientWithDriverRiverDatabaseSQLPgxJobCompleteTx(t *testing.T) { +func TestClientWithDriverRiverDatabaseSQLPgxWithPgxListenerJobCompleteTx(t *testing.T) { t.Parallel() var ( diff --git a/riverdriver/riverdrivertest/driver_test.go b/riverdriver/riverdrivertest/driver_test.go index 30064d7e..80abb865 100644 --- a/riverdriver/riverdrivertest/driver_test.go +++ b/riverdriver/riverdrivertest/driver_test.go @@ -61,7 +61,37 @@ func TestDriverRiverDatabaseSQLLibPQ(t *testing.T) { }) } -func TestDriverRiverDatabaseSQLPgx(t *testing.T) { +func TestDriverRiverDatabaseSQLPgxNoListener(t *testing.T) { + t.Parallel() + + var ( + ctx = context.Background() + dbPool = riversharedtest.DBPool(ctx, t) + stdPool = stdlib.OpenDBFromPool(dbPool) + driver = riverdatabasesql.New(stdPool) + ) + t.Cleanup(func() { require.NoError(t, stdPool.Close()) }) + + riverdrivertest.Exercise(ctx, t, + func(ctx context.Context, t *testing.T, opts *riverdbtest.TestSchemaOpts) (riverdriver.Driver[*sql.Tx], string) { + t.Helper() + + return driver, riverdbtest.TestSchema(ctx, t, driver, opts) + }, + func(ctx context.Context, t *testing.T) (riverdriver.Executor, riverdriver.Driver[*sql.Tx]) { + t.Helper() + + tx, schema := riverdbtest.TestTx(ctx, t, driver, nil) + + // The same thing as the built-in riverdbtest.TestTxPgx does. + _, err := tx.ExecContext(ctx, "SET search_path TO '"+schema+"'") + require.NoError(t, err) + + return driver.UnwrapExecutor(tx), driver + }) +} + +func TestDriverRiverDatabaseSQLPgxWithPgxListener(t *testing.T) { t.Parallel() var (