package postgres import ( "context" "os" "testing" "time" "github.com/jackc/pgx/v5/pgxpool" "knowledge-governance/internal/governance" ) func TestUISettingsActivationRetiresPreviousRevisionIntegration(t *testing.T) { databaseURL := isolatedIntegrationDatabaseURL(t, os.Getenv("TEST_DATABASE_URL")) if databaseURL == "" { t.Skip("TEST_DATABASE_URL is not set") } ctx := context.Background() pool, err := pgxpool.New(ctx, databaseURL) if err != nil { t.Fatal(err) } defer pool.Close() if err := ApplyMigrations(ctx, pool); err != nil { t.Fatal(err) } store := NewStore(pool) previous, err := store.GetActiveUISettings(ctx) if err != nil || previous.ID != "settings-default" { t.Fatalf("previous=%#v error=%v", previous, err) } now := time.Date(2026, 9, 10, 7, 0, 0, 0, time.UTC) candidate, err := store.CreateUISettingsCandidate(ctx, governance.CreateUISettingsCandidateRequest{DocumentRefreshSeconds: 30, ResourceRefreshSeconds: 60, StalledAfterSeconds: 3600, FinalizingAfterSeconds: 14400, IngestionConcurrency: 2, UpdatedBy: "engineer-1", Now: now}) if err != nil { t.Fatal(err) } active, err := store.ActivateUISettings(ctx, candidate.ID, now.Add(time.Second)) if err != nil || active.ID != candidate.ID || active.State != "active" || active.ActivatedAt == nil { t.Fatalf("active=%#v error=%v", active, err) } again, err := store.ActivateUISettings(ctx, candidate.ID, now.Add(2*time.Second)) if err != nil || again.ID != candidate.ID || again.State != "active" { t.Fatalf("again=%#v error=%v", again, err) } var state string var retiredAt *time.Time if err := pool.QueryRow(ctx, `SELECT state,retired_at FROM ui_setting_revisions WHERE id=$1`, previous.ID).Scan(&state, &retiredAt); err != nil || state != "retired" || retiredAt == nil { t.Fatalf("previous state=%q retiredAt=%v error=%v", state, retiredAt, err) } }