diff --git a/beetsplug/mpdstats.py b/beetsplug/mpdstats.py index fc0b3d590..fce04440a 100644 --- a/beetsplug/mpdstats.py +++ b/beetsplug/mpdstats.py @@ -201,8 +201,12 @@ class MPDStats(object): displayable_path(item.path)) def update_rating(self, item, skipped): - """Update the rating for a beets item. + """Update the rating for a beets item. The `item` can either be a + beets `Item` or None. If the item is None, nothing changes. """ + if item is None: + return + item.load() rating = self.rating( int(item.get('play_count', 0)), diff --git a/setup.py b/setup.py index 572b38dc1..e6f8bf66e 100755 --- a/setup.py +++ b/setup.py @@ -105,6 +105,7 @@ setup( 'responses', 'pyxdg', 'pathlib', + 'python-mpd', ], # Plugin (optional) dependencies: diff --git a/test/test_mpdstats.py b/test/test_mpdstats.py new file mode 100644 index 000000000..c2db78f1f --- /dev/null +++ b/test/test_mpdstats.py @@ -0,0 +1,51 @@ +# This file is part of beets. +# Copyright 2015 +# +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Software. + +from __future__ import (division, absolute_import, print_function, + unicode_literals) + + +from mock import Mock +from test._common import unittest +from test.helper import TestHelper + +from beets.library import Item +from beetsplug.mpdstats import MPDStats + + +class MPDStatsTest(unittest.TestCase, TestHelper): + def setUp(self): + self.setup_beets() + self.load_plugins('mpdstats') + + def tearDown(self): + self.teardown_beets() + self.unload_plugins() + + def test_update_rating(self): + item = Item(title='title', path='', id=1) + item.add(self.lib) + + log = Mock() + mpdstats = MPDStats(self.lib, log) + + self.assertFalse(mpdstats.update_rating(item, True)) + self.assertFalse(mpdstats.update_rating(None, True)) + + +def suite(): + return unittest.TestLoader().loadTestsFromName(__name__) + +if __name__ == b'__main__': + unittest.main(defaultTest='suite') diff --git a/tox.ini b/tox.ini index 9ab6b3c68..be8862d42 100644 --- a/tox.ini +++ b/tox.ini @@ -19,6 +19,7 @@ deps = pathlib pyxdg jellyfish + python-mpd commands = nosetests {posargs}