veza/veza-backend-api/internal/testutils/README.md
2025-12-03 20:29:37 +01:00

88 lines
3.2 KiB
Markdown

# 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.