Skip to content

Commit 893c3ed

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

File tree

2 files changed

+77
-10
lines changed

2 files changed

+77
-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: 70 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,81 @@
2424

2525
from test.picardtestcase import PicardTestCase
2626

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
2831

2932

3033
class TrackTest(PicardTestCase):
3134
def test_can_link_fingerprint(self):
3235
track = Track('123')
3336
self.assertTrue(track.can_link_fingerprint)
3437

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

36-
class TrackGenres2MetadataTest(PicardTestCase):
101+
class TrackGenresToMetadataTest(PicardTestCase):
37102
def test_empty(self):
38103
genres = Counter()
39104
ret = Track._genres_to_metadata(genres)
@@ -79,10 +144,10 @@ def test_minusage(self):
79144

80145
def test_filters(self):
81146
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')
83148
self.assertEqual(ret, ['Pop', 'Rock'])
84149

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

0 commit comments

Comments
 (0)