168 lines
4.2 KiB
Text
168 lines
4.2 KiB
Text
package services
|
|
|
|
import (
|
|
"context"
|
|
"github.com/google/uuid"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"go.uber.org/zap"
|
|
"gorm.io/driver/sqlite"
|
|
"gorm.io/gorm"
|
|
"veza-backend-api/internal/models"
|
|
)
|
|
|
|
func setupTestTrackServiceForQuota(t *testing.T) (*TrackService, *gorm.DB, func()) {
|
|
// Setup in-memory SQLite database
|
|
db, err := gorm.Open(sqlite.Open(":memory:"), &gorm.Config{})
|
|
assert.NoError(t, err)
|
|
|
|
// Auto-migrate
|
|
err = db.AutoMigrate(&models.Track{}, &models.User{})
|
|
assert.NoError(t, err)
|
|
|
|
// Create test user
|
|
user := &models.User{
|
|
ID: 123,
|
|
Username: "testuser",
|
|
Email: "test@example.com",
|
|
IsActive: true,
|
|
}
|
|
err = db.Create(user).Error
|
|
assert.NoError(t, err)
|
|
|
|
// Setup logger
|
|
logger := zap.NewNop()
|
|
|
|
// Setup test service
|
|
service := NewTrackService(db, logger, "test_uploads/tracks")
|
|
|
|
// Cleanup function
|
|
cleanup := func() {
|
|
// Database will be closed automatically
|
|
}
|
|
|
|
return service, db, cleanup
|
|
}
|
|
|
|
func TestTrackService_GetUserQuota_Success(t *testing.T) {
|
|
service, db, cleanup := setupTestTrackServiceForQuota(t)
|
|
defer cleanup()
|
|
|
|
ctx := context.Background()
|
|
|
|
// Créer quelques tracks pour l'utilisateur
|
|
track1 := &models.Track{
|
|
UserID: 123,
|
|
Title: "Track 1",
|
|
FilePath: "/test/track1.mp3",
|
|
FileSize: 5 * 1024 * 1024, // 5MB
|
|
Format: "MP3",
|
|
Duration: 180,
|
|
IsPublic: true,
|
|
}
|
|
err := db.Create(track1).Error
|
|
assert.NoError(t, err)
|
|
|
|
track2 := &models.Track{
|
|
UserID: 123,
|
|
Title: "Track 2",
|
|
FilePath: "/test/track2.mp3",
|
|
FileSize: 10 * 1024 * 1024, // 10MB
|
|
Format: "MP3",
|
|
Duration: 200,
|
|
IsPublic: true,
|
|
}
|
|
err = db.Create(track2).Error
|
|
assert.NoError(t, err)
|
|
|
|
// Récupérer le quota
|
|
quota, err := service.GetUserQuota(ctx, 123)
|
|
assert.NoError(t, err)
|
|
assert.NotNil(t, quota)
|
|
assert.Equal(t, int64(2), quota.TracksCount)
|
|
assert.Equal(t, MaxTracksPerUser, quota.TracksLimit)
|
|
assert.Equal(t, int64(15*1024*1024), quota.StorageUsed) // 15MB
|
|
assert.Equal(t, MaxStoragePerUser, quota.StorageLimit)
|
|
}
|
|
|
|
func TestTrackService_GetUserQuota_Empty(t *testing.T) {
|
|
service, _, cleanup := setupTestTrackServiceForQuota(t)
|
|
defer cleanup()
|
|
|
|
ctx := context.Background()
|
|
|
|
// Récupérer le quota pour un utilisateur sans tracks
|
|
quota, err := service.GetUserQuota(ctx, 123)
|
|
assert.NoError(t, err)
|
|
assert.NotNil(t, quota)
|
|
assert.Equal(t, int64(0), quota.TracksCount)
|
|
assert.Equal(t, MaxTracksPerUser, quota.TracksLimit)
|
|
assert.Equal(t, int64(0), quota.StorageUsed)
|
|
assert.Equal(t, MaxStoragePerUser, quota.StorageLimit)
|
|
}
|
|
|
|
func TestTrackService_GetUserQuota_UserNotFound(t *testing.T) {
|
|
service, _, cleanup := setupTestTrackServiceForQuota(t)
|
|
defer cleanup()
|
|
|
|
ctx := context.Background()
|
|
|
|
// Récupérer le quota pour un utilisateur qui n'existe pas
|
|
quota, err := service.GetUserQuota(ctx, 999)
|
|
assert.NoError(t, err) // Devrait retourner 0 tracks et 0 storage
|
|
assert.NotNil(t, quota)
|
|
assert.Equal(t, int64(0), quota.TracksCount)
|
|
assert.Equal(t, int64(0), quota.StorageUsed)
|
|
}
|
|
|
|
func TestTrackService_GetUserQuota_MultipleUsers(t *testing.T) {
|
|
service, db, cleanup := setupTestTrackServiceForQuota(t)
|
|
defer cleanup()
|
|
|
|
ctx := context.Background()
|
|
|
|
// Créer un deuxième utilisateur
|
|
user2 := &models.User{
|
|
ID: 456,
|
|
Username: "testuser2",
|
|
Email: "test2@example.com",
|
|
IsActive: true,
|
|
}
|
|
err := db.Create(user2).Error
|
|
assert.NoError(t, err)
|
|
|
|
// Créer des tracks pour les deux utilisateurs
|
|
track1 := &models.Track{
|
|
UserID: 123,
|
|
Title: "User1 Track",
|
|
FilePath: "/test/track1.mp3",
|
|
FileSize: 5 * 1024 * 1024,
|
|
Format: "MP3",
|
|
IsPublic: true,
|
|
}
|
|
err = db.Create(track1).Error
|
|
assert.NoError(t, err)
|
|
|
|
track2 := &models.Track{
|
|
UserID: 456,
|
|
Title: "User2 Track",
|
|
FilePath: "/test/track2.mp3",
|
|
FileSize: 10 * 1024 * 1024,
|
|
Format: "MP3",
|
|
IsPublic: true,
|
|
}
|
|
err = db.Create(track2).Error
|
|
assert.NoError(t, err)
|
|
|
|
// Vérifier que les quotas sont isolés
|
|
quota1, err := service.GetUserQuota(ctx, 123)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, int64(1), quota1.TracksCount)
|
|
assert.Equal(t, int64(5*1024*1024), quota1.StorageUsed)
|
|
|
|
quota2, err := service.GetUserQuota(ctx, 456)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, int64(1), quota2.TracksCount)
|
|
assert.Equal(t, int64(10*1024*1024), quota2.StorageUsed)
|
|
}
|