Skip to content

Commit 4f1ba2b

Browse files
committed
Add tests
1 parent 43f098f commit 4f1ba2b

File tree

1 file changed

+166
-132
lines changed

1 file changed

+166
-132
lines changed

test/plugins/test_discogs.py

Lines changed: 166 additions & 132 deletions
Original file line numberDiff line numberDiff line change
@@ -504,141 +504,129 @@ 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(
525+
"PERFORMER", id=787, role="Featuring", anv="PERF"
526+
)
527+
],
528+
}
529+
],
530+
"artists": [
531+
_artist("DRUMMER", id=445, anv="DRUM", join=", "),
532+
_artist("ARTIST (4)", id=321, anv="ARTY", join="&"),
533+
_artist("SOLOIST", id=446, anv="SOLO"),
534+
],
535+
"title": "title",
536+
}
537+
release = Bag(
538+
data=data,
539+
title=data["title"],
540+
artists=[Bag(data=d) for d in data["artists"]],
541+
)
542+
plugin = DiscogsPlugin()
543+
plugin.config["anv"].set(
544+
{"artist": False, "album_artist": False, "artist_credit": False}
545+
| anv_config
546+
)
547+
return plugin.get_album_info(release)
548+
549+
@staticmethod
550+
def _assert_fields(obj, expected):
551+
for field, value in expected.items():
552+
assert getattr(obj, field) == value
553+
554+
@pytest.mark.parametrize(
555+
"anv_config,expected_track_fields",
556+
[
557+
(
558+
{"artist": False},
559+
{
560+
"artist": "ARTIST Feat. PERFORMER",
561+
"artists": ["ARTIST", "PERFORMER"],
562+
},
563+
),
564+
(
565+
{"artist": True},
566+
{
567+
"artist": "ART Feat. PERF",
568+
"artists": ["ART", "PERF"],
569+
},
570+
),
577571
],
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"),
572+
)
573+
def test_track_artist_fields(self, album_info, expected_track_fields):
574+
self._assert_fields(album_info.tracks[0], expected_track_fields)
575+
576+
@pytest.mark.parametrize(
577+
"anv_config,expected_album_fields,expected_track_fields",
578+
[
579+
(
580+
{"artist_credit": False},
581+
{
582+
"artist_credit": "DRUMMER, ARTIST & SOLOIST",
583+
"artists_credit": ["DRUMMER", "ARTIST", "SOLOIST"],
584+
},
585+
{
586+
"artist_credit": "ARTIST Feat. PERFORMER",
587+
"artists_credit": ["ARTIST", "PERFORMER"],
588+
},
589+
),
590+
(
591+
{"artist_credit": True},
592+
{
593+
"artist_credit": "DRUM, ARTY & SOLO",
594+
"artists_credit": ["DRUM", "ARTY", "SOLO"],
595+
},
596+
{
597+
"artist_credit": "ART Feat. PERF",
598+
"artists_credit": ["ART", "PERF"],
599+
},
600+
),
582601
],
583-
"title": "title",
584-
}
585-
release = Bag(
586-
data=data,
587-
title=data["title"],
588-
artists=[Bag(data=d) for d in data["artists"]],
589602
)
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-
}
603+
def test_artist_credit_fields(
604+
self, album_info, expected_album_fields, expected_track_fields
605+
):
606+
self._assert_fields(album_info, expected_album_fields)
607+
self._assert_fields(album_info.tracks[0], expected_track_fields)
608+
609+
@pytest.mark.parametrize(
610+
"anv_config,expected_album_fields",
611+
[
612+
(
613+
{"album_artist": False},
614+
{
615+
"artist": "DRUMMER, ARTIST & SOLOIST",
616+
"artists": ["DRUMMER", "ARTIST", "SOLOIST"],
617+
},
618+
),
619+
(
620+
{"album_artist": True},
621+
{
622+
"artist": "DRUM, ARTY & SOLO",
623+
"artists": ["DRUM", "ARTY", "SOLO"],
624+
},
625+
),
621626
],
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"]],
629627
)
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"]
628+
def test_album_artist_fields(self, album_info, expected_album_fields):
629+
self._assert_fields(album_info, expected_album_fields)
642630

643631

644632
@patch("beetsplug.discogs.DiscogsPlugin.setup", Mock())
@@ -681,7 +669,10 @@ def test_anv_album_artist():
681669

682670

683671
@pytest.mark.parametrize(
684-
"track, expected_artist, expected_artists",
672+
(
673+
"track,expected_artist,expected_artists,expected_artists_ids,"
674+
"expected_composers"
675+
),
685676
[
686677
(
687678
{
@@ -704,18 +695,61 @@ def test_anv_album_artist():
704695
},
705696
"NEW ARTIST & VOCALIST feat. SOLOIST, PERFORMER, MUSICIAN",
706697
["NEW ARTIST", "VOCALIST", "SOLOIST", "PERFORMER", "MUSICIAN"],
698+
["11146", "344", "3", "5", "10"],
699+
["RANDOM"],
707700
),
708701
],
709702
)
710703
@patch("beetsplug.discogs.DiscogsPlugin.setup", Mock())
711-
def test_parse_featured_artists(track, expected_artist, expected_artists):
704+
def test_parse_featured_artists(
705+
track,
706+
expected_artist,
707+
expected_artists,
708+
expected_artists_ids,
709+
expected_composers,
710+
):
712711
"""Tests the plugins ability to parse a featured artist.
713712
Ignores artists that are not listed as featured."""
714713
plugin = DiscogsPlugin()
715714
artistinfo = ArtistState.from_config(plugin.config, [_artist("ARTIST")])
716715
t, _, _ = plugin.get_track_info(track, 1, 1, artistinfo)
717716
assert t.artist == expected_artist
718717
assert t.artists == expected_artists
718+
assert t.artists_ids == expected_artists_ids
719+
assert t.composers == expected_composers
720+
721+
722+
@patch("beetsplug.discogs.DiscogsPlugin.setup", Mock())
723+
def test_parse_extraartist_roles():
724+
plugin = DiscogsPlugin()
725+
artistinfo = ArtistState.from_config(plugin.config, [_artist("ARTIST")])
726+
track = {
727+
"type_": "track",
728+
"title": "track",
729+
"position": "1",
730+
"duration": "5:00",
731+
"artists": [_artist("TRACK ARTIST", id=11)],
732+
"extraartists": [
733+
_artist("LYRICIST", id=2, role="Lyrics By"),
734+
_artist("ARRANGER", id=3, role="Producer"),
735+
_artist(
736+
"ADDITIONAL ARRANGER",
737+
id=4,
738+
role="Additional Producer",
739+
),
740+
_artist("REMIXER", id=5, role="Remixed By"),
741+
_artist("COMPOSER", id=6, role="Written-By"),
742+
],
743+
}
744+
745+
t, _, _ = plugin.get_track_info(track, 1, 1, artistinfo)
746+
747+
assert t.artist == "TRACK ARTIST"
748+
assert t.artists == ["TRACK ARTIST"]
749+
assert t.lyricists == ["LYRICIST"]
750+
assert t.arrangers == ["ARRANGER"]
751+
assert t.remixers == ["REMIXER"]
752+
assert t.composers == ["COMPOSER"]
719753

720754

721755
@pytest.mark.parametrize(

0 commit comments

Comments
 (0)