diff --git a/tests/backends/base.py b/tests/backends/base.py index 5a9c9846..1ee7fdff 100644 --- a/tests/backends/base.py +++ b/tests/backends/base.py @@ -102,6 +102,70 @@ class BaseCurrentPlaylistControllerTest(object): # FIXME how do we test this without going into internals? self.assertEqual(new_playlist, self.controller._playlist) + def test_get_by_id_returns_unique_match(self): + track = Track(id=1) + self.controller.playlist = Playlist( + tracks=[Track(id=13), track, Track(id=17)]) + self.assertEqual(track, self.controller.get(id=1)) + + def test_get_by_id_raises_error_if_multiple_matches(self): + track = Track(id=1) + self.controller.playlist = Playlist(tracks=[Track(id=13), track, track]) + try: + self.controller.get(id=1) + self.fail(u'Should raise LookupError if multiple matches') + except LookupError as e: + self.assertEqual(u'"id=1" match multiple tracks', e[0]) + + def test_get_by_id_raises_error_if_no_match(self): + self.controller.playlist = Playlist(tracks=[Track(id=13), Track(id=17)]) + try: + self.controller.get(id=1) + self.fail(u'Should raise LookupError if no match') + except LookupError as e: + self.assertEqual(u'"id=1" match no tracks', e[0]) + + def test_get_by_uri_returns_unique_match(self): + track = Track(uri='a') + self.controller.playlist = Playlist( + tracks=[Track(uri='z'), track, Track(uri='y')]) + self.assertEqual(track, self.controller.get(uri='a')) + + def test_get_by_uri_raises_error_if_multiple_matches(self): + track = Track(uri='a') + self.controller.playlist = Playlist( + tracks=[Track(uri='z'), track, track]) + try: + self.controller.get(uri='a') + self.fail(u'Should raise LookupError if multiple matches') + except LookupError as e: + self.assertEqual(u'"uri=a" match multiple tracks', e[0]) + + def test_get_by_uri_raises_error_if_no_match(self): + self.controller.playlist = Playlist( + tracks=[Track(uri='z'), Track(uri='y')]) + try: + self.controller.get(uri='a') + self.fail(u'Should raise LookupError if no match') + except LookupError as e: + self.assertEqual(u'"uri=a" match no tracks', e[0]) + + def test_get_by_multiple_criteria_returns_elements_matching_all(self): + track1 = Track(id=1, uri='a') + track2 = Track(id=1, uri='b') + track3 = Track(id=2, uri='b') + self.controller.playlist = Playlist(tracks=[track1, track2, track3]) + self.assertEqual(track1, self.controller.get(id=1, uri='a')) + self.assertEqual(track2, self.controller.get(id=1, uri='b')) + self.assertEqual(track3, self.controller.get(id=2, uri='b')) + + def test_get_by_criteria_that_is_not_present_in_all_elements(self): + track1 = Track(id=1) + track2 = Track(uri='b') + track3 = Track(id=2) + self.controller.playlist = Playlist(tracks=[track1, track2, track3]) + self.assertEqual(track1, self.controller.get(id=1)) + @populate_playlist def test_load_replaces_playlist(self): self.backend.current_playlist.load(Playlist()) @@ -938,6 +1002,29 @@ class BaseStoredPlaylistsControllerTest(object): playlist2 = self.stored.get(name='test') self.assertEqual(playlist1, playlist2) + def test_get_by_name_returns_unique_match(self): + playlist = Playlist(name='b') + self.stored.playlists = [Playlist(name='a'), playlist] + self.assertEqual(playlist, self.stored.get(name='b')) + + def test_get_by_name_returns_first_of_multiple_matches(self): + playlist = Playlist(name='b') + self.stored.playlists = [ + playlist, Playlist(name='a'), Playlist(name='b')] + try: + self.stored.get(name='b') + self.fail(u'Should raise LookupError if multiple matches') + except LookupError as e: + self.assertEqual(u'"name=b" match multiple playlists', e[0]) + + def test_get_by_id_raises_keyerror_if_no_match(self): + self.stored.playlists = [Playlist(name='a'), Playlist(name='b')] + try: + self.stored.get(name='c') + self.fail(u'Should raise LookupError if no match') + except LookupError as e: + self.assertEqual(u'"name=c" match no playlists', e[0]) + def test_search_returns_empty_list(self): self.assertEqual([], self.stored.search('test')) diff --git a/tests/backends/get_test.py b/tests/backends/get_test.py deleted file mode 100644 index c2ed5fe9..00000000 --- a/tests/backends/get_test.py +++ /dev/null @@ -1,99 +0,0 @@ -import unittest - -from mopidy.backends.dummy import DummyBackend, DummyCurrentPlaylistController -from mopidy.mixers.dummy import DummyMixer -from mopidy.models import Playlist, Track - -class CurrentPlaylistGetTest(unittest.TestCase): - def setUp(self): - self.b = DummyBackend(mixer=DummyMixer()) - self.c = self.b.current_playlist - - def test_get_by_id_returns_unique_match(self): - track = Track(id=1) - self.c.playlist = Playlist(tracks=[Track(id=13), track, Track(id=17)]) - self.assertEqual(track, self.c.get(id=1)) - - def test_get_by_id_raises_error_if_multiple_matches(self): - track = Track(id=1) - self.c.playlist = Playlist(tracks=[Track(id=13), track, track]) - try: - self.c.get(id=1) - self.fail(u'Should raise LookupError if multiple matches') - except LookupError as e: - self.assertEqual(u'"id=1" match multiple tracks', e[0]) - - def test_get_by_id_raises_error_if_no_match(self): - self.c.playlist = Playlist(tracks=[Track(id=13), Track(id=17)]) - try: - self.c.get(id=1) - self.fail(u'Should raise LookupError if no match') - except LookupError as e: - self.assertEqual(u'"id=1" match no tracks', e[0]) - - def test_get_by_uri_returns_unique_match(self): - track = Track(uri='a') - self.c.playlist = Playlist( - tracks=[Track(uri='z'), track, Track(uri='y')]) - self.assertEqual(track, self.c.get(uri='a')) - - def test_get_by_uri_raises_error_if_multiple_matches(self): - track = Track(uri='a') - self.c.playlist = Playlist(tracks=[Track(uri='z'), track, track]) - try: - self.c.get(uri='a') - self.fail(u'Should raise LookupError if multiple matches') - except LookupError as e: - self.assertEqual(u'"uri=a" match multiple tracks', e[0]) - - def test_get_by_uri_raises_error_if_no_match(self): - self.c.playlist = Playlist(tracks=[Track(uri='z'), Track(uri='y')]) - try: - self.c.get(uri='a') - self.fail(u'Should raise LookupError if no match') - except LookupError as e: - self.assertEqual(u'"uri=a" match no tracks', e[0]) - - def test_get_by_multiple_criteria_returns_elements_matching_all(self): - track1 = Track(id=1, uri='a') - track2 = Track(id=1, uri='b') - track3 = Track(id=2, uri='b') - self.c.playlist = Playlist(tracks=[track1, track2, track3]) - self.assertEqual(track1, self.c.get(id=1, uri='a')) - self.assertEqual(track2, self.c.get(id=1, uri='b')) - self.assertEqual(track3, self.c.get(id=2, uri='b')) - - def test_get_by_criteria_that_is_not_present_in_all_elements(self): - track1 = Track(id=1) - track2 = Track(uri='b') - track3 = Track(id=2) - self.c.playlist = Playlist(tracks=[track1, track2, track3]) - self.assertEqual(track1, self.c.get(id=1)) - - -class StoredPlaylistsGetTest(unittest.TestCase): - def setUp(self): - self.b = DummyBackend(mixer=DummyMixer()) - self.s = self.b.stored_playlists - - def test_get_by_name_returns_unique_match(self): - playlist = Playlist(name='b') - self.s.playlists = [Playlist(name='a'), playlist] - self.assertEqual(playlist, self.s.get(name='b')) - - def test_get_by_name_returns_first_of_multiple_matches(self): - playlist = Playlist(name='b') - self.s.playlists = [playlist, Playlist(name='a'), Playlist(name='b')] - try: - self.s.get(name='b') - self.fail(u'Should raise LookupError if multiple matches') - except LookupError as e: - self.assertEqual(u'"name=b" match multiple playlists', e[0]) - - def test_get_by_id_raises_keyerror_if_no_match(self): - self.s.playlists = [Playlist(name='a'), Playlist(name='b')] - try: - self.s.get(name='c') - self.fail(u'Should raise LookupError if no match') - except LookupError as e: - self.assertEqual(u'"name=c" match no playlists', e[0])