88 lines
3.2 KiB
Markdown
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.
|
|
|