package apitest import ( "os" "testing" "gorm.io/gorm" "github.com/omnex/control-plane/api/internal/db" "github.com/omnex/control-plane/api/internal/demos" "github.com/omnex/control-plane/api/internal/leads" ) // Tests d'intégration GORM/PostgreSQL. Skippés si OMNEX_TEST_DATABASE_URL absent. // En CI : lancés contre un PostgreSQL éphémère (testcontainers-go / service kind). func openTestDB(t *testing.T) *gorm.DB { t.Helper() dsn := os.Getenv("OMNEX_TEST_DATABASE_URL") if dsn == "" { t.Skip("OMNEX_TEST_DATABASE_URL non défini — test d'intégration ignoré") } gdb, err := db.Open(dsn) if err != nil { t.Fatalf("open: %v", err) } if err := db.AutoMigrate(gdb); err != nil { t.Fatalf("migrate: %v", err) } return gdb } func TestLeadsGormCRUD(t *testing.T) { gdb := openTestDB(t) store := leads.NewGormStore(gdb) created, err := store.Create(leads.Lead{Telegram: "Corp", Message: "hi"}) if err != nil { t.Fatalf("create: %v", err) } if created.ID == "" || created.Status != leads.StatusNew { t.Fatalf("lead créé invalide: %+v", created) } if _, ok := store.SetStatus(created.ID, leads.StatusContacted); !ok { t.Fatal("setstatus a échoué") } } func TestDemosGormPoolAndCapacity(t *testing.T) { gdb := openTestDB(t) if err := db.SeedExternalPool(gdb); err != nil { t.Fatalf("seed pool: %v", err) } svc := demos.NewService(demos.NewGormStore(gdb), demos.NewGormPool(gdb), demos.NoopProvisioner{}, demos.Config{}) d, err := svc.Create("") if err != nil { t.Fatalf("create: %v", err) } if _, err := svc.Delete(d.ID); err != nil { t.Fatalf("delete: %v", err) } }