dev-pod-api-build/internal/store/testhelper_test.go
2026-04-16 04:16:36 +00:00

57 lines
1.3 KiB
Go

package store
import (
"context"
"fmt"
"log"
"os"
"testing"
embeddedpostgres "github.com/fergusstrange/embedded-postgres"
"github.com/jackc/pgx/v5/pgxpool"
)
var testPool *pgxpool.Pool
func TestMain(m *testing.M) {
postgres := embeddedpostgres.NewDatabase(
embeddedpostgres.DefaultConfig().
Port(15432).
Database("devpod_test"),
)
if err := postgres.Start(); err != nil {
log.Fatalf("start embedded postgres: %v", err)
}
ctx := context.Background()
pool, err := pgxpool.New(ctx, "postgres://postgres:postgres@localhost:15432/devpod_test?sslmode=disable")
if err != nil {
postgres.Stop()
log.Fatalf("connect to test db: %v", err)
}
testPool = pool
code := m.Run()
pool.Close()
if err := postgres.Stop(); err != nil {
log.Printf("stop embedded postgres: %v", err)
}
os.Exit(code)
}
func newTestStore(t *testing.T) *Store {
t.Helper()
ctx := context.Background()
s := New(testPool)
if err := s.Migrate(ctx); err != nil {
t.Fatalf("migrate: %v", err)
}
// Clean tables for test isolation (order matters: foreign keys)
for _, table := range []string{"runners", "usage_records", "api_keys", "users"} {
if _, err := testPool.Exec(ctx, fmt.Sprintf("DELETE FROM %s", table)); err != nil {
t.Fatalf("clean %s: %v", table, err)
}
}
return s
}