- docs: SCOPE_CONTROL, CONTRIBUTING, README, .github templates - frontend: DeveloperDashboardView, Player components, MSW handlers, auth, reactQuerySync - backend: playback_analytics, playlist_service, testutils, integration README Excluded (artifacts): .auth, playwright-report, test-results, storybook_audit_detailed.json
235 lines
5.3 KiB
Go
235 lines
5.3 KiB
Go
package testutils
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"veza-backend-api/internal/models"
|
|
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
func TestCleanupOptions(t *testing.T) {
|
|
opts := CleanupOptions{
|
|
Cascade: true,
|
|
UseTransaction: false,
|
|
|
|
Tables: []string{"users", "tracks"},
|
|
}
|
|
|
|
if !opts.Cascade {
|
|
t.Error("Expected Cascade to be true")
|
|
}
|
|
if opts.UseTransaction {
|
|
t.Error("Expected UseTransaction to be false")
|
|
}
|
|
if len(opts.Tables) != 2 {
|
|
t.Errorf("Expected 2 tables, got %d", len(opts.Tables))
|
|
}
|
|
}
|
|
|
|
func TestCleanupDatabaseWithOptions_NoTransaction(t *testing.T) {
|
|
SkipIfDockerUnavailable(t)
|
|
db := SetupTestDB()
|
|
|
|
// Créer quelques données de test
|
|
user := &models.User{
|
|
Username: "testuser",
|
|
Email: "test@example.com",
|
|
PasswordHash: "hash",
|
|
Role: "user",
|
|
}
|
|
db.Create(user)
|
|
|
|
var count int64
|
|
db.Model(&models.User{}).Count(&count)
|
|
if count == 0 {
|
|
t.Fatal("Failed to create test user")
|
|
}
|
|
|
|
// Nettoyer avec options
|
|
opts := CleanupOptions{
|
|
Cascade: true,
|
|
UseTransaction: false,
|
|
SkipForeignKeys: false,
|
|
}
|
|
|
|
err := CleanupDatabaseWithOptions(t, db, opts)
|
|
if err != nil {
|
|
t.Errorf("CleanupDatabaseWithOptions failed: %v", err)
|
|
}
|
|
|
|
// Vérifier que les données ont été nettoyées
|
|
db.Model(&models.User{}).Count(&count)
|
|
if count != 0 {
|
|
t.Errorf("Expected 0 users after cleanup, got %d", count)
|
|
}
|
|
}
|
|
|
|
func TestCleanupDatabaseWithOptions_WithTransaction(t *testing.T) {
|
|
SkipIfDockerUnavailable(t)
|
|
db := SetupTestDB()
|
|
|
|
// Créer quelques données de test
|
|
user := &models.User{
|
|
Username: "testuser",
|
|
Email: "test@example.com",
|
|
PasswordHash: "hash",
|
|
Role: "user",
|
|
}
|
|
db.Create(user)
|
|
|
|
var countBefore int64
|
|
db.Model(&models.User{}).Count(&countBefore)
|
|
if countBefore == 0 {
|
|
t.Fatal("Failed to create test user")
|
|
}
|
|
|
|
// Nettoyer avec transaction (qui sera rollback)
|
|
opts := CleanupOptions{
|
|
Cascade: true,
|
|
UseTransaction: true,
|
|
SkipForeignKeys: false,
|
|
}
|
|
|
|
err := CleanupDatabaseWithOptions(t, db, opts)
|
|
if err != nil {
|
|
t.Errorf("CleanupDatabaseWithOptions failed: %v", err)
|
|
}
|
|
|
|
// Après rollback, les données devraient toujours exister
|
|
var countAfter int64
|
|
db.Model(&models.User{}).Count(&countAfter)
|
|
if countAfter == 0 {
|
|
t.Error("Expected data to still exist after transaction rollback")
|
|
}
|
|
}
|
|
|
|
func TestCleanupDatabaseWithOptions_SpecificTables(t *testing.T) {
|
|
SkipIfDockerUnavailable(t)
|
|
db := SetupTestDB()
|
|
|
|
// Créer un utilisateur
|
|
user := &models.User{
|
|
Username: "testuser",
|
|
Email: "test@example.com",
|
|
PasswordHash: "hash",
|
|
Role: "user",
|
|
}
|
|
db.Create(user)
|
|
|
|
// Nettoyer uniquement la table users
|
|
opts := CleanupOptions{
|
|
Cascade: true,
|
|
UseTransaction: false,
|
|
SkipForeignKeys: false,
|
|
Tables: []string{"users"},
|
|
}
|
|
|
|
err := CleanupDatabaseWithOptions(t, db, opts)
|
|
if err != nil {
|
|
t.Errorf("CleanupDatabaseWithOptions failed: %v", err)
|
|
}
|
|
|
|
// Vérifier que les utilisateurs ont été nettoyés
|
|
var count int64
|
|
db.Model(&models.User{}).Count(&count)
|
|
if count != 0 {
|
|
t.Errorf("Expected 0 users after cleanup, got %d", count)
|
|
}
|
|
}
|
|
|
|
func TestCleanupSpecificTables(t *testing.T) {
|
|
SkipIfDockerUnavailable(t)
|
|
db := SetupTestDB()
|
|
|
|
// Créer un utilisateur
|
|
user := &models.User{
|
|
Username: "testuser",
|
|
Email: "test@example.com",
|
|
PasswordHash: "hash",
|
|
Role: "user",
|
|
}
|
|
db.Create(user)
|
|
|
|
// Nettoyer uniquement users
|
|
err := CleanupSpecificTables(t, db, []string{"users"})
|
|
if err != nil {
|
|
t.Errorf("CleanupSpecificTables failed: %v", err)
|
|
}
|
|
|
|
var count int64
|
|
db.Model(&models.User{}).Count(&count)
|
|
if count != 0 {
|
|
t.Errorf("Expected 0 users after cleanup, got %d", count)
|
|
}
|
|
}
|
|
|
|
func TestCleanupWithTransaction(t *testing.T) {
|
|
SkipIfDockerUnavailable(t)
|
|
db := SetupTestDB()
|
|
|
|
// Créer un utilisateur
|
|
user := &models.User{
|
|
Username: "testuser",
|
|
Email: "test@example.com",
|
|
PasswordHash: "hash",
|
|
Role: "user",
|
|
}
|
|
db.Create(user)
|
|
|
|
var countBefore int64
|
|
db.Model(&models.User{}).Count(&countBefore)
|
|
|
|
// Nettoyer avec transaction (qui sera rollback)
|
|
err := CleanupWithTransaction(t, db, func(tx *gorm.DB) {
|
|
tx.Exec("TRUNCATE TABLE users")
|
|
})
|
|
if err != nil {
|
|
t.Errorf("CleanupWithTransaction failed: %v", err)
|
|
}
|
|
|
|
// Après rollback, les données devraient toujours exister
|
|
var countAfter int64
|
|
db.Model(&models.User{}).Count(&countAfter)
|
|
if countAfter != countBefore {
|
|
t.Errorf("Expected data to still exist after transaction rollback. Before: %d, After: %d", countBefore, countAfter)
|
|
}
|
|
}
|
|
|
|
func TestRegisterCleanupHook(t *testing.T) {
|
|
cleanupCalled := false
|
|
|
|
RegisterCleanupHook(t, func() {
|
|
cleanupCalled = true
|
|
})
|
|
|
|
// Le cleanup sera appelé automatiquement à la fin du test
|
|
// On ne peut pas vraiment tester que ça fonctionne sans attendre la fin du test,
|
|
// mais on peut au moins vérifier que la fonction ne panique pas
|
|
if cleanupCalled {
|
|
t.Error("Cleanup should not be called immediately")
|
|
}
|
|
}
|
|
|
|
func TestGetDefaultTables(t *testing.T) {
|
|
tables := getDefaultTables()
|
|
|
|
if len(tables) == 0 {
|
|
t.Error("Expected default tables list to not be empty")
|
|
}
|
|
|
|
// Vérifier quelques tables attendues
|
|
expectedTables := []string{"users", "tracks", "playlists", "rooms"}
|
|
for _, expected := range expectedTables {
|
|
found := false
|
|
for _, table := range tables {
|
|
if table == expected {
|
|
found = true
|
|
break
|
|
}
|
|
}
|
|
if !found {
|
|
t.Errorf("Expected table %s to be in default tables list", expected)
|
|
}
|
|
}
|
|
}
|