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