Files
ITWorx Pulse release export bd774932d5
Public source validation / validate (push) Failing after 3m8s
Publish ITWorx Pulse source
2026-09-03 02:09:19 +02:00

57 lines
1.8 KiB
Go

package onboarding
import (
"context"
"os"
"testing"
"github.com/itworx/pulse/internal/alert"
"github.com/itworx/pulse/internal/alertdefaults"
"github.com/itworx/pulse/internal/dashboard"
"github.com/itworx/pulse/internal/database"
"github.com/itworx/pulse/internal/metriccatalog"
)
func TestPostgreSQLOnboardingIsResumableAndIdempotent(t *testing.T) {
dsn := os.Getenv("PULSE_TEST_DATABASE_URL")
if dsn == "" {
t.Skip("PULSE_TEST_DATABASE_URL is not set")
}
ctx := context.Background()
pool, err := database.NewPool(ctx, database.Config{URL: dsn})
if err != nil {
t.Fatal(err)
}
defer pool.Close()
if err := database.Migrate(ctx, pool); err != nil {
t.Fatal(err)
}
registry, err := metriccatalog.DefaultRegistry()
if err != nil {
t.Fatal(err)
}
alerts := alert.Repository{Pool: pool, Registry: registry}
if _, err := alertdefaults.Seed(ctx, alerts, registry, "system-defaults"); err != nil {
t.Fatal(err)
}
service := Service{State: StateStore{Pool: pool}, Pool: pool, Dashboards: dashboard.Repository{Pool: pool}, Alerts: alerts, AuthMode: "mock"}
first, err := service.Complete(ctx, Choice{Dashboard: "default", Rules: "default"})
if err != nil {
t.Fatal(err)
}
second, err := service.Complete(ctx, Choice{Dashboard: "default", Rules: "default"})
if err != nil {
t.Fatal(err)
}
if !first.State.Completed || !second.State.Completed || first.State.DashboardID == "" || first.State.DashboardID != second.State.DashboardID {
t.Fatalf("non-idempotent completion: first=%+v second=%+v", first.State, second.State)
}
var dashboards int
if err := pool.QueryRow(ctx, `SELECT count(*) FROM dashboards WHERE slug=$1 AND archived_at IS NULL`, DefaultSlug).Scan(&dashboards); err != nil {
t.Fatal(err)
}
if dashboards != 1 {
t.Fatalf("default dashboard count=%d, want 1", dashboards)
}
}