Files
Agent-System/internal/db/migrate_test.go
T

48 lines
1.1 KiB
Go

package db
import (
"context"
"os"
"testing"
"time"
"github.com/jackc/pgx/v5/pgxpool"
)
func TestMigrationGate_ExpectedFilesMatchAppliedVersion(t *testing.T) {
migDir := ResolveMigrationsDir()
expected, err := ExpectedMigrationCount(migDir)
if err != nil {
t.Fatalf("count migrations: %v", err)
}
if expected < 1 {
t.Fatal("expected at least one migration file")
}
dsn := os.Getenv("TEST_DATABASE_URL")
if dsn == "" {
t.Skip("TEST_DATABASE_URL not set; migration gate file count only")
}
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
defer cancel()
pool, err := pgxpool.New(ctx, dsn)
if err != nil {
t.Skipf("postgres unavailable: %v", err)
}
defer pool.Close()
if err := pool.Ping(ctx); err != nil {
t.Skipf("postgres ping failed: %v", err)
}
if err := RunMigrations(ctx, pool, migDir); err != nil {
t.Fatalf("RunMigrations: %v", err)
}
version, err := CurrentVersion(ctx, pool)
if err != nil {
t.Fatalf("CurrentVersion: %v", err)
}
if int(version) < expected {
t.Fatalf("applied schema version %d behind migration files %d", version, expected)
}
}