64 lines
1.6 KiB
Go
64 lines
1.6 KiB
Go
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)
|
|
}
|
|
}
|