Skip to content

Commit fb72e11

Browse files
committed
Add tests
1 parent 5528a2b commit fb72e11

File tree

1 file changed

+159
-132
lines changed

1 file changed

+159
-132
lines changed

test/plugins/test_discogs.py

Lines changed: 159 additions & 132 deletions
Original file line numberDiff line numberDiff line change
@@ -504,141 +504,127 @@ def test_extra_tags_populate_discogs_filters(self):
504504
config["discogs"]["extra_tags"] = []
505505

506506

507-
@pytest.mark.parametrize(
508-
"track_artist_anv,track_artist,track_artists",
509-
[
510-
(False, "ARTIST Feat. PERFORMER", ["ARTIST", "PERFORMER"]),
511-
(True, "ART Feat. PERF", ["ART", "PERF"]),
512-
],
513-
)
514-
@pytest.mark.parametrize(
515-
"album_artist_anv,album_artist,album_artists",
516-
[
517-
(False, "DRUMMER, ARTIST & SOLOIST", ["DRUMMER", "ARTIST", "SOLOIST"]),
518-
(True, "DRUM, ARTY & SOLO", ["DRUM", "ARTY", "SOLO"]),
519-
],
520-
)
521-
@pytest.mark.parametrize(
522-
(
523-
"artist_credit_anv,track_artist_credit,"
524-
"track_artists_credit,album_artist_credit,album_artists_credit"
525-
),
526-
[
527-
(
528-
False,
529-
"ARTIST Feat. PERFORMER",
530-
["ARTIST", "PERFORMER"],
531-
"DRUMMER, ARTIST & SOLOIST",
532-
["DRUMMER", "ARTIST", "SOLOIST"],
533-
),
534-
(
535-
True,
536-
"ART Feat. PERF",
537-
["ART", "PERF"],
538-
"DRUM, ARTY & SOLO",
539-
["DRUM", "ARTY", "SOLO"],
540-
),
541-
],
542-
)
543-
@patch("beetsplug.discogs.DiscogsPlugin.setup", Mock())
544-
def test_anv(
545-
track_artist_anv,
546-
track_artist,
547-
track_artists,
548-
album_artist_anv,
549-
album_artist,
550-
album_artists,
551-
artist_credit_anv,
552-
track_artist_credit,
553-
track_artists_credit,
554-
album_artist_credit,
555-
album_artists_credit,
556-
):
557-
"""Test using artist name variations."""
558-
data = {
559-
"id": 123,
560-
"uri": "https://www.discogs.com/release/123456-something",
561-
"tracklist": [
562-
{
563-
"title": "track",
564-
"position": "A",
565-
"type_": "track",
566-
"duration": "5:44",
567-
"artists": [_artist("ARTIST", id=11146, anv="ART")],
568-
"extraartists": [
569-
_artist(
570-
"PERFORMER",
571-
id=787,
572-
role="Featuring",
573-
anv="PERF",
574-
)
575-
],
576-
}
507+
class TestAnv:
508+
@pytest.fixture
509+
def album_info(self, monkeypatch, anv_config):
510+
monkeypatch.setattr(
511+
"beetsplug.discogs.DiscogsPlugin.setup", lambda _: None
512+
)
513+
data = {
514+
"id": 123,
515+
"uri": "https://www.discogs.com/release/123456-something",
516+
"tracklist": [
517+
{
518+
"title": "track",
519+
"position": "A",
520+
"type_": "track",
521+
"duration": "5:44",
522+
"artists": [_artist("ARTIST", id=11146, anv="ART")],
523+
"extraartists": [
524+
_artist("PERFORMER", id=787, role="Featuring")
525+
],
526+
}
527+
],
528+
"artists": [
529+
_artist("DRUMMER", id=445, anv="DRUM", join=", "),
530+
_artist("ARTIST (4)", id=321, anv="ARTY", join="&"),
531+
_artist("SOLOIST", id=446, anv="SOLO"),
532+
],
533+
"title": "title",
534+
}
535+
release = Bag(
536+
data=data,
537+
title=data["title"],
538+
artists=[Bag(data=d) for d in data["artists"]],
539+
)
540+
plugin = DiscogsPlugin()
541+
plugin.config["anv"].set(
542+
{"artist": False, "album_artist": False, "artist_credit": False}
543+
| anv_config
544+
)
545+
return plugin.get_album_info(release)
546+
547+
@staticmethod
548+
def _assert_fields(obj, expected):
549+
for field, value in expected.items():
550+
assert getattr(obj, field) == value
551+
552+
@pytest.mark.parametrize(
553+
"anv_config,expected_track_fields",
554+
[
555+
(
556+
{"artist": False},
557+
{
558+
"artist": "ARTIST Feat. PERFORMER",
559+
"artists": ["ARTIST", "PERFORMER"],
560+
},
561+
),
562+
(
563+
{"artist": True},
564+
{
565+
"artist": "ART Feat. PERFORMER",
566+
"artists": ["ART", "PERFORMER"],
567+
},
568+
),
577569
],
578-
"artists": [
579-
_artist("DRUMMER", id=445, anv="DRUM", join=", "),
580-
_artist("ARTIST (4)", id=321, anv="ARTY", join="&"),
581-
_artist("SOLOIST", id=445, anv="SOLO"),
570+
)
571+
def test_track_artist_fields(self, album_info, expected_track_fields):
572+
self._assert_fields(album_info.tracks[0], expected_track_fields)
573+
574+
@pytest.mark.parametrize(
575+
"anv_config,expected_album_fields,expected_track_fields",
576+
[
577+
(
578+
{"artist_credit": False},
579+
{
580+
"artist_credit": "DRUMMER, ARTIST & SOLOIST",
581+
"artists_credit": ["DRUMMER", "ARTIST", "SOLOIST"],
582+
},
583+
{
584+
"artist_credit": "ARTIST Feat. PERFORMER",
585+
"artists_credit": ["ARTIST", "PERFORMER"],
586+
},
587+
),
588+
(
589+
{"artist_credit": True},
590+
{
591+
"artist_credit": "DRUM, ARTY & SOLO",
592+
"artists_credit": ["DRUM", "ARTY", "SOLO"],
593+
},
594+
{
595+
"artist_credit": "ART Feat. PERFORMER",
596+
"artists_credit": ["ART", "PERFORMER"],
597+
},
598+
),
582599
],
583-
"title": "title",
584-
}
585-
release = Bag(
586-
data=data,
587-
title=data["title"],
588-
artists=[Bag(data=d) for d in data["artists"]],
589600
)
590-
config["discogs"]["anv"]["album_artist"] = album_artist_anv
591-
config["discogs"]["anv"]["artist"] = track_artist_anv
592-
config["discogs"]["anv"]["artist_credit"] = artist_credit_anv
593-
r = DiscogsPlugin().get_album_info(release)
594-
assert r.artist == album_artist
595-
assert r.artists == album_artists
596-
assert r.artist_credit == album_artist_credit
597-
assert r.artists_credit == album_artists_credit
598-
assert r.tracks[0].artist == track_artist
599-
assert r.tracks[0].artists == track_artists
600-
assert r.tracks[0].artist_credit == track_artist_credit
601-
assert r.tracks[0].artists_credit == track_artists_credit
602-
603-
604-
@pytest.mark.parametrize("artist_anv", [True, False])
605-
@pytest.mark.parametrize("albumartist_anv", [True, False])
606-
@pytest.mark.parametrize("artistcredit_anv", [True, False])
607-
@patch("beetsplug.discogs.DiscogsPlugin.setup", Mock())
608-
def test_anv_no_variation(artist_anv, albumartist_anv, artistcredit_anv):
609-
"""Test behavior when there is no ANV but the anv field is set"""
610-
data = {
611-
"id": 123,
612-
"uri": "https://www.discogs.com/release/123456-something",
613-
"tracklist": [
614-
{
615-
"title": "track",
616-
"position": "A",
617-
"type_": "track",
618-
"duration": "5:44",
619-
"artists": [_artist("PERFORMER", id=1)],
620-
}
601+
def test_artist_credit_fields(
602+
self, album_info, expected_album_fields, expected_track_fields
603+
):
604+
self._assert_fields(album_info, expected_album_fields)
605+
self._assert_fields(album_info.tracks[0], expected_track_fields)
606+
607+
@pytest.mark.parametrize(
608+
"anv_config,expected_album_fields",
609+
[
610+
(
611+
{"album_artist": False},
612+
{
613+
"artist": "DRUMMER, ARTIST & SOLOIST",
614+
"artists": ["DRUMMER", "ARTIST", "SOLOIST"],
615+
},
616+
),
617+
(
618+
{"album_artist": True},
619+
{
620+
"artist": "DRUM, ARTY & SOLO",
621+
"artists": ["DRUM", "ARTY", "SOLO"],
622+
},
623+
),
621624
],
622-
"artists": [_artist("ARTIST", id=2)],
623-
"title": "title",
624-
}
625-
release = Bag(
626-
data=data,
627-
title=data["title"],
628-
artists=[Bag(data=d) for d in data["artists"]],
629625
)
630-
config["discogs"]["anv"]["album_artist"] = albumartist_anv
631-
config["discogs"]["anv"]["artist"] = artist_anv
632-
config["discogs"]["anv"]["artist_credit"] = artistcredit_anv
633-
r = DiscogsPlugin().get_album_info(release)
634-
assert r.artist == "ARTIST"
635-
assert r.artists == ["ARTIST"]
636-
assert r.artist_credit == "ARTIST"
637-
assert r.artists_credit == ["ARTIST"]
638-
assert r.tracks[0].artist == "PERFORMER"
639-
assert r.tracks[0].artists == ["PERFORMER"]
640-
assert r.tracks[0].artist_credit == "PERFORMER"
641-
assert r.tracks[0].artists_credit == ["PERFORMER"]
626+
def test_album_artist_fields(self, album_info, expected_album_fields):
627+
self._assert_fields(album_info, expected_album_fields)
642628

643629

644630
@patch("beetsplug.discogs.DiscogsPlugin.setup", Mock())
@@ -681,7 +667,10 @@ def test_anv_album_artist():
681667

682668

683669
@pytest.mark.parametrize(
684-
"track, expected_artist, expected_artists",
670+
(
671+
"track,expected_artist,expected_artists,expected_artists_ids,"
672+
"expected_composers"
673+
),
685674
[
686675
(
687676
{
@@ -704,18 +693,56 @@ def test_anv_album_artist():
704693
},
705694
"NEW ARTIST & VOCALIST feat. SOLOIST, PERFORMER, MUSICIAN",
706695
["NEW ARTIST", "VOCALIST", "SOLOIST", "PERFORMER", "MUSICIAN"],
696+
["11146", "344", "3", "5", "10"],
697+
["RANDOM"],
707698
),
708699
],
709700
)
710701
@patch("beetsplug.discogs.DiscogsPlugin.setup", Mock())
711-
def test_parse_featured_artists(track, expected_artist, expected_artists):
702+
def test_parse_featured_artists(
703+
track,
704+
expected_artist,
705+
expected_artists,
706+
expected_artists_ids,
707+
expected_composers,
708+
):
712709
"""Tests the plugins ability to parse a featured artist.
713710
Ignores artists that are not listed as featured."""
714711
plugin = DiscogsPlugin()
715712
artistinfo = ArtistState.from_config(plugin.config, [_artist("ARTIST")])
716713
t, _, _ = plugin.get_track_info(track, 1, 1, artistinfo)
717714
assert t.artist == expected_artist
718715
assert t.artists == expected_artists
716+
assert t.artists_ids == expected_artists_ids
717+
assert t.composers == expected_composers
718+
719+
720+
@patch("beetsplug.discogs.DiscogsPlugin.setup", Mock())
721+
def test_parse_extraartist_roles():
722+
plugin = DiscogsPlugin()
723+
artistinfo = ArtistState.from_config(plugin.config, [_artist("ARTIST")])
724+
track = {
725+
"type_": "track",
726+
"title": "track",
727+
"position": "1",
728+
"duration": "5:00",
729+
"artists": [_artist("TRACK ARTIST", id=11)],
730+
"extraartists": [
731+
_artist("LYRICIST", id=2, role="Lyrics By"),
732+
_artist("ARRANGER", id=3, role="Arranged By"),
733+
_artist("REMIXER", id=5, role="Remixed By"),
734+
_artist("COMPOSER", id=6, role="Written-By"),
735+
],
736+
}
737+
738+
t, _, _ = plugin.get_track_info(track, 1, 1, artistinfo)
739+
740+
assert t.artist == "TRACK ARTIST"
741+
assert t.artists == ["TRACK ARTIST"]
742+
assert t.lyricists == ["LYRICIST"]
743+
assert t.arrangers == ["ARRANGER"]
744+
assert t.remixers == ["REMIXER"]
745+
assert t.composers == ["COMPOSER"]
719746

720747

721748
@pytest.mark.parametrize(

0 commit comments

Comments
 (0)