Use ArtistCreditFactory for test artist_credit construction

This commit is contained in:
Šarūnas Nejus 2026-01-22 14:01:08 +00:00
parent c39c5021b3
commit 70df5de2a7
No known key found for this signature in database
2 changed files with 102 additions and 170 deletions

View file

@ -1,7 +1,12 @@
import factory
class AliasFactory(factory.DictFactory):
class _SortNameFactory(factory.DictFactory):
name: str
sort_name = factory.LazyAttribute(lambda o: f"{o.name}, The")
class AliasFactory(_SortNameFactory):
class Params:
suffix = ""
@ -11,6 +16,26 @@ class AliasFactory(factory.DictFactory):
locale: str | None = None
name = factory.LazyAttribute(lambda o: f"Alias {o.suffix}")
primary = False
sort_name = factory.LazyAttribute(lambda o: f"{o.name}, The")
type = "Artist name"
type_id = "894afba6-2816-3c24-8072-eadb66bd04bc"
class ArtistFactory(_SortNameFactory):
class Params:
id_base = 0
index = 1
country: str | None = None
disambiguation = ""
id = factory.LazyAttribute(
lambda o: f"00000000-0000-0000-0000-{o.id_base + o.index:012d}"
)
name = "Artist"
type = "Person"
type_id = "b6e035f4-3ce9-331c-97df-83397230b0df"
class ArtistCreditFactory(factory.DictFactory):
artist = factory.SubFactory(ArtistFactory)
joinphrase = ""
name = factory.LazyAttribute(lambda o: f"{o.artist['name']} Credit")

View file

