veza/veza-backend-api/internal/testutils
2025-12-06 17:21:59 +01:00
..
integration STABILISATION: phase 3–5 – API contract, tests & chat-server hardening 2025-12-06 17:21:59 +01:00
servicemocks adding initial backend API (Go) 2025-12-03 20:29:37 +01:00
benchmark.go adding initial backend API (Go) 2025-12-03 20:29:37 +01:00
db.go STABILISATION: phase 3–5 – API contract, tests & chat-server hardening 2025-12-06 17:21:59 +01:00
db_cleanup_test.go adding initial backend API (Go) 2025-12-03 20:29:37 +01:00
db_test.go adding initial backend API (Go) 2025-12-03 20:29:37 +01:00
db_utils.go adding initial backend API (Go) 2025-12-03 20:29:37 +01:00
fixtures.go STABILISATION: phase 3–5 – API contract, tests & chat-server hardening 2025-12-06 17:21:59 +01:00
fixtures_factory_test.go.disabled adding initial backend API (Go) 2025-12-03 20:29:37 +01:00
fixtures_test.go STABILISATION: phase 3–5 – API contract, tests & chat-server hardening 2025-12-06 17:21:59 +01:00
golden.go adding initial backend API (Go) 2025-12-03 20:29:37 +01:00
golden_test.go adding initial backend API (Go) 2025-12-03 20:29:37 +01:00
parallel.go adding initial backend API (Go) 2025-12-03 20:29:37 +01:00
parallel_test.go adding initial backend API (Go) 2025-12-03 20:29:37 +01:00
performance.go adding initial backend API (Go) 2025-12-03 20:29:37 +01:00
performance_test.go adding initial backend API (Go) 2025-12-03 20:29:37 +01:00
README.md adding initial backend API (Go) 2025-12-03 20:29:37 +01:00
setup.go STABILISATION: phase 3–5 – API contract, tests & chat-server hardening 2025-12-06 17:21:59 +01:00
table_test.go adding initial backend API (Go) 2025-12-03 20:29:37 +01:00
table_test_test.go adding initial backend API (Go) 2025-12-03 20:29:37 +01:00

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