// Package databasetest builds a WebhookDBManager for tests in other // packages. package databasetest import ( "log/slog" "os" "testing" "github.com/stretchr/testify/require" "go.uber.org/fx/fxtest" "sneak.berlin/go/webhooker/internal/config" "sneak.berlin/go/webhooker/internal/database" ) // NewWebhookDBManager creates a WebhookDBManager backed by the given // data directory, logging at DEBUG to standard error. func NewWebhookDBManager( t *testing.T, dataDir string, ) *database.WebhookDBManager { t.Helper() return NewWebhookDBManagerWithLogger( t, dataDir, slog.New(slog.NewTextHandler( os.Stderr, &slog.HandlerOptions{Level: slog.LevelDebug}, )), ) } // NewWebhookDBManagerWithLogger is NewWebhookDBManager with the // logger supplied by the caller. The per-webhook databases this manager // opens hand that logger to gormlog, so a test that needs to see the SQL // the service emits can capture it. // // It is built through database.NewWebhookDBManager on a lifecycle that // is never started, so nothing closes its databases but the caller. func NewWebhookDBManagerWithLogger( t *testing.T, dataDir string, log *slog.Logger, ) *database.WebhookDBManager { t.Helper() mgr, err := database.NewWebhookDBManager( fxtest.NewLifecycle(t), database.WebhookDBManagerParams{ Config: &config.Config{DataDir: dataDir}, Logger: log, }, ) require.NoError(t, err) return mgr }