48 lines
1.1 KiB
Go
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)
|
|
}
|
|
}
|