|
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 Album, AlbumArtist |
| 28 | +from picard.const import VARIOUS_ARTISTS_ID |
| 29 | +from picard.releasegroup import ReleaseGroup |
| 30 | +from picard.track import Track, TrackArtist |
28 | 31 |
|
29 | 32 |
|
30 | 33 | class TrackTest(PicardTestCase): |
31 | 34 | def test_can_link_fingerprint(self): |
32 | 35 | track = Track('123') |
33 | 36 | self.assertTrue(track.can_link_fingerprint) |
34 | 37 |
|
| 38 | + def test_merge_folksonomy_tags_no_album(self): |
| 39 | + track = Track('123') |
| 40 | + track._genres = Counter(pop=6, rock=7, blues=2) |
| 41 | + self.assertEqual(track._merge_folksonomy_tags('genres'), track._genres) |
| 42 | + |
| 43 | + def test_merge_folksonomy_tags_with_album(self): |
| 44 | + track = Track('123') |
| 45 | + track._genres = Counter(pop=6, rock=7) |
| 46 | + album = Album('456') |
| 47 | + album._genres = Counter(rock=3, blues=2) |
| 48 | + release_group = ReleaseGroup('789') |
| 49 | + release_group._genres = Counter(blues=1) |
| 50 | + album.release_group = release_group |
| 51 | + track.album = album |
| 52 | + expected = Counter(pop=6, rock=10, blues=3) |
| 53 | + self.assertEqual(track._merge_folksonomy_tags('genres'), expected) |
| 54 | + |
| 55 | + def test_merge_folksonomy_tags_artist_genre_fallback(self): |
| 56 | + self.set_config_values({ 'artists_genres': True }) |
| 57 | + track = Track('123') |
| 58 | + album = Album('456') |
| 59 | + artist1 = AlbumArtist('1') |
| 60 | + artist1._genres = Counter(rock=1, blues=2) |
| 61 | + album._album_artists.append(artist1) |
| 62 | + artist2 = AlbumArtist('2') |
| 63 | + artist2._genres = Counter(pop=2, rock=1) |
| 64 | + album._album_artists.append(artist2) |
| 65 | + track.album = album |
| 66 | + expected = artist1._genres + artist2._genres |
| 67 | + self.assertEqual(track._merge_folksonomy_tags('genres'), expected) |
| 68 | + |
| 69 | + def test_merge_folksonomy_tags_various_artist_genre_fallback(self): |
| 70 | + self.set_config_values({'artists_genres': True}) |
| 71 | + track = Track('123') |
| 72 | + track.metadata['musicbrainz_albumartistid'] = VARIOUS_ARTISTS_ID |
| 73 | + album = Album('456') |
| 74 | + album_artist = AlbumArtist('1') |
| 75 | + album_artist._genres = Counter(country=1) |
| 76 | + album._album_artists.append(album_artist) |
| 77 | + track.album = album |
| 78 | + track_artist1 = TrackArtist('2') |
| 79 | + track_artist1._genres = Counter(rock=1, blues=2) |
| 80 | + track._track_artists.append(track_artist1) |
| 81 | + track_artist2 = TrackArtist('3') |
| 82 | + track_artist2._genres = Counter(pop=2, rock=1) |
| 83 | + track._track_artists.append(track_artist2) |
| 84 | + expected = track_artist1._genres + track_artist2._genres |
| 85 | + self.assertEqual(track._merge_folksonomy_tags('genres'), expected) |
| 86 | + |
| 87 | + def test_add_genres_variable(self): |
| 88 | + track = Track('123') |
| 89 | + track._genres = Counter(pop=6, rock=7, blues=2) |
| 90 | + track._add_genres_variable() |
| 91 | + self.assertEqual(track.metadata.getall('~genres'), ['blues', 'pop', 'rock']) |
| 92 | + |
| 93 | + def test_add_folksonomy_tags_variable(self): |
| 94 | + track = Track('123') |
| 95 | + track._genres = Counter(pop=6, rock=7, blues=2) |
| 96 | + track._folksonomy_tags = Counter(live=2, pop=6, rock=7, blues=2, favorite=1) |
| 97 | + track._add_folksonomy_tags_variable() |
| 98 | + self.assertEqual(track.metadata.getall('~folksonomy_tags'), ['favorite', 'live']) |
| 99 | + |
35 | 100 |
|
36 | | -class TrackGenres2MetadataTest(PicardTestCase): |
| 101 | +class TrackGenresToMetadataTest(PicardTestCase): |
37 | 102 | def test_empty(self): |
38 | 103 | genres = Counter() |
39 | 104 | ret = Track._genres_to_metadata(genres) |
@@ -79,10 +144,10 @@ def test_minusage(self): |
79 | 144 |
|
80 | 145 | def test_filters(self): |
81 | 146 | genres = Counter(pop=6, rock=7, blues=2) |
82 | | - ret = Track._genres_to_metadata(genres, filters="-blues") |
| 147 | + ret = Track._genres_to_metadata(genres, filters='-blues') |
83 | 148 | self.assertEqual(ret, ['Pop', 'Rock']) |
84 | 149 |
|
85 | 150 | def test_join_with(self): |
86 | 151 | genres = Counter(pop=6, rock=7, blues=2) |
87 | | - ret = Track._genres_to_metadata(genres, join_with=",") |
| 152 | + ret = Track._genres_to_metadata(genres, join_with=',') |
88 | 153 | self.assertEqual(ret, ['Blues,Pop,Rock']) |
0 commit comments