package playlists_test import ( "context" "image" _ "image/jpeg" "os" "path/filepath" "testing" "github.com/jackc/pgx/v5/pgtype" "git.fabledsword.com/bvandeusen/minstrel/internal/playlists" ) func TestGenerateCollage_EmptyPlaylist(t *testing.T) { pool := newPool(t) user := seedUser(t, pool, "alice") dir := t.TempDir() svc := playlists.NewService(pool, nil, dir) pl, err := svc.Create(context.Background(), user.ID, "Empty", "", false) if err != nil { t.Fatalf("Create: %v", err) } relPath, err := playlists.GenerateCollage(context.Background(), pool, pl.ID, dir) if err != nil { t.Fatalf("GenerateCollage: %v", err) } if relPath != "" { t.Errorf("relPath = %q, want \"\" for empty playlist", relPath) } } func TestGenerateCollage_OneTrack(t *testing.T) { pool := newPool(t) user := seedUser(t, pool, "alice") tk := seedTrack(t, pool, "Roygbiv", "BoC") dir := t.TempDir() svc := playlists.NewService(pool, nil, dir) pl, err := svc.Create(context.Background(), user.ID, "One", "", false) if err != nil { t.Fatalf("Create: %v", err) } if err := svc.AppendTracks(context.Background(), user.ID, pl.ID, []pgtype.UUID{tk.ID}); err != nil { t.Fatalf("AppendTracks: %v", err) } got, err := svc.Get(context.Background(), user.ID, pl.ID) if err != nil { t.Fatalf("Get: %v", err) } if got.CoverPath == nil || *got.CoverPath == "" { t.Fatalf("CoverPath empty after append") } full := filepath.Join(dir, *got.CoverPath) f, err := os.Open(full) if err != nil { t.Fatalf("open collage: %v", err) } defer func() { _ = f.Close() }() img, format, err := image.Decode(f) if err != nil { t.Fatalf("decode collage: %v", err) } if format != "jpeg" { t.Errorf("format = %q, want jpeg", format) } if img.Bounds().Dx() != 600 || img.Bounds().Dy() != 600 { t.Errorf("dimensions = %dx%d, want 600x600", img.Bounds().Dx(), img.Bounds().Dy()) } }