Skip to content

Commit 77e707b

Browse files
authored
fix(musicbrainz): artistEnName should pick primary alias first, and not pick ended aliases (#179)
1 parent 22b1557 commit 77e707b

File tree

2 files changed

+79
-1
lines changed

2 files changed

+79
-1
lines changed

musicbrainz/musicbrainz.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -435,7 +435,12 @@ const enLocale = "en"
435435

436436
func artistEnName(artist Artist) string {
437437
for _, a := range artist.Aliases {
438-
if a.Locale == enLocale {
438+
if a.Locale == enLocale && a.Primary && !a.Ended {
439+
return a.Name
440+
}
441+
}
442+
for _, a := range artist.Aliases {
443+
if a.Locale == enLocale && !a.Ended {
439444
return a.Name
440445
}
441446
}

musicbrainz/musicbrainz_test.go

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,3 +123,76 @@ func TestFlatTracks(t *testing.T) {
123123
assert.Equal(t, "regular-track", tracks[1].ID)
124124
})
125125
}
126+
127+
func TestArtistEnName(t *testing.T) {
128+
t.Parallel()
129+
130+
t.Run("returns primary non-ended English alias", func(t *testing.T) {
131+
t.Parallel()
132+
artist := Artist{
133+
Name: "跡部進一",
134+
Aliases: []Alias{
135+
{Name: "Shinichi Atobe", Locale: "en", Primary: true, Ended: false},
136+
{Name: "Other English Name", Locale: "en", Primary: false, Ended: false},
137+
},
138+
}
139+
assert.Equal(t, "Shinichi Atobe", artistEnName(artist))
140+
})
141+
142+
t.Run("returns non-primary non-ended English alias when no primary exists", func(t *testing.T) {
143+
t.Parallel()
144+
artist := Artist{
145+
Name: "Native Name",
146+
Aliases: []Alias{
147+
{Name: "English Name", Locale: "en", Primary: false, Ended: false},
148+
},
149+
}
150+
assert.Equal(t, "English Name", artistEnName(artist))
151+
})
152+
153+
t.Run("skips ended English aliases", func(t *testing.T) {
154+
t.Parallel()
155+
artist := Artist{
156+
Name: "Taylor Swift",
157+
Aliases: []Alias{
158+
{Name: "Dr. Taylor Alison Swift", Locale: "en", Primary: false, Ended: true},
159+
{Name: "Taylor Swift", Locale: "en", Primary: true, Ended: false},
160+
},
161+
}
162+
assert.Equal(t, "Taylor Swift", artistEnName(artist))
163+
})
164+
165+
t.Run("returns artist name when only ended English aliases exist", func(t *testing.T) {
166+
t.Parallel()
167+
artist := Artist{
168+
Name: "Artist Name",
169+
Aliases: []Alias{
170+
{Name: "Old English Name", Locale: "en", Primary: true, Ended: true},
171+
},
172+
}
173+
assert.Equal(t, "Artist Name", artistEnName(artist))
174+
})
175+
176+
t.Run("returns artist name when no English aliases exist", func(t *testing.T) {
177+
t.Parallel()
178+
artist := Artist{
179+
Name: "Artist Name",
180+
Aliases: []Alias{
181+
{Name: "日本語名", Locale: "ja", Primary: true, Ended: false},
182+
},
183+
}
184+
assert.Equal(t, "Artist Name", artistEnName(artist))
185+
})
186+
187+
t.Run("prioritizes primary over non-primary even if non-primary appears first", func(t *testing.T) {
188+
t.Parallel()
189+
artist := Artist{
190+
Name: "Native Name",
191+
Aliases: []Alias{
192+
{Name: "Non-Primary English", Locale: "en", Primary: false, Ended: false},
193+
{Name: "Primary English", Locale: "en", Primary: true, Ended: false},
194+
},
195+
}
196+
assert.Equal(t, "Primary English", artistEnName(artist))
197+
})
198+
}

0 commit comments

Comments
 (0)