diff --git a/test/plugins/test_albumtypes.py b/test/plugins/test_albumtypes.py index 8be1ff011..0a9d53349 100644 --- a/test/plugins/test_albumtypes.py +++ b/test/plugins/test_albumtypes.py @@ -16,9 +16,9 @@ from collections.abc import Sequence -from beets.autotag.mb import VARIOUS_ARTISTS_ID from beets.test.helper import PluginTestCase from beetsplug.albumtypes import AlbumTypesPlugin +from beetsplug.musicbrainz import VARIOUS_ARTISTS_ID class AlbumTypesPluginTest(PluginTestCase): diff --git a/test/plugins/test_musicbrainz.py b/test/plugins/test_musicbrainz.py index 2d4821b3a..b8640c870 100644 --- a/test/plugins/test_musicbrainz.py +++ b/test/plugins/test_musicbrainz.py @@ -21,7 +21,13 @@ from beets.test.helper import BeetsTestCase from beetsplug import musicbrainz -class MBAlbumInfoTest(BeetsTestCase): +class MusicBrainzTestCase(BeetsTestCase): + def setUp(self): + super().setUp() + self.mb = musicbrainz.MusicBrainzPlugin() + + +class MBAlbumInfoTest(MusicBrainzTestCase): def _make_release( self, date_str="2009", @@ -210,7 +216,7 @@ class MBAlbumInfoTest(BeetsTestCase): def test_parse_release_with_year(self): release = self._make_release("1984") - d = mb.album_info(release) + d = self.mb.album_info(release) assert d.album == "ALBUM TITLE" assert d.album_id == "ALBUM ID" assert d.artist == "ARTIST NAME" @@ -221,12 +227,12 @@ class MBAlbumInfoTest(BeetsTestCase): def test_parse_release_type(self): release = self._make_release("1984") - d = mb.album_info(release) + d = self.mb.album_info(release) assert d.albumtype == "album" def test_parse_release_full_date(self): release = self._make_release("1987-03-31") - d = mb.album_info(release) + d = self.mb.album_info(release) assert d.original_year == 1987 assert d.original_month == 3 assert d.original_day == 31 @@ -238,7 +244,7 @@ class MBAlbumInfoTest(BeetsTestCase): ] release = self._make_release(tracks=tracks) - d = mb.album_info(release) + d = self.mb.album_info(release) t = d.tracks assert len(t) == 2 assert t[0].title == "TITLE ONE" @@ -255,7 +261,7 @@ class MBAlbumInfoTest(BeetsTestCase): ] release = self._make_release(tracks=tracks) - d = mb.album_info(release) + d = self.mb.album_info(release) t = d.tracks assert t[0].medium_index == 1 assert t[0].index == 1 @@ -269,7 +275,7 @@ class MBAlbumInfoTest(BeetsTestCase): ] release = self._make_release(tracks=tracks) - d = mb.album_info(release) + d = self.mb.album_info(release) assert d.mediums == 1 t = d.tracks assert t[0].medium == 1 @@ -296,7 +302,7 @@ class MBAlbumInfoTest(BeetsTestCase): } ) - d = mb.album_info(release) + d = self.mb.album_info(release) assert d.mediums == 2 t = d.tracks assert t[0].medium == 1 @@ -308,79 +314,81 @@ class MBAlbumInfoTest(BeetsTestCase): def test_parse_release_year_month_only(self): release = self._make_release("1987-03") - d = mb.album_info(release) + d = self.mb.album_info(release) assert d.original_year == 1987 assert d.original_month == 3 def test_no_durations(self): tracks = [self._make_track("TITLE", "ID", None)] release = self._make_release(tracks=tracks) - d = mb.album_info(release) + d = self.mb.album_info(release) assert d.tracks[0].length is None def test_track_length_overrides_recording_length(self): tracks = [self._make_track("TITLE", "ID", 1.0 * 1000.0)] release = self._make_release(tracks=tracks, track_length=2.0 * 1000.0) - d = mb.album_info(release) + d = self.mb.album_info(release) assert d.tracks[0].length == 2.0 def test_no_release_date(self): release = self._make_release(None) - d = mb.album_info(release) + d = self.mb.album_info(release) assert not d.original_year assert not d.original_month assert not d.original_day def test_various_artists_defaults_false(self): release = self._make_release(None) - d = mb.album_info(release) + d = self.mb.album_info(release) assert not d.va def test_detect_various_artists(self): release = self._make_release(None) - release["artist-credit"][0]["artist"]["id"] = mb.VARIOUS_ARTISTS_ID - d = mb.album_info(release) + release["artist-credit"][0]["artist"]["id"] = ( + musicbrainz.VARIOUS_ARTISTS_ID + ) + d = self.mb.album_info(release) assert d.va def test_parse_artist_sort_name(self): release = self._make_release(None) - d = mb.album_info(release) + d = self.mb.album_info(release) assert d.artist_sort == "ARTIST SORT NAME" def test_parse_releasegroupid(self): release = self._make_release(None) - d = mb.album_info(release) + d = self.mb.album_info(release) assert d.releasegroup_id == "RELEASE GROUP ID" def test_parse_asin(self): release = self._make_release(None) - d = mb.album_info(release) + d = self.mb.album_info(release) assert d.asin == "ALBUM ASIN" def test_parse_catalognum(self): release = self._make_release(None) - d = mb.album_info(release) + d = self.mb.album_info(release) assert d.catalognum == "CATALOG NUMBER" def test_parse_textrepr(self): release = self._make_release(None) - d = mb.album_info(release) + d = self.mb.album_info(release) assert d.script == "SCRIPT" assert d.language == "LANGUAGE" def test_parse_country(self): release = self._make_release(None) - d = mb.album_info(release) + d = self.mb.album_info(release) assert d.country == "COUNTRY" def test_parse_status(self): release = self._make_release(None) - d = mb.album_info(release) + d = self.mb.album_info(release) assert d.albumstatus == "STATUS" def test_parse_barcode(self): release = self._make_release(None) - d = mb.album_info(release) + d = self.mb.album_info(release) assert d.barcode == "BARCODE" def test_parse_media(self): @@ -389,12 +397,12 @@ class MBAlbumInfoTest(BeetsTestCase): self._make_track("TITLE TWO", "ID TWO", 200.0 * 1000.0), ] release = self._make_release(None, tracks=tracks) - d = mb.album_info(release) + d = self.mb.album_info(release) assert d.media == "FORMAT" def test_parse_disambig(self): release = self._make_release(None) - d = mb.album_info(release) + d = self.mb.album_info(release) assert d.albumdisambig == "R_DISAMBIGUATION" assert d.releasegroupdisambig == "RG_DISAMBIGUATION" @@ -404,7 +412,7 @@ class MBAlbumInfoTest(BeetsTestCase): self._make_track("TITLE TWO", "ID TWO", 200.0 * 1000.0), ] release = self._make_release(None, tracks=tracks) - d = mb.album_info(release) + d = self.mb.album_info(release) t = d.tracks assert t[0].disctitle == "MEDIUM TITLE" assert t[1].disctitle == "MEDIUM TITLE" @@ -412,13 +420,13 @@ class MBAlbumInfoTest(BeetsTestCase): def test_missing_language(self): release = self._make_release(None) del release["text-representation"]["language"] - d = mb.album_info(release) + d = self.mb.album_info(release) assert d.language is None def test_parse_recording_artist(self): tracks = [self._make_track("a", "b", 1, True)] release = self._make_release(None, tracks=tracks) - track = mb.album_info(release).tracks[0] + 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" @@ -427,7 +435,7 @@ class MBAlbumInfoTest(BeetsTestCase): def test_parse_recording_artist_multi(self): tracks = [self._make_track("a", "b", 1, True, multi_artist_credit=True)] release = self._make_release(None, tracks=tracks) - track = mb.album_info(release).tracks[0] + 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 ( @@ -459,7 +467,7 @@ class MBAlbumInfoTest(BeetsTestCase): def test_track_artist_overrides_recording_artist(self): tracks = [self._make_track("a", "b", 1, True)] release = self._make_release(None, tracks=tracks, track_artist=True) - track = mb.album_info(release).tracks[0] + 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" @@ -470,7 +478,7 @@ class MBAlbumInfoTest(BeetsTestCase): release = self._make_release( None, tracks=tracks, track_artist=True, multi_artist_credit=True ) - track = mb.album_info(release).tracks[0] + 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 ( @@ -495,12 +503,12 @@ class MBAlbumInfoTest(BeetsTestCase): def test_parse_recording_remixer(self): tracks = [self._make_track("a", "b", 1, remixer=True)] release = self._make_release(None, tracks=tracks) - track = mb.album_info(release).tracks[0] + track = self.mb.album_info(release).tracks[0] assert track.remixer == "RECORDING REMIXER ARTIST NAME" def test_data_source(self): release = self._make_release() - d = mb.album_info(release) + d = self.mb.album_info(release) assert d.data_source == "MusicBrainz" def test_ignored_media(self): @@ -510,7 +518,7 @@ class MBAlbumInfoTest(BeetsTestCase): self._make_track("TITLE TWO", "ID TWO", 200.0 * 1000.0), ] release = self._make_release(tracks=tracks, medium_format="IGNORED1") - d = mb.album_info(release) + d = self.mb.album_info(release) assert len(d.tracks) == 0 def test_no_ignored_media(self): @@ -520,7 +528,7 @@ class MBAlbumInfoTest(BeetsTestCase): self._make_track("TITLE TWO", "ID TWO", 200.0 * 1000.0), ] release = self._make_release(tracks=tracks, medium_format="NON-IGNORED") - d = mb.album_info(release) + d = self.mb.album_info(release) assert len(d.tracks) == 2 def test_skip_data_track(self): @@ -530,7 +538,7 @@ class MBAlbumInfoTest(BeetsTestCase): self._make_track("TITLE TWO", "ID TWO", 200.0 * 1000.0), ] release = self._make_release(tracks=tracks) - d = mb.album_info(release) + d = self.mb.album_info(release) assert len(d.tracks) == 2 assert d.tracks[0].title == "TITLE ONE" assert d.tracks[1].title == "TITLE TWO" @@ -546,7 +554,7 @@ class MBAlbumInfoTest(BeetsTestCase): ) ] release = self._make_release(tracks=tracks, data_tracks=data_tracks) - d = mb.album_info(release) + d = self.mb.album_info(release) assert len(d.tracks) == 2 assert d.tracks[0].title == "TITLE ONE" assert d.tracks[1].title == "TITLE TWO" @@ -563,7 +571,7 @@ class MBAlbumInfoTest(BeetsTestCase): ) ] release = self._make_release(tracks=tracks, data_tracks=data_tracks) - d = mb.album_info(release) + d = self.mb.album_info(release) assert len(d.tracks) == 3 assert d.tracks[0].title == "TITLE ONE" assert d.tracks[1].title == "TITLE TWO" @@ -578,7 +586,7 @@ class MBAlbumInfoTest(BeetsTestCase): self._make_track("TITLE TWO", "ID TWO", 200.0 * 1000.0), ] release = self._make_release(tracks=tracks) - d = mb.album_info(release) + d = self.mb.album_info(release) assert len(d.tracks) == 2 assert d.tracks[0].title == "TITLE ONE" assert d.tracks[1].title == "TITLE TWO" @@ -594,7 +602,7 @@ class MBAlbumInfoTest(BeetsTestCase): ) ] release = self._make_release(tracks=tracks, data_tracks=data_tracks) - d = mb.album_info(release) + d = self.mb.album_info(release) assert len(d.tracks) == 2 assert d.tracks[0].title == "TITLE ONE" assert d.tracks[1].title == "TITLE TWO" @@ -610,7 +618,7 @@ class MBAlbumInfoTest(BeetsTestCase): self._make_track("TITLE TWO", "ID TWO", 200.0 * 1000.0), ] release = self._make_release(tracks=tracks) - d = mb.album_info(release) + d = self.mb.album_info(release) assert len(d.tracks) == 3 assert d.tracks[0].title == "TITLE ONE" assert d.tracks[1].title == "TITLE VIDEO" @@ -629,7 +637,7 @@ class MBAlbumInfoTest(BeetsTestCase): ) ] release = self._make_release(tracks=tracks, data_tracks=data_tracks) - d = mb.album_info(release) + d = self.mb.album_info(release) assert len(d.tracks) == 3 assert d.tracks[0].title == "TITLE ONE" assert d.tracks[1].title == "TITLE TWO" @@ -647,7 +655,7 @@ class MBAlbumInfoTest(BeetsTestCase): ] release = self._make_release(tracks=tracks) - d = mb.album_info(release) + d = self.mb.album_info(release) t = d.tracks assert len(t) == 2 assert t[0].trackdisambig is None @@ -657,18 +665,18 @@ class MBAlbumInfoTest(BeetsTestCase): class ParseIDTest(BeetsTestCase): def test_parse_id_correct(self): id_string = "28e32c71-1450-463e-92bf-e0a46446fc11" - out = mb._parse_id(id_string) + out = musicbrainz._parse_id(id_string) assert out == id_string def test_parse_id_non_id_returns_none(self): id_string = "blah blah" - out = mb._parse_id(id_string) + out = musicbrainz._parse_id(id_string) assert out is None def test_parse_id_url_finds_id(self): id_string = "28e32c71-1450-463e-92bf-e0a46446fc11" id_url = "https://musicbrainz.org/entity/%s" % id_string - out = mb._parse_id(id_url) + out = musicbrainz._parse_id(id_url) assert out == id_string @@ -696,24 +704,28 @@ class ArtistFlatteningTest(BeetsTestCase): def test_single_artist(self): credit = [self._credit_dict()] - a, s, c = mb._flatten_artist_credit(credit) + a, s, c = musicbrainz._flatten_artist_credit(credit) assert a == "NAME" assert s == "SORT" assert c == "CREDIT" - a, s, c = mb._multi_artist_credit(credit, include_join_phrase=False) + a, s, c = musicbrainz._multi_artist_credit( + credit, include_join_phrase=False + ) assert a == ["NAME"] assert s == ["SORT"] assert c == ["CREDIT"] def test_two_artists(self): credit = [self._credit_dict("a"), " AND ", self._credit_dict("b")] - a, s, c = mb._flatten_artist_credit(credit) + a, s, c = musicbrainz._flatten_artist_credit(credit) assert a == "NAMEa AND NAMEb" assert s == "SORTa AND SORTb" assert c == "CREDITa AND CREDITb" - a, s, c = mb._multi_artist_credit(credit, include_join_phrase=False) + a, s, c = musicbrainz._multi_artist_credit( + credit, include_join_phrase=False + ) assert a == ["NAMEa", "NAMEb"] assert s == ["SORTa", "SORTb"] assert c == ["CREDITa", "CREDITb"] @@ -730,36 +742,36 @@ class ArtistFlatteningTest(BeetsTestCase): # test no alias config["import"]["languages"] = [""] - flat = mb._flatten_artist_credit([credit_dict]) + flat = musicbrainz._flatten_artist_credit([credit_dict]) assert flat == ("NAME", "SORT", "CREDIT") # test en primary config["import"]["languages"] = ["en"] - flat = mb._flatten_artist_credit([credit_dict]) + flat = musicbrainz._flatten_artist_credit([credit_dict]) assert flat == ("ALIASen", "ALIASSORTen", "CREDIT") # test en_GB en primary config["import"]["languages"] = ["en_GB", "en"] - flat = mb._flatten_artist_credit([credit_dict]) + flat = musicbrainz._flatten_artist_credit([credit_dict]) assert flat == ("ALIASen_GB", "ALIASSORTen_GB", "CREDIT") # test en en_GB primary config["import"]["languages"] = ["en", "en_GB"] - flat = mb._flatten_artist_credit([credit_dict]) + flat = musicbrainz._flatten_artist_credit([credit_dict]) assert flat == ("ALIASen", "ALIASSORTen", "CREDIT") # test fr primary config["import"]["languages"] = ["fr"] - flat = mb._flatten_artist_credit([credit_dict]) + flat = musicbrainz._flatten_artist_credit([credit_dict]) assert flat == ("ALIASfr_P", "ALIASSORTfr_P", "CREDIT") # test for not matching non-primary config["import"]["languages"] = ["pt_BR", "fr"] - flat = mb._flatten_artist_credit([credit_dict]) + flat = musicbrainz._flatten_artist_credit([credit_dict]) assert flat == ("ALIASfr_P", "ALIASSORTfr_P", "CREDIT") -class MBLibraryTest(BeetsTestCase): +class MBLibraryTest(MusicBrainzTestCase): def test_match_track(self): with mock.patch("musicbrainzngs.search_recordings") as p: p.return_value = { @@ -771,13 +783,13 @@ class MBLibraryTest(BeetsTestCase): } ], } - ti = list(mb.match_track("hello", "there"))[0] + ti = list(self.mb.item_candidates(None, "hello", "there"))[0] p.assert_called_with(artist="hello", recording="there", limit=5) assert ti.title == "foo" assert ti.track_id == "bar" - def test_match_album(self): + def test_candidates(self): mbid = "d2a6f856-b553-40a0-ac54-a321e8e2da99" with mock.patch("musicbrainzngs.search_releases") as sp: sp.return_value = { @@ -824,7 +836,7 @@ class MBLibraryTest(BeetsTestCase): } } - ai = list(mb.match_album("hello", "there"))[0] + ai = list(self.mb.candidates([], "hello", "there", False))[0] sp.assert_called_with(artist="hello", release="there", limit=5) gp.assert_called_with(mbid, mock.ANY) @@ -833,13 +845,13 @@ class MBLibraryTest(BeetsTestCase): def test_match_track_empty(self): with mock.patch("musicbrainzngs.search_recordings") as p: - til = list(mb.match_track(" ", " ")) + til = list(self.mb.item_candidates(None, " ", " ")) assert not p.called assert til == [] - def test_match_album_empty(self): + def test_candidates_empty(self): with mock.patch("musicbrainzngs.search_releases") as p: - ail = list(mb.match_album(" ", " ")) + ail = list(self.mb.candidates([], " ", " ", False)) assert not p.called assert ail == [] @@ -927,7 +939,7 @@ class MBLibraryTest(BeetsTestCase): with mock.patch("musicbrainzngs.get_release_by_id") as gp: gp.side_effect = side_effect - album = mb.album_for_id("d2a6f856-b553-40a0-ac54-a321e8e2da02") + album = self.mb.album_for_id("d2a6f856-b553-40a0-ac54-a321e8e2da02") assert album.country == "COUNTRY" def test_pseudo_releases_with_empty_links(self): @@ -972,7 +984,7 @@ class MBLibraryTest(BeetsTestCase): with mock.patch("musicbrainzngs.get_release_by_id") as gp: gp.side_effect = side_effect - album = mb.album_for_id("d2a6f856-b553-40a0-ac54-a321e8e2da02") + album = self.mb.album_for_id("d2a6f856-b553-40a0-ac54-a321e8e2da02") assert album.country is None def test_pseudo_releases_without_links(self): @@ -1016,7 +1028,7 @@ class MBLibraryTest(BeetsTestCase): with mock.patch("musicbrainzngs.get_release_by_id") as gp: gp.side_effect = side_effect - album = mb.album_for_id("d2a6f856-b553-40a0-ac54-a321e8e2da02") + album = self.mb.album_for_id("d2a6f856-b553-40a0-ac54-a321e8e2da02") assert album.country is None def test_pseudo_releases_with_unsupported_links(self): @@ -1067,5 +1079,5 @@ class MBLibraryTest(BeetsTestCase): with mock.patch("musicbrainzngs.get_release_by_id") as gp: gp.side_effect = side_effect - album = mb.album_for_id("d2a6f856-b553-40a0-ac54-a321e8e2da02") + album = self.mb.album_for_id("d2a6f856-b553-40a0-ac54-a321e8e2da02") assert album.country is None