Files
godeez/internal/deezer/track_test.go
T

117 lines
3.0 KiB
Go

package deezer
import (
"encoding/json"
"strings"
"testing"
)
func TestFullTitle(t *testing.T) {
tests := []struct {
title string
version string
want string
}{
{"Song", "", "Song"},
{"Song", "(Remix)", "Song (Remix)"},
}
for _, tt := range tests {
track := &Track{Title: tt.title, Version: tt.version}
if got := track.FullTitle(); got != tt.want {
t.Errorf("FullTitle() = %q, want %q", got, tt.want)
}
}
}
func TestFilename(t *testing.T) {
tests := []struct {
name string
track Track
kind Kind
mediaFormat string
want string
}{
{
name: "album with numeric track number",
track: Track{Artist: "Artist", Title: "Song", TrackNumber: "1"},
kind: KindAlbum,
mediaFormat: "MP3_320",
want: "01. Artist - Song.mp3",
},
{
name: "album with non-numeric track number",
track: Track{Artist: "Artist", Title: "Song", TrackNumber: "A"},
kind: KindAlbum,
mediaFormat: "MP3_320",
want: "A. Artist - Song.mp3",
},
{
name: "playlist has no prefix",
track: Track{Artist: "Artist", Title: "Song", TrackNumber: "1"},
kind: KindPlaylist,
mediaFormat: "MP3_128",
want: "Artist - Song.mp3",
},
{
name: "flac extension",
track: Track{Artist: "Artist", Title: "Song"},
kind: KindTrack,
mediaFormat: "FLAC",
want: "Artist - Song.flac",
},
{
name: "wav extension",
track: Track{Artist: "Artist", Title: "Song"},
kind: KindTrack,
mediaFormat: "WAV",
want: "Artist - Song.wav",
},
{
name: "version appended",
track: Track{Artist: "Artist", Title: "Song", Version: "(Live)"},
kind: KindTrack,
mediaFormat: "MP3_320",
want: "Artist - Song (Live).mp3",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := tt.track.Filename(tt.kind, tt.mediaFormat); got != tt.want {
t.Errorf("Filename() = %q, want %q", got, tt.want)
}
})
}
}
func TestFilenameSanitizesSeparators(t *testing.T) {
track := Track{Artist: "AC/DC", Title: "Song"}
got := track.Filename(KindTrack, "MP3_320")
if strings.ContainsRune(got, '/') {
t.Errorf("Filename() contains a path separator: %q", got)
}
if !strings.HasSuffix(got, ".mp3") {
t.Errorf("Filename() = %q, want .mp3 suffix", got)
}
}
func TestContributorsUnmarshalJSON(t *testing.T) {
var c Contributors
if err := json.Unmarshal([]byte("[]"), &c); err != nil {
t.Fatalf("unmarshal empty array: %v", err)
}
if len(c.MainArtists) != 0 || len(c.Composers) != 0 || len(c.Authors) != 0 {
t.Errorf("expected empty contributors, got %+v", c)
}
data := `{"main_artist":["A","B"],"composer":["C"],"author":["D"]}`
if err := json.Unmarshal([]byte(data), &c); err != nil {
t.Fatalf("unmarshal object: %v", err)
}
if len(c.MainArtists) != 2 || c.MainArtists[0] != "A" || len(c.Composers) != 1 || len(c.Authors) != 1 {
t.Errorf("unexpected contributors: %+v", c)
}
}