From b95990ee9ccd1596a39ab5ace38af23d97267ce9 Mon Sep 17 00:00:00 2001 From: Fabrice Laporte Date: Thu, 9 Oct 2014 00:00:26 +0200 Subject: [PATCH] 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__)