| .. | ||
| integration | ||
| servicemocks | ||
| benchmark.go | ||
| db.go | ||
| db_cleanup_test.go | ||
| db_test.go | ||
| db_utils.go | ||
| fixtures.go | ||
| fixtures_factory_test.go.disabled | ||
| fixtures_test.go | ||
| golden.go | ||
| golden_test.go | ||
| parallel.go | ||
| parallel_test.go | ||
| performance.go | ||
| performance_test.go | ||
| README.md | ||
| setup.go | ||
| table_test.go | ||
| table_test_test.go | ||
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:
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
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
Sessionn'est pas inclus dans les migrations automatiques car il utiliseuuid.UUIDavecgen_random_uuid()qui n'est pas supporté par SQLite.