@ -40,6 +40,10 @@ def alias_factory(**kwargs) -> mb.Alias:
return factories.AliasFactory.build(**kwargs)
def artist_credit_factory(**kwargs) -> mb.ArtistCredit:
return factories.ArtistCreditFactory.build(**kwargs)
class MusicBrainzTestCase(BeetsTestCase):
def setUp(self):
super().setUp()
@ -67,16 +71,7 @@ class MusicBrainzTestCase(BeetsTestCase):
"id": "RELEASE GROUP ID",
"disambiguation": "RG_DISAMBIGUATION",
},
"artist_credit": [
{
"artist": {
"name": "ARTIST NAME",
"id": "ARTIST ID",
"sort_name": "ARTIST SORT NAME",
},
"name": "ARTIST CREDIT",
}
],
"artist_credit": [artist_credit_factory(artist__id_base=10)],
"date": "3001",
"media": [],
"genres": [{"count": 1, "name": "GENRE"}],
@ -100,14 +95,7 @@ class MusicBrainzTestCase(BeetsTestCase):
if multi_artist_credit:
release["artist_credit"][0]["joinphrase"] = " & "
release["artist_credit"].append(
{
"artist": {
"name": "ARTIST 2 NAME",
"id": "ARTIST 2 ID",
"sort_name": "ARTIST 2 SORT NAME",
},
"name": "ARTIST MULTI CREDIT",
}
artist_credit_factory(artist__name="Other Artist")
)
i = 0
@ -128,27 +116,16 @@ class MusicBrainzTestCase(BeetsTestCase):
# Similarly, track artists can differ from recording
# artists.
track["artist_credit"] = [
{
"artist": {
"name": "TRACK ARTIST NAME",
"id": "TRACK ARTIST ID",
"sort_name": "TRACK ARTIST SORT NAME",
},
"name": "TRACK ARTIST CREDIT",
}
artist_credit_factory(artist__name="Track Artist")
]
if multi_artist_credit:
track["artist_credit"][0]["joinphrase"] = " & "
track["artist_credit"].append(
{
"artist": {
"name": "TRACK ARTIST 2 NAME",
"id": "TRACK ARTIST 2 ID",
"sort_name": "TRACK ARTIST 2 SORT NAME",
},
"name": "TRACK ARTIST 2 CREDIT",
}
artist_credit_factory(
artist__name="Other Track Artist",
artist__index=2,
)
)
track_list.append(track)
@ -193,37 +170,16 @@ class MusicBrainzTestCase(BeetsTestCase):
"isrcs": [],
"aliases": [],
"artist_credit": [
{
"artist": {
"name": "RECORDING ARTIST NAME",
"id": "RECORDING ARTIST ID",
"sort_name": "RECORDING ARTIST SORT NAME",
"country": None,
"disambiguation": "",
"type": "Person",
"type_id": "b6e035f4-3ce9-331c-97df-83397230b0df",
},
"name": "RECORDING ARTIST CREDIT",
"joinphrase": "",
}
artist_credit_factory(artist__name="Recording Artist")
],
}
if multi_artist_credit:
recording["artist_credit"][0]["joinphrase"] = " & "
recording["artist_credit"].append(
{
"artist": {
"name": "RECORDING ARTIST 2 NAME",
"id": "RECORDING ARTIST 2 ID",
"sort_name": "RECORDING ARTIST 2 SORT NAME",
"country": None,
"disambiguation": "",
"type": "Person",
"type_id": "b6e035f4-3ce9-331c-97df-83397230b0df",
},
"name": "RECORDING ARTIST 2 CREDIT",
"joinphrase": "",
}
artist_credit_factory(
artist__name="Other Recording Artist",
artist__index=2,
)
)
if remixer:
recording["artist_relations"] = [
@ -259,11 +215,11 @@ class MBAlbumInfoTest(MusicBrainzTestCase):
d = self.mb.album_info(release)
assert d.album == "ALBUM TITLE"
assert d.album_id == "ALBUM ID"
assert d.artist == "ARTIST NAME"
assert d.artist_id == "ARTIST ID"
assert d.artist == "Artist"
assert d.artist_id == "00000000-0000-0000-0000-000000000011"
assert d.original_year == 1984
assert d.year == 3001
assert d.artist_credit == "ARTIST CREDIT"
assert d.artist_credit == "Artist Credit"
def test_parse_release_type(self):
release = self._make_release("1984")
@ -395,7 +351,7 @@ class MBAlbumInfoTest(MusicBrainzTestCase):
def test_parse_artist_sort_name(self):
release = self._make_release(None)
d = self.mb.album_info(release)
assert d.artist_sort == "ARTIST SORT NAME"
assert d.artist_sort == "Artist, The"
def test_parse_releasegroupid(self):
release = self._make_release(None)
@ -469,10 +425,10 @@ class MBAlbumInfoTest(MusicBrainzTestCase):
recordings = [self._make_recording("a", "b", 1)]
release = self._make_release(None, recordings=recordings)
track = self.mb.album_info(release).tracks[0]
assert track.artist == "RECORDING ARTIST NAME"
assert track.artist_id == "RECORDING ARTIST ID"
assert track.artist_sort == "RECORDING ARTIST SORT NAME"
assert track.artist_credit == "RECORDING ARTIST CREDIT"
assert track.artist == "Recording Artist"
assert track.artist_id == "00000000-0000-0000-0000-000000000001"
assert track.artist_sort == "Recording Artist, The"
assert track.artist_credit == "Recording Artist Credit"
def test_parse_recording_artist_multi(self):
recordings = [
@ -480,32 +436,32 @@ class MBAlbumInfoTest(MusicBrainzTestCase):
]
release = self._make_release(None, recordings=recordings)
track = self.mb.album_info(release).tracks[0]
assert track.artist == "RECORDING ARTIST NAME & RECORDING ARTIST 2 NAME"
assert track.artist_id == "RECORDING ARTIST ID"
assert track.artist == "Recording Artist & Other Recording Artist"
assert track.artist_id == "00000000-0000-0000-0000-000000000001"
assert (
track.artist_sort
== "RECORDING ARTIST SORT NAME & RECORDING ARTIST 2 SORT NAME"
== "Recording Artist, The & Other Recording Artist, The"
)
assert (
track.artist_credit
== "RECORDING ARTIST CREDIT & RECORDING ARTIST 2 CREDIT"
== "Recording Artist Credit & Other Recording Artist Credit"
)
assert track.artists == [
"RECORDING ARTIST NAME",
"RECORDING ARTIST 2 NAME",
"Recording Artist",
"Other Recording Artist",
]
assert track.artists_ids == [
"RECORDING ARTIST ID",
"RECORDING ARTIST 2 ID",
"00000000-0000-0000-0000-000000000001",
"00000000-0000-0000-0000-000000000002",
]
assert track.artists_sort == [
"RECORDING ARTIST SORT NAME",
"RECORDING ARTIST 2 SORT NAME",
"Recording Artist, The",
"Other Recording Artist, The",
]
assert track.artists_credit == [
"RECORDING ARTIST CREDIT",
"RECORDING ARTIST 2 CREDIT",
"Recording Artist Credit",
"Other Recording Artist Credit",
]
def test_track_artist_overrides_recording_artist(self):
@ -514,10 +470,10 @@ class MBAlbumInfoTest(MusicBrainzTestCase):
None, recordings=recordings, track_artist=True
)
track = self.mb.album_info(release).tracks[0]
assert track.artist == "TRACK ARTIST NAME"
assert track.artist_id == "TRACK ARTIST ID"
assert track.artist_sort == "TRACK ARTIST SORT NAME"
assert track.artist_credit == "TRACK ARTIST CREDIT"
assert track.artist == "Track Artist"
assert track.artist_id == "00000000-0000-0000-0000-000000000001"
assert track.artist_sort == "Track Artist, The"
assert track.artist_credit == "Track Artist Credit"
def test_track_artist_overrides_recording_artist_multi(self):
recordings = [
@ -530,25 +486,28 @@ class MBAlbumInfoTest(MusicBrainzTestCase):
multi_artist_credit=True,
)
track = self.mb.album_info(release).tracks[0]
assert track.artist == "TRACK ARTIST NAME & TRACK ARTIST 2 NAME"
assert track.artist_id == "TRACK ARTIST ID"
assert track.artist == "Track Artist & Other Track Artist"
assert track.artist_id == "00000000-0000-0000-0000-000000000001"
assert (
track.artist_sort
== "TRACK ARTIST SORT NAME & TRACK ARTIST 2 SORT NAME"
track.artist_sort == "Track Artist, The & Other Track Artist, The"
)
assert (
track.artist_credit == "TRACK ARTIST CREDIT & TRACK ARTIST 2 CREDIT"
track.artist_credit
== "Track Artist Credit & Other Track Artist Credit"
)
assert track.artists == ["TRACK ARTIST NAME", "TRACK ARTIST 2 NAME"]
assert track.artists_ids == ["TRACK ARTIST ID", "TRACK ARTIST 2 ID"]
assert track.artists == ["Track Artist", "Other Track Artist"]
assert track.artists_ids == [
"00000000-0000-0000-0000-000000000001",
"00000000-0000-0000-0000-000000000002",
]
assert track.artists_sort == [
"TRACK ARTIST SORT NAME",
"TRACK ARTIST 2 SORT NAME",
"Track Artist, The",
"Other Track Artist, The",
]
assert track.artists_credit == [
"TRACK ARTIST CREDIT",
"TRACK ARTIST 2 CREDIT",
"Track Artist Credit",
"Other Track Artist Credit",
]
def test_parse_recording_remixer(self):
@ -748,46 +707,31 @@ class MBAlbumInfoTest(MusicBrainzTestCase):
class ArtistTest(unittest.TestCase):
def _credit_dict(self, suffix="", joinphrase="") -> mb.ArtistCredit:
return {
"artist": {
"name": f"NAME{suffix}",
"id": f"ID{suffix}",
"sort_name": f"SORT{suffix}",
"country": None,
"disambiguation": "",
"type": "Person",
"type_id": "b6e035f4-3ce9-331c-97df-83397230b0df",
},
"name": f"CREDIT{suffix}",
"joinphrase": joinphrase,
}
def test_single_artist(self):
credit = [self._credit_dict()]
credit = [artist_credit_factory(artist__name="Artist")]
assert MusicBrainzPlugin._parse_artist_credits(credit) == {
"artist": "NAME",
"artist_sort": "SORT",
"artist_credit": "CREDIT",
"artists": ["NAME"],
"artists_sort": ["SORT"],
"artists_credit": ["CREDIT"],
"artist": "Artist",
"artist_sort": "Artist, The",
"artist_credit": "Artist Credit",
"artists": ["Artist"],
"artists_sort": ["Artist, The"],
"artists_credit": ["Artist Credit"],
}
def test_two_artists(self):
credit = [
self._credit_dict("a", " AND "),
self._credit_dict("b"),
artist_credit_factory(artist__name="Artist", joinphrase=" AND "),
artist_credit_factory(artist__name="Other Artist"),
]
assert MusicBrainzPlugin._parse_artist_credits(credit) == {
"artist": "NAMEa AND NAMEb",
"artist_sort": "SORTa AND SORTb",
"artist_credit": "CREDITa AND CREDITb",
"artists": ["NAMEa", "NAMEb"],
"artists_sort": ["SORTa", "SORTb"],
"artists_credit": ["CREDITa", "CREDITb"],
"artist": "Artist AND Other Artist",
"artist_sort": "Artist, The AND Other Artist, The",
"artist_credit": "Artist Credit AND Other Artist Credit",
"artists": ["Artist", "Other Artist"],
"artists_sort": ["Artist, The", "Other Artist, The"],
"artists_credit": ["Artist Credit", "Other Artist Credit"],
}
def test_preferred_alias(self):
@ -856,14 +800,7 @@ class MBLibraryTest(MusicBrainzTestCase):
"position": 5,
}
],
"artist_credit": [
{
"artist": {
"name": "some-artist",
"id": "some-id",
},
}
],
"artist_credit": [artist_credit_factory()],
"release_group": {
"id": "another-id",
},
@ -896,14 +833,7 @@ class MBLibraryTest(MusicBrainzTestCase):
"position": 5,
}
],
"artist_credit": [
{
"artist": {
"name": "some-artist",
"id": "some-id",
},
}
],
"artist_credit": [artist_credit_factory()],
"release_group": {
"id": "another-id",
},
@ -939,14 +869,7 @@ class MBLibraryTest(MusicBrainzTestCase):
"position": 5,
}
],
"artist_credit": [
{
"artist": {
"name": "some-artist",
"id": "some-id",
},
}
],
"artist_credit": [artist_credit_factory()],
"release_group": {
"id": "another-id",
},
@ -981,14 +904,7 @@ class MBLibraryTest(MusicBrainzTestCase):
"position": 5,
}
],
"artist_credit": [
{
"artist": {
"name": "some-artist",
"id": "some-id",
},
}
],
"artist_credit": [artist_credit_factory()],
"release_group": {
"id": "another-id",
},
@ -1023,14 +939,7 @@ class MBLibraryTest(MusicBrainzTestCase):
"position": 5,
}
],
"artist_credit": [
{
"artist": {
"name": "some-artist",
"id": "some-id",
},
}
],
"artist_credit": [artist_credit_factory()],
"release_group": {
"id": "another-id",
},
@ -1137,9 +1046,7 @@ class TestMusicBrainzPlugin(PluginMixin):
"position": 5,
}
],
"artist_credit": [
{"artist": {"name": "some-artist", "id": "some-id"}}
],
"artist_credit": [artist_credit_factory()],
"release_group": {"id": "another-id"},
},
)