diff --git a/mopidy/mpd/protocol/stored_playlists.py b/mopidy/mpd/protocol/stored_playlists.py index fd395696..affd1126 100644 --- a/mopidy/mpd/protocol/stored_playlists.py +++ b/mopidy/mpd/protocol/stored_playlists.py @@ -254,9 +254,12 @@ def playlistdelete(context, name, songpos): if not playlist: raise exceptions.MpdNoExistError('No such playlist') - # Convert tracks to list and remove requested - tracks = list(playlist.tracks) - tracks.pop(songpos) + try: + # Convert tracks to list and remove requested + tracks = list(playlist.tracks) + tracks.pop(songpos) + except IndexError: + raise exceptions.MpdArgError('Bad song index') # Replace tracks and save playlist playlist = playlist.replace(tracks=tracks) diff --git a/tests/mpd/protocol/test_stored_playlists.py b/tests/mpd/protocol/test_stored_playlists.py index e33b1bc2..6b568667 100644 --- a/tests/mpd/protocol/test_stored_playlists.py +++ b/tests/mpd/protocol/test_stored_playlists.py @@ -314,6 +314,15 @@ class PlaylistsHandlerTest(protocol.BaseTestCase): 'invalid: playlist names may not contain ' 'slashes, newlines or carriage returns') + def test_playlistdelete_unknown_playlist_acks(self): + self.send_request('playlistdelete "foobar" "0"') + self.assertInResponse('ACK [50@0] {playlistdelete} No such playlist') + + def test_playlistdelete_unknown_index_acks(self): + self.send_request('save "foobar"') + self.send_request('playlistdelete "foobar" "0"') + self.assertInResponse('ACK [2@0] {playlistdelete} Bad song index') + def test_playlistmove(self): tracks = [ Track(uri='dummy:a'),