196 lines
No EOL
5 KiB
Text
196 lines
No EOL
5 KiB
Text
package testutils
|
|
|
|
import (
|
|
"fmt"
|
|
"testing"
|
|
|
|
"veza-backend-api/internal/models"
|
|
|
|
"github.com/google/uuid"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestUserFactory(t *testing.T) {
|
|
factory := NewUserFactory().
|
|
WithUsername("admin").
|
|
WithEmail("admin@example.com").
|
|
WithRole("admin")
|
|
|
|
user := factory.Build()
|
|
|
|
assert.Equal(t, "admin", user.Username)
|
|
assert.Equal(t, "admin@example.com", user.Email)
|
|
assert.Equal(t, "admin", user.Role)
|
|
assert.True(t, user.IsAdmin)
|
|
}
|
|
|
|
func TestUserFactory_WithCustomFields(t *testing.T) {
|
|
factory := NewUserFactory().
|
|
WithUsername("testuser").
|
|
WithEmail("test@example.com").
|
|
WithFirstName("John").
|
|
WithLastName("Doe").
|
|
WithIsActive(false).
|
|
WithIsVerified(true)
|
|
|
|
user := factory.Build()
|
|
|
|
assert.Equal(t, "testuser", user.Username)
|
|
assert.Equal(t, "test@example.com", user.Email)
|
|
assert.Equal(t, "John", user.FirstName)
|
|
assert.Equal(t, "Doe", user.LastName)
|
|
assert.False(t, user.IsActive)
|
|
assert.True(t, user.IsVerified)
|
|
}
|
|
|
|
func TestUserFactory_MustBuild(t *testing.T) {
|
|
db := SetupTestDB()
|
|
|
|
factory := NewUserFactory().
|
|
WithUsername("mustbuild").
|
|
WithEmail("mustbuild@example.com")
|
|
|
|
user := factory.MustBuild(db)
|
|
|
|
assert.NotEqual(t, uuid.Nil, user.ID)
|
|
assert.Equal(t, "mustbuild", user.Username)
|
|
assert.Equal(t, "mustbuild@example.com", user.Email)
|
|
|
|
// Vérifier que l'utilisateur existe en DB
|
|
var found models.User
|
|
err := db.First(&found, "id = ?", user.ID).Error
|
|
require.NoError(t, err)
|
|
assert.Equal(t, user.Username, found.Username)
|
|
}
|
|
|
|
func TestTrackFactory(t *testing.T) {
|
|
userID := uuid.New()
|
|
factory := NewTrackFactory(userID).
|
|
WithTitle("My Track").
|
|
WithArtist("My Artist").
|
|
WithDescription("A great track").
|
|
WithDuration(240)
|
|
|
|
track := factory.Build()
|
|
|
|
assert.Equal(t, userID, track.UserID)
|
|
assert.Equal(t, "My Track", track.Title)
|
|
assert.Equal(t, "My Artist", track.Artist)
|
|
assert.Equal(t, "A great track", track.Description)
|
|
assert.Equal(t, 240, track.Duration)
|
|
}
|
|
|
|
func TestTrackFactory_MustBuild(t *testing.T) {
|
|
db := SetupTestDB()
|
|
|
|
// Créer un utilisateur créateur d'abord
|
|
userFactory := NewUserFactory().WithUsername("creator")
|
|
creator := userFactory.MustBuild(db)
|
|
|
|
trackFactory := NewTrackFactory(creator.ID).
|
|
WithTitle("Test Track").
|
|
WithArtist("Test Artist")
|
|
|
|
track := trackFactory.MustBuild(db)
|
|
|
|
assert.NotZero(t, track.ID)
|
|
assert.Equal(t, creator.ID, track.UserID)
|
|
assert.Equal(t, "Test Track", track.Title)
|
|
}
|
|
|
|
func TestPlaylistFactory(t *testing.T) {
|
|
userID := uuid.New()
|
|
factory := NewPlaylistFactory(userID).
|
|
WithName("My Playlist").
|
|
WithDescription("A great playlist")
|
|
|
|
playlist := factory.Build()
|
|
|
|
assert.Equal(t, userID, playlist.UserID)
|
|
assert.Equal(t, "My Playlist", playlist.Title)
|
|
assert.Equal(t, "A great playlist", playlist.Description)
|
|
}
|
|
|
|
func TestPlaylistFactory_MustBuild(t *testing.T) {
|
|
db := SetupTestDB()
|
|
|
|
// Créer un utilisateur d'abord
|
|
userFactory := NewUserFactory().WithUsername("playlist_owner")
|
|
owner := userFactory.MustBuild(db)
|
|
|
|
playlistFactory := NewPlaylistFactory(owner.ID).
|
|
WithName("Test Playlist").
|
|
WithDescription("Test Description")
|
|
|
|
playlist := playlistFactory.MustBuild(db)
|
|
|
|
assert.NotZero(t, playlist.ID)
|
|
assert.Equal(t, owner.ID, playlist.UserID)
|
|
assert.Equal(t, "Test Playlist", playlist.Title)
|
|
}
|
|
|
|
func TestCreateUsers(t *testing.T) {
|
|
db := SetupTestDB()
|
|
|
|
users := CreateUsers(db, 5)
|
|
|
|
require.Len(t, users, 5)
|
|
for i, user := range users {
|
|
assert.NotEqual(t, uuid.Nil, user.ID)
|
|
assert.Equal(t, fmt.Sprintf("user%d", i), user.Username)
|
|
assert.Equal(t, fmt.Sprintf("user%d@example.com", i), user.Email)
|
|
}
|
|
}
|
|
|
|
func TestCreateTracks(t *testing.T) {
|
|
db := SetupTestDB()
|
|
|
|
// Créer un utilisateur créateur d'abord
|
|
userFactory := NewUserFactory().WithUsername("track_creator")
|
|
creator := userFactory.MustBuild(db)
|
|
|
|
tracks := CreateTracks(db, creator.ID, 3)
|
|
|
|
require.Len(t, tracks, 3)
|
|
for i, track := range tracks {
|
|
assert.NotZero(t, track.ID)
|
|
assert.Equal(t, creator.ID, track.UserID)
|
|
assert.Equal(t, fmt.Sprintf("Test Track %d", i+1), track.Title)
|
|
assert.Equal(t, fmt.Sprintf("Test Artist %d", i+1), track.Artist)
|
|
}
|
|
}
|
|
|
|
func TestUserFactory_Defaults(t *testing.T) {
|
|
factory := NewUserFactory()
|
|
user := factory.Build()
|
|
|
|
assert.Equal(t, "testuser", user.Username)
|
|
assert.Equal(t, "test@example.com", user.Email)
|
|
assert.Equal(t, "user", user.Role)
|
|
assert.True(t, user.IsActive)
|
|
assert.True(t, user.IsVerified)
|
|
assert.False(t, user.IsAdmin)
|
|
}
|
|
|
|
func TestTrackFactory_Defaults(t *testing.T) {
|
|
userID := uuid.New()
|
|
factory := NewTrackFactory(userID)
|
|
track := factory.Build()
|
|
|
|
assert.Equal(t, userID, track.UserID)
|
|
assert.Equal(t, "Test Track", track.Title)
|
|
assert.Equal(t, "Test Artist", track.Artist)
|
|
assert.Equal(t, "A test track", track.Description)
|
|
assert.Equal(t, 180, track.Duration)
|
|
}
|
|
|
|
func TestPlaylistFactory_Defaults(t *testing.T) {
|
|
userID := uuid.New()
|
|
factory := NewPlaylistFactory(userID)
|
|
playlist := factory.Build()
|
|
|
|
assert.Equal(t, userID, playlist.UserID)
|
|
assert.Equal(t, "Test Playlist", playlist.Title)
|
|
assert.Equal(t, "A test playlist", playlist.Description)
|
|
} |