veza/veza-backend-api/internal/testutils/fixtures_test.go
senke 286be8ba1d
Some checks failed
Backend API CI / test-unit (push) Failing after 0s
Backend API CI / test-integration (push) Failing after 0s
Frontend CI / test (push) Failing after 0s
Storybook Audit / Build & audit Storybook (push) Failing after 0s
chore(v0.102): consolidate remaining changes — docs, frontend, backend
- 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
2026-02-20 13:02:12 +01:00

272 lines
7.3 KiB
Go

package testutils
import (
"testing"
"veza-backend-api/internal/models"
"github.com/google/uuid"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestCreateTestUser(t *testing.T) {
SkipIfDockerUnavailable(t)
db := SetupTestDB()
require.NotNil(t, db)
defer CleanupTestDB(db)
user, err := CreateTestUser(db)
require.NoError(t, err)
require.NotNil(t, user)
// Username and email are made unique with UUID suffix, so check they contain the original values
assert.Contains(t, user.Username, "testuser")
assert.Contains(t, user.Email, "test")
assert.Contains(t, user.Email, "@example.com")
assert.True(t, user.IsActive)
assert.True(t, user.IsVerified)
assert.False(t, user.IsAdmin)
assert.NotEqual(t, uuid.Nil, user.ID)
}
func TestCreateTestUserWithCustomData(t *testing.T) {
SkipIfDockerUnavailable(t)
db := SetupTestDB()
require.NotNil(t, db)
defer CleanupTestDB(db)
username := "customuser"
email := "custom@example.com"
user, err := CreateTestUserWithCustomData(db, username, email)
require.NoError(t, err)
require.NotNil(t, user)
// Username and email are made unique with UUID suffix, so check they contain the original values
assert.Contains(t, user.Username, username)
// Email is made unique by adding UUID to local part, so check it contains the original local part and domain
assert.Contains(t, user.Email, "custom")
assert.Contains(t, user.Email, "@example.com")
}
func TestCreateTestAdmin(t *testing.T) {
SkipIfDockerUnavailable(t)
db := SetupTestDB()
require.NotNil(t, db)
defer CleanupTestDB(db)
admin, err := CreateTestAdmin(db)
require.NoError(t, err)
require.NotNil(t, admin)
// Username and email are made unique with UUID suffix, so check they contain the original values
assert.Contains(t, admin.Username, "admin")
assert.Contains(t, admin.Email, "admin")
assert.Contains(t, admin.Email, "@example.com")
assert.True(t, admin.IsAdmin)
assert.Equal(t, "admin", admin.Role)
}
func TestCreateTestTrack(t *testing.T) {
SkipIfDockerUnavailable(t)
db := SetupTestDB()
require.NotNil(t, db)
defer CleanupTestDB(db)
user, err := CreateTestUser(db)
require.NoError(t, err)
track, err := CreateTestTrack(db, user.ID)
require.NoError(t, err)
require.NotNil(t, track)
assert.Equal(t, "Test Track", track.Title)
assert.Equal(t, "Test Artist", track.Artist)
assert.Equal(t, 180, track.Duration)
assert.Equal(t, user.ID, track.UserID) // Changed CreatorID to UserID
assert.NotEqual(t, uuid.Nil, track.ID)
}
func TestCreateTestTrackWithCustomData(t *testing.T) {
SkipIfDockerUnavailable(t)
db := SetupTestDB()
require.NotNil(t, db)
defer CleanupTestDB(db)
user, err := CreateTestUser(db)
require.NoError(t, err)
title := "Custom Track"
artist := "Custom Artist"
track, err := CreateTestTrackWithCustomData(db, user.ID, title, artist)
require.NoError(t, err)
require.NotNil(t, track)
assert.Equal(t, title, track.Title)
assert.Equal(t, artist, track.Artist)
}
func TestCreateTestPlaylist(t *testing.T) {
SkipIfDockerUnavailable(t)
db := SetupTestDB()
require.NotNil(t, db)
defer CleanupTestDB(db)
user, err := CreateTestUser(db)
require.NoError(t, err)
playlist, err := CreateTestPlaylist(db, user.ID)
require.NoError(t, err)
require.NotNil(t, playlist)
assert.Equal(t, "Test Playlist", playlist.Title) // Changed Name to Title
assert.Equal(t, user.ID, playlist.UserID)
assert.NotEqual(t, uuid.Nil, playlist.ID)
}
func TestCreateTestRoom(t *testing.T) {
SkipIfDockerUnavailable(t)
db := SetupTestDB()
require.NotNil(t, db)
defer CleanupTestDB(db)
user, err := CreateTestUser(db)
require.NoError(t, err)
room, err := CreateTestRoom(db, user.ID) // CreatedBy is UUID now
require.NoError(t, err)
require.NotNil(t, room)
assert.Equal(t, "Test Room", room.Name)
assert.Equal(t, user.ID, room.CreatedBy)
assert.False(t, room.IsPrivate)
assert.Equal(t, "public", room.Type)
}
func TestCreateTestMessage(t *testing.T) {
SkipIfDockerUnavailable(t)
db := SetupTestDB()
require.NotNil(t, db)
defer CleanupTestDB(db)
user, err := CreateTestUser(db)
require.NoError(t, err)
room, err := CreateTestRoom(db, user.ID)
require.NoError(t, err)
content := "Test message content"
message, err := CreateTestMessage(db, room.ID, user.ID, content) // room.ID is UUID now
require.NoError(t, err)
require.NotNil(t, message)
assert.Equal(t, content, message.Content)
assert.Equal(t, room.ID, message.RoomID)
assert.Equal(t, user.ID, message.UserID)
assert.Equal(t, "text", message.Type)
assert.False(t, message.IsEdited)
assert.False(t, message.IsDeleted)
}
func TestCreateTestSession(t *testing.T) {
SkipIfDockerUnavailable(t)
db := SetupTestDB()
require.NotNil(t, db)
defer CleanupTestDB(db)
user, err := CreateTestUser(db)
require.NoError(t, err)
session, err := CreateTestSession(db, user.ID) // User.ID is UUID
require.NoError(t, err)
require.NotNil(t, session)
assert.Equal(t, user.ID, session.UserID)
assert.NotEqual(t, uuid.Nil, session.ID) // Session.ID is uuid.UUID
}
func TestCreateMultipleTestUsers(t *testing.T) {
SkipIfDockerUnavailable(t)
db := SetupTestDB()
require.NotNil(t, db)
defer CleanupTestDB(db)
count := 5
users, err := CreateMultipleTestUsers(db, count)
require.NoError(t, err)
require.Len(t, users, count)
// Vérifier que tous les utilisateurs ont des IDs uniques
// IDs sont maintenant UUID, donc comparaison avec uuid.Nil
for _, user := range users {
assert.NotEqual(t, uuid.Nil, user.ID)
}
// Vérifier que les usernames sont différents
usernames := make(map[string]bool)
for _, user := range users {
assert.False(t, usernames[user.Username], "Duplicate username")
usernames[user.Username] = true
}
}
func TestCreateMultipleTestTracks(t *testing.T) {
SkipIfDockerUnavailable(t)
db := SetupTestDB()
require.NotNil(t, db)
defer CleanupTestDB(db)
user, err := CreateTestUser(db)
require.NoError(t, err)
count := 3
tracks, err := CreateMultipleTestTracks(db, user.ID, count)
require.NoError(t, err)
require.Len(t, tracks, count)
// Vérifier que tous les tracks ont le même créateur
for _, track := range tracks {
assert.Equal(t, user.ID, track.UserID) // Changed CreatorID to UserID
assert.NotEqual(t, uuid.Nil, track.ID)
}
// Vérifier que les titres sont différents
titles := make(map[string]bool)
for _, track := range tracks {
assert.False(t, titles[track.Title], "Duplicate track title")
titles[track.Title] = true
}
}
// Test helper pour vérifier que les fixtures respectent les contraintes
func TestFixtures_ForeignKeyConstraints(t *testing.T) {
SkipIfDockerUnavailable(t)
db := SetupTestDB()
require.NotNil(t, db)
defer CleanupTestDB(db)
// Créer un utilisateur
user, err := CreateTestUser(db)
require.NoError(t, err)
// Créer un track avec le bon userID
track, err := CreateTestTrack(db, user.ID)
require.NoError(t, err)
assert.NotNil(t, track)
// Essayer de créer un track avec un userID inexistant devrait échouer en production
// mais SQLite en mémoire peut ne pas toujours faire respecter les contraintes
invalidTrack := &models.Track{
UserID: uuid.New(), // Changed CreatorID to UserID, use new UUID
Title: "Invalid Track",
Duration: 180,
FilePath: "uploads/invalid.mp3",
FileSize: 100,
Format: "mp3",
}
err = db.Create(invalidTrack).Error
// En production, cela devrait échouer, mais en test SQLite, on peut l'ignorer
_ = err
}