music-kraken/internal/data/song_test.go
2025-10-07 14:21:03 +02:00

105 lines
2.0 KiB
Go

package data
import (
"testing"
)
func TestSongDeduplicate(t *testing.T) {
song := Song{
Name: "song_a",
Album: Album{
Name: "album_a",
Artists: []Artist{
{Name: "artist_a"},
{Name: "artist_a"},
{Name: "artist_b"},
},
},
Artists: []Artist{
{Name: "artist a"},
{Name: "artist a"},
{Name: "artist_b"},
},
}
compiled := song.Compile().(Song)
if len(compiled.Artists) != 2 {
t.Errorf(`the two artists with the same name have to be merged, %d`, len(compiled.Artists))
}
if len(compiled.Album.Artists) != 2 {
t.Errorf(`the two artists with the same names in the album have to be merged, %d`, len(compiled.Album.Artists))
}
}
func TestSongUnify(t *testing.T) {
song := Song{
Name: " foo Bar BAZ",
Album: Album{
Name: " foo",
},
}
compiled := song.Compile().(Song)
if compiled.UnifiedName != "foo bar baz" {
t.Errorf(`the song name doesn't get compiled properly`)
}
if compiled.Album.UnifiedName != "foo" {
t.Errorf(`the album name in the song isn't unified`)
}
}
func TestAlbumDeduplicate(t *testing.T) {
album := Album{
Name: "album_a",
Songs: []Song{
{Name: "song a"},
{Name: "song a"},
{Name: "song_b"},
{Name: "song_c"},
{Name: "song_d"},
{Name: "song a"},
},
Artists: []Artist{
{Name: "artist_a"},
{
Name: "artist_a",
Albums: []Album{
{Name: "album_a"},
{Name: "album_b"},
{Name: "album_a"},
},
},
},
}
compiled := album.Compile().(Album)
if len(compiled.Songs) != 4 {
t.Errorf(`didn't properly merge songs`)
}
if len(compiled.Artists) != 1 {
t.Errorf(`didn't properly merge artists`)
}
if len(compiled.Artists[0].Albums) != 2 {
t.Errorf(`didn't properly merge or deduplicate albums`)
}
}
func TestAlbumUnify(t *testing.T) {
album := Album{
Name: " foo Bar BAZ",
}
compiled := album.Compile().(Album)
if compiled.UnifiedName != "foo bar baz" {
t.Errorf(`the song name doesn't get compiled properly`)
}
}