@@ -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