From b95990ee9ccd1596a39ab5ace38af23d97267ce9 Mon Sep 17 00:00:00 2001 From: Fabrice Laporte Date: Thu, 9 Oct 2014 00:00:26 +0200 Subject: [PATCH 1/3] lastgenre: add unit tests --- test/test_lastgenre.py | 72 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) diff --git a/test/test_lastgenre.py b/test/test_lastgenre.py index 62f20491b..91b9dc582 100644 --- a/test/test_lastgenre.py +++ b/test/test_lastgenre.py @@ -14,9 +14,12 @@ """Tests for the 'lastgenre' plugin.""" +from mock import Mock + from _common import unittest from beetsplug import lastgenre from beets import config +from beets import library from helper import TestHelper @@ -136,6 +139,75 @@ class LastGenrePluginTest(unittest.TestCase, TestHelper): self.assertEqual(self.plugin._resolve_genres(['blues', 'blues']), 'Blues') + def test_tags_for(self): + class MockPylastElem(object): + def __init__(self, name): + self.name = name + + def get_name(self): + return self.name + + class MockPylastObj(object): + def get_top_tags(self): + tag1 = Mock() + tag1.weight = 90 + tag1.item = MockPylastElem(u'Pop') + tag2 = Mock() + tag2.weight = 40 + tag2.item = MockPylastElem(u'Rap') + return [tag1, tag2] + + res = lastgenre._tags_for(MockPylastObj()) + self.assertEqual(res, [u'pop', u'rap']) + res = lastgenre._tags_for(MockPylastObj(), min_weight=50) + self.assertEqual(res, [u'pop']) + + def test_get_genre(self): + MOCK_GENRES = {'track': u'1', 'album': u'2', 'artist': u'3'} + + def mock_fetch_track_genre(self, obj=None): + return MOCK_GENRES['track'] + + def mock_fetch_album_genre(self, obj): + return MOCK_GENRES['album'] + + def mock_fetch_artist_genre(self, obj): + return MOCK_GENRES['artist'] + + lastgenre.LastGenrePlugin.fetch_track_genre = mock_fetch_track_genre + lastgenre.LastGenrePlugin.fetch_album_genre = mock_fetch_album_genre + lastgenre.LastGenrePlugin.fetch_artist_genre = mock_fetch_artist_genre + + self._setup_config(whitelist=False) + item_mock = Mock(spec=library.Item) + item_mock.genre = MOCK_GENRES['track'] + + config['lastgenre'] = {'force': False} + res = self.plugin._get_genre(item_mock) + self.assertEqual(res, (item_mock.genre, 'keep')) + + config['lastgenre'] = {'force': True, 'source': 'track'} + res = self.plugin._get_genre(item_mock) + self.assertEqual(res, (MOCK_GENRES['track'], 'track')) + + config['lastgenre'] = {'source': 'album'} + res = self.plugin._get_genre(item_mock) + self.assertEqual(res, (MOCK_GENRES['album'], 'album')) + + config['lastgenre'] = {'source': 'artist'} + res = self.plugin._get_genre(item_mock) + self.assertEqual(res, (MOCK_GENRES['artist'], 'artist')) + + MOCK_GENRES['artist'] = None + res = self.plugin._get_genre(item_mock) + self.assertEqual(res, (item_mock.genre, 'original')) + + config['lastgenre'] = {'fallback': 'rap'} + item_mock.genre = None + res = self.plugin._get_genre(item_mock) + self.assertEqual(res, (config['lastgenre']['fallback'].get(), + 'fallback')) + def suite(): return unittest.TestLoader().loadTestsFromName(__name__) From 2b908b48bc2c320528df61503c844c683f9686eb Mon Sep 17 00:00:00 2001 From: Fabrice Laporte Date: Thu, 9 Oct 2014 06:38:40 +0200 Subject: [PATCH 2/3] lastgenre: use an ordinary Item instead of a Mock --- test/test_lastgenre.py | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/test/test_lastgenre.py b/test/test_lastgenre.py index 91b9dc582..5ff28f123 100644 --- a/test/test_lastgenre.py +++ b/test/test_lastgenre.py @@ -16,6 +16,7 @@ from mock import Mock +import _common from _common import unittest from beetsplug import lastgenre from beets import config @@ -179,32 +180,32 @@ class LastGenrePluginTest(unittest.TestCase, TestHelper): lastgenre.LastGenrePlugin.fetch_artist_genre = mock_fetch_artist_genre self._setup_config(whitelist=False) - item_mock = Mock(spec=library.Item) - item_mock.genre = MOCK_GENRES['track'] + item = _common.item() + item.genre = MOCK_GENRES['track'] config['lastgenre'] = {'force': False} - res = self.plugin._get_genre(item_mock) - self.assertEqual(res, (item_mock.genre, 'keep')) + res = self.plugin._get_genre(item) + self.assertEqual(res, (item.genre, 'keep')) config['lastgenre'] = {'force': True, 'source': 'track'} - res = self.plugin._get_genre(item_mock) + res = self.plugin._get_genre(item) self.assertEqual(res, (MOCK_GENRES['track'], 'track')) config['lastgenre'] = {'source': 'album'} - res = self.plugin._get_genre(item_mock) + res = self.plugin._get_genre(item) self.assertEqual(res, (MOCK_GENRES['album'], 'album')) config['lastgenre'] = {'source': 'artist'} - res = self.plugin._get_genre(item_mock) + res = self.plugin._get_genre(item) self.assertEqual(res, (MOCK_GENRES['artist'], 'artist')) MOCK_GENRES['artist'] = None - res = self.plugin._get_genre(item_mock) - self.assertEqual(res, (item_mock.genre, 'original')) + res = self.plugin._get_genre(item) + self.assertEqual(res, (item.genre, 'original')) config['lastgenre'] = {'fallback': 'rap'} - item_mock.genre = None - res = self.plugin._get_genre(item_mock) + item.genre = None + res = self.plugin._get_genre(item) self.assertEqual(res, (config['lastgenre']['fallback'].get(), 'fallback')) From b32838b519b248d0b92cac9bceb40bdec3f84084 Mon Sep 17 00:00:00 2001 From: Fabrice Laporte Date: Thu, 9 Oct 2014 06:47:23 +0200 Subject: [PATCH 3/3] fix flake8 --- test/test_lastgenre.py | 1 - 1 file changed, 1 deletion(-) diff --git a/test/test_lastgenre.py b/test/test_lastgenre.py index 5ff28f123..9aaace237 100644 --- a/test/test_lastgenre.py +++ b/test/test_lastgenre.py @@ -20,7 +20,6 @@ import _common from _common import unittest from beetsplug import lastgenre from beets import config -from beets import library from helper import TestHelper