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