package alertdefaults import ( "context" "os" "testing" "time" "github.com/itworx/pulse/internal/alert" "github.com/itworx/pulse/internal/database" "github.com/itworx/pulse/internal/metriccatalog" ) func TestPostgreSQLDefaultSeedIsIdempotent(t *testing.T) { dsn := os.Getenv("PULSE_TEST_DATABASE_URL") if dsn == "" { t.Skip("PULSE_TEST_DATABASE_URL is not set") } ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second) defer cancel() pool, err := database.NewPool(ctx, database.Config{URL: dsn, MaxConns: 6, MinConns: 1}) 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) } repository := alert.Repository{Pool: pool, Registry: registry} first, err := Seed(ctx, repository, registry, "system-defaults") if err != nil { t.Fatal(err) } second, err := Seed(ctx, repository, registry, "system-defaults") if err != nil { t.Fatal(err) } if second.Added != 0 || second.Existing != first.Added+first.Existing { t.Fatalf("seed reports first=%+v second=%+v", first, second) } rules, err := Load(registry) if err != nil { t.Fatal(err) } for _, document := range rules { loaded, err := repository.Get(ctx, document.ID) if err != nil || loaded.ID != document.ID { t.Fatalf("default %s was not readable after restart-safe seed: rule=%+v err=%v", document.ID, loaded, err) } } }