# Test Utilities Package Ce package fournit des utilitaires pour faciliter l'écriture de tests dans le projet Veza. ## Fonctions disponibles ### Gestion de la base de données de test #### `SetupTestDB() *gorm.DB` Crée une base de données de test en mémoire avec toutes les tables nécessaires. Utilise SQLite en mémoire pour des tests rapides sans dépendance externe. **Exemple d'utilisation:** ```go func TestMyFeature(t *testing.T) { db := testutils.SetupTestDB() defer testutils.CleanupTestDB(db) // Votre code de test ici } ``` #### `CleanupTestDB(db *gorm.DB) error` Ferme proprement la base de données de test. #### `ResetTestDB(db *gorm.DB) error` Supprime toutes les données de la base de données de test. Utile pour réinitialiser l'état entre les tests. #### `GetDBStats(db *gorm.DB) (*sql.DBStats, error)` Retourne les statistiques de la base de données de test. ### Fixtures de données #### Utilisateurs - **`CreateTestUser(db *gorm.DB) (*models.User, error)`**: Crée un utilisateur de test avec des valeurs par défaut. - **`CreateTestUserWithCustomData(db *gorm.DB, username, email string) (*models.User, error)`**: Crée un utilisateur de test avec des données personnalisées. - **`CreateTestAdmin(db *gorm.DB) (*models.User, error)`**: Crée un utilisateur administrateur de test. - **`CreateMultipleTestUsers(db *gorm.DB, count int) ([]*models.User, error)`**: Crée plusieurs utilisateurs de test. #### Tracks - **`CreateTestTrack(db *gorm.DB, creatorID int64) (*models.Track, error)`**: Crée un track de test. - **`CreateTestTrackWithCustomData(db *gorm.DB, creatorID int64, title, artist string) (*models.Track, error)`**: Crée un track de test avec des données personnalisées. - **`CreateMultipleTestTracks(db *gorm.DB, creatorID int64, count int) ([]*models.Track, error)`**: Crée plusieurs tracks de test. #### Autres - **`CreateTestPlaylist(db *gorm.DB, userID int64) (*models.Playlist, error)`**: Crée une playlist de test. - **`CreateTestRoom(db *gorm.DB, createdBy int64) (*models.Room, error)`**: Crée une room de test. - **`CreateTestMessage(db *gorm.DB, roomID, userID int64, content string) (*models.Message, error)`**: Crée un message de test. ## Exemple complet ```go package mypackage_test import ( "testing" "veza-backend-api/internal/testutils" "github.com/stretchr/testify/assert" ) func TestMyFeature(t *testing.T) { // Setup db := testutils.SetupTestDB() defer testutils.CleanupTestDB(db) // Créer des données de test user, err := testutils.CreateTestUser(db) assert.NoError(t, err) track, err := testutils.CreateTestTrack(db, user.ID) assert.NoError(t, err) // Votre test ici assert.Equal(t, user.ID, track.CreatorID) // Cleanup (optionnel si on utilise defer) // testutils.ResetTestDB(db) } ``` ## Notes importantes - La base de données de test utilise SQLite en mémoire, donc les données sont perdues après la fermeture. - Les contraintes de clés étrangères sont respectées. - Le modèle `Session` n'est pas inclus dans les migrations automatiques car il utilise `uuid.UUID` avec `gen_random_uuid()` qui n'est pas supporté par SQLite.