veza/veza-backend-api/internal/testutils/db_utils.go

65 lines
1.7 KiB
Go
Raw Normal View History

2025-12-03 19:29:37 +00:00
package testutils
import (
"fmt"
"os"
"testing"
"veza-backend-api/internal/database"
)
// GetTestDatabaseURL retourne l'URL de la base de données de test (T0041)
func GetTestDatabaseURL() string {
dbURL := os.Getenv("TEST_DATABASE_URL")
if dbURL == "" {
return "postgresql://veza:password@localhost:5432/veza_test_db"
}
return dbURL
}
// CleanupDatabase nettoie toutes les tables de la base de données (T0041)
func CleanupDatabase(t *testing.T, db *database.Database) {
if db == nil || db.GormDB == nil {
return
}
// Désactiver les foreign keys temporairement pour PostgreSQL
// Note: PostgreSQL utilise session_replication_role pour désactiver les triggers
db.GormDB.Exec("SET session_replication_role = 'replica'")
defer db.GormDB.Exec("SET session_replication_role = 'origin'")
// Supprimer toutes les données dans l'ordre inverse des dépendances
// Liste basée sur les modèles GORM et les migrations
tables := []string{
"messages",
"playlist_tracks",
"playlists",
"tracks",
"refresh_tokens",
"room_members",
"rooms",
"users",
// Tables additionnelles qui peuvent exister
"oauth_accounts",
"user_profiles",
"email_verifications",
"notifications",
"follows",
"analytics",
"admin_logs",
"audit_logs",
"totp_configs",
"recovery_codes",
"sessions",
"schema_migrations",
}
for _, table := range tables {
// Utiliser TRUNCATE CASCADE pour supprimer les données et les dépendances
if err := db.GormDB.Exec(fmt.Sprintf("TRUNCATE TABLE %s CASCADE", table)).Error; err != nil {
// Ignorer les erreurs si la table n'existe pas (normal pour certains tests)
t.Logf("Note: Could not truncate table %s (may not exist): %v", table, err)
}
}
}