Skip to content

Commit d222b6e

Browse files
committed
Added tests for Track genre handling
1 parent bbb8901 commit d222b6e

File tree

2 files changed

+83
-10
lines changed

2 files changed

+83
-10
lines changed

test/test_item.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
#
33
# Picard, the next-generation MusicBrainz tagger
44
#
5-
# Copyright (C) 2018, 2021, 2024 Philipp Wolfer
5+
# Copyright (C) 2018, 2021, 2024-2025 Philipp Wolfer
66
# Copyright (C) 2020-2021 Laurent Monin
77
#
88
# This program is free software; you can redistribute it and/or
@@ -20,6 +20,7 @@
2020
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
2121

2222

23+
from collections import Counter
2324
from unittest.mock import Mock
2425

2526
from test.picardtestcase import PicardTestCase
@@ -78,10 +79,11 @@ def test_set_genre_inc_params_with_user_tags(self):
7879
self.assertTrue(require_auth)
7980

8081
def test_add_genres(self):
81-
self.obj.add_genre('genre1', 2)
82-
self.assertEqual(self.obj.genres['genre1'], 2)
83-
self.obj.add_genre('genre1', 5)
84-
self.assertEqual(self.obj.genres['genre1'], 7)
82+
self.obj.add_genre('pop', 1)
83+
self.obj.add_genre('rock', 1)
84+
self.obj.add_genre('blues', 2)
85+
self.obj.add_genre('pop', 2)
86+
self.assertEqual(self.obj._genres, Counter(pop=3, rock=1, blues=2))
8587

8688
def test_set_genre_inc_custom_config(self):
8789
inc = set()

test/test_track.py

Lines changed: 76 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
# Picard, the next-generation MusicBrainz tagger
44
#
55
# Copyright (C) 2021-2022 Laurent Monin
6-
# Copyright (C) 2021-2022, 2024 Philipp Wolfer
6+
# Copyright (C) 2021-2022, 2024-2025 Philipp Wolfer
77
#
88
# This program is free software; you can redistribute it and/or
99
# modify it under the terms of the GNU General Public License
@@ -24,16 +24,87 @@
2424

2525
from test.picardtestcase import PicardTestCase
2626

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+
)
2837

2938

3039
class TrackTest(PicardTestCase):
3140
def test_can_link_fingerprint(self):
3241
track = Track('123')
3342
self.assertTrue(track.can_link_fingerprint)
3443

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+
35106

36-
class TrackGenres2MetadataTest(PicardTestCase):
107+
class TrackGenresToMetadataTest(PicardTestCase):
37108
def test_empty(self):
38109
genres = Counter()
39110
ret = Track._genres_to_metadata(genres)
@@ -79,10 +150,10 @@ def test_minusage(self):
79150

80151
def test_filters(self):
81152
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')
83154
self.assertEqual(ret, ['Pop', 'Rock'])
84155

85156
def test_join_with(self):
86157
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=',')
88159
self.assertEqual(ret, ['Blues,Pop,Rock'])

0 commit comments

Comments
 (0)