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) } } }