|
3 | 3 | # Picard, the next-generation MusicBrainz tagger |
4 | 4 | # |
5 | 5 | # Copyright (C) 2021-2022 Laurent Monin |
6 | | -# Copyright (C) 2021-2022, 2024 Philipp Wolfer |
| 6 | +# Copyright (C) 2021-2022, 2024-2025 Philipp Wolfer |
7 | 7 | # |
8 | 8 | # This program is free software; you can redistribute it and/or |
9 | 9 | # modify it under the terms of the GNU General Public License |
|
24 | 24 |
|
25 | 25 | from test.picardtestcase import PicardTestCase |
26 | 26 |
|
27 | | -from picard.track import Track |
| 27 | +from picard.album import ( |
| 28 | + Album, |
| 29 | + AlbumArtist, |
| 30 | +) |
| 31 | +from picard.const import VARIOUS_ARTISTS_ID |
| 32 | +from picard.releasegroup import ReleaseGroup |
| 33 | +from picard.track import ( |
| 34 | + Track, |
| 35 | + TrackArtist, |
| 36 | +) |
28 | 37 |
|
29 | 38 |
|
30 | 39 | class TrackTest(PicardTestCase): |
31 | 40 | def test_can_link_fingerprint(self): |
32 | 41 | track = Track('123') |
33 | 42 | self.assertTrue(track.can_link_fingerprint) |
34 | 43 |
|
| 44 | + def test_merge_folksonomy_tags_no_album(self): |
| 45 | + track = Track('123') |
| 46 | + track._genres = Counter(pop=6, rock=7, blues=2) |
| 47 | + self.assertEqual(track._merge_folksonomy_tags('genres'), track._genres) |
| 48 | + |
| 49 | + def test_merge_folksonomy_tags_with_album(self): |
| 50 | + track = Track('123') |
| 51 | + track._genres = Counter(pop=6, rock=7) |
| 52 | + album = Album('456') |
| 53 | + album._genres = Counter(rock=3, blues=2) |
| 54 | + release_group = ReleaseGroup('789') |
| 55 | + release_group._genres = Counter(blues=1) |
| 56 | + album.release_group = release_group |
| 57 | + track.album = album |
| 58 | + expected = Counter(pop=6, rock=10, blues=3) |
| 59 | + self.assertEqual(track._merge_folksonomy_tags('genres'), expected) |
| 60 | + |
| 61 | + def test_merge_folksonomy_tags_artist_genre_fallback(self): |
| 62 | + self.set_config_values({'artists_genres': True}) |
| 63 | + track = Track('123') |
| 64 | + album = Album('456') |
| 65 | + artist1 = AlbumArtist('1') |
| 66 | + artist1._genres = Counter(rock=1, blues=2) |
| 67 | + album._album_artists.append(artist1) |
| 68 | + artist2 = AlbumArtist('2') |
| 69 | + artist2._genres = Counter(pop=2, rock=1) |
| 70 | + album._album_artists.append(artist2) |
| 71 | + track.album = album |
| 72 | + expected = artist1._genres + artist2._genres |
| 73 | + self.assertEqual(track._merge_folksonomy_tags('genres'), expected) |
| 74 | + |
| 75 | + def test_merge_folksonomy_tags_various_artist_genre_fallback(self): |
| 76 | + self.set_config_values({'artists_genres': True}) |
| 77 | + track = Track('123') |
| 78 | + track.metadata['musicbrainz_albumartistid'] = VARIOUS_ARTISTS_ID |
| 79 | + album = Album('456') |
| 80 | + album_artist = AlbumArtist('1') |
| 81 | + album_artist._genres = Counter(country=1) |
| 82 | + album._album_artists.append(album_artist) |
| 83 | + track.album = album |
| 84 | + track_artist1 = TrackArtist('2') |
| 85 | + track_artist1._genres = Counter(rock=1, blues=2) |
| 86 | + track._track_artists.append(track_artist1) |
| 87 | + track_artist2 = TrackArtist('3') |
| 88 | + track_artist2._genres = Counter(pop=2, rock=1) |
| 89 | + track._track_artists.append(track_artist2) |
| 90 | + expected = track_artist1._genres + track_artist2._genres |
| 91 | + self.assertEqual(track._merge_folksonomy_tags('genres'), expected) |
| 92 | + |
| 93 | + def test_add_genres_variable(self): |
| 94 | + track = Track('123') |
| 95 | + track._genres = Counter(pop=6, rock=7, blues=2) |
| 96 | + track._add_genres_variable() |
| 97 | + self.assertEqual(track.metadata.getall('~genres'), ['blues', 'pop', 'rock']) |
| 98 | + |
| 99 | + def test_add_folksonomy_tags_variable(self): |
| 100 | + track = Track('123') |
| 101 | + track._genres = Counter(pop=6, rock=7, blues=2) |
| 102 | + track._folksonomy_tags = Counter(live=2, pop=6, rock=7, blues=2, favorite=1) |
| 103 | + track._add_folksonomy_tags_variable() |
| 104 | + self.assertEqual(track.metadata.getall('~folksonomy_tags'), ['favorite', 'live']) |
| 105 | + |
35 | 106 |
|
36 | | -class TrackGenres2MetadataTest(PicardTestCase): |
| 107 | +class TrackGenresToMetadataTest(PicardTestCase): |
37 | 108 | def test_empty(self): |
38 | 109 | genres = Counter() |
39 | 110 | ret = Track._genres_to_metadata(genres) |
@@ -79,10 +150,10 @@ def test_minusage(self): |
79 | 150 |
|
80 | 151 | def test_filters(self): |
81 | 152 | genres = Counter(pop=6, rock=7, blues=2) |
82 | | - ret = Track._genres_to_metadata(genres, filters="-blues") |
| 153 | + ret = Track._genres_to_metadata(genres, filters='-blues') |
83 | 154 | self.assertEqual(ret, ['Pop', 'Rock']) |
84 | 155 |
|
85 | 156 | def test_join_with(self): |
86 | 157 | genres = Counter(pop=6, rock=7, blues=2) |
87 | | - ret = Track._genres_to_metadata(genres, join_with=",") |
| 158 | + ret = Track._genres_to_metadata(genres, join_with=',') |
88 | 159 | self.assertEqual(ret, ['Blues,Pop,Rock']) |
0 commit comments