def test_listplaylistinfo_without_quotes(self): self.backend.playlists.set_dummy_playlists([ Playlist(name='name', uri='dummy:name', tracks=[Track(uri='dummy:a')]) ]) self.send_request('listplaylistinfo name') self.assertInResponse('file: dummy:a') self.assertInResponse('Track: 0') self.assertNotInResponse('Pos: 0') self.assertInResponse('OK')
def test_with_new_last_modified(self): tracks = [Track()] last_modified = datetime.datetime.utcnow() new_last_modified = last_modified + datetime.timedelta(1) playlist = Playlist( uri='an uri', name='a name', tracks=tracks, last_modified=last_modified) new_playlist = playlist.copy(last_modified=new_last_modified) self.assertEqual(new_playlist.uri, 'an uri') self.assertEqual(new_playlist.name, 'a name') self.assertEqual(list(new_playlist.tracks), tracks) self.assertEqual(new_playlist.last_modified, new_last_modified)
def test_with_new_tracks(self): tracks = [Track()] last_modified = 1390942873000 playlist = Playlist( uri='an uri', name='a name', tracks=tracks, last_modified=last_modified) new_tracks = [Track(), Track()] new_playlist = playlist.replace(tracks=new_tracks) self.assertEqual(new_playlist.uri, 'an uri') self.assertEqual(new_playlist.name, 'a name') self.assertEqual(list(new_playlist.tracks), new_tracks) self.assertEqual(new_playlist.last_modified, last_modified)
def test_playlist_contents_get_written_to_disk(self): track = Track(uri=generate_song(1)) uri = track.uri[len('file://'):] playlist = Playlist(tracks=[track], name='test') path = os.path.join(settings.LOCAL_PLAYLIST_PATH, 'test.m3u') self.stored.save(playlist) with open(path) as playlist_file: contents = playlist_file.read() self.assertEqual(uri, contents.strip())
def test_create_without_uri_scheme_ignores_exception(self): playlist = Playlist() self.sp1.create().get.side_effect = Exception self.sp1.reset_mock() self.sp2.create().get.return_value = playlist self.sp2.reset_mock() result = self.core.playlists.create('foo') self.assertEqual(playlist, result) self.sp1.create.assert_called_once_with('foo') self.sp2.create.assert_called_once_with('foo')
def test_playlists_are_loaded_at_startup(self): track = Track(uri=path_to_uri(path_to_data_dir('uri2'))) playlist = Playlist(tracks=[track], name='test') self.stored.save(playlist) self.backend = self.backend_class() self.stored = self.backend.stored_playlists self.assert_(self.stored.playlists) self.assertEqual('test', self.stored.playlists[0].name) self.assertEqual(track.uri, self.stored.playlists[0].tracks[0].uri)
def test_with_new_name(self): tracks = [Track()] last_modified = datetime.datetime.now() playlist = Playlist(uri='an uri', name='a name', tracks=tracks, last_modified=last_modified) new_playlist = playlist.copy(name='another name') self.assertEqual(new_playlist.uri, 'an uri') self.assertEqual(new_playlist.name, 'another name') self.assertEqual(list(new_playlist.tracks), tracks) self.assertEqual(new_playlist.last_modified, last_modified)
def test_listplaylistinfo(self): self.backend.playlists.playlists = [ Playlist(name='name', uri='dummy:name', tracks=[Track(uri='dummy:a')]) ] self.sendRequest('listplaylistinfo "name"') self.assertInResponse('file: dummy:a') self.assertInResponse('Track: 0') self.assertNotInResponse('Pos: 0') self.assertInResponse('OK')
def test_with_new_uri(self): tracks = [Track()] last_modified = 1390942873000 playlist = Playlist(uri='an uri', name='a name', tracks=tracks, last_modified=last_modified) new_playlist = playlist.copy(uri='another uri') self.assertEqual(new_playlist.uri, 'another uri') self.assertEqual(new_playlist.name, 'a name') self.assertEqual(list(new_playlist.tracks), tracks) self.assertEqual(new_playlist.last_modified, last_modified)
def test(self): self.backend.library.dummy_browse_result = { 'dummy:/': [Ref.playlist(name='Top 100 tracks', uri='dummy:/1')], } self.backend.playlists.set_dummy_playlists([ Playlist(name='Top 100 tracks', uri='dummy:/1', last_modified=123), ]) response1 = self.send_request('lsinfo "/"') self.send_request('lsinfo "/dummy"') response2 = self.send_request('lsinfo "/"') self.assertEqual(response1, response2)
def test_playlistadd(self): tracks = [ Track(uri="dummy:a"), Track(uri="dummy:b"), ] self.backend.library.dummy_library = tracks self.backend.playlists.set_dummy_playlists( [Playlist(name="name", uri="dummy:a1", tracks=[tracks[0]])]) self.send_request('playlistadd "name" "dummy:b"') self.assertInResponse("OK") assert 2 == len(self.backend.playlists.get_items("dummy:a1").get())
def test(self, last_modified_mock): last_modified_mock.return_value = "2015-08-05T22:51:06Z" self.backend.library.dummy_browse_result = { "dummy:/": [Ref.playlist(name="Top 100 tracks", uri="dummy:/1")], } self.backend.playlists.set_dummy_playlists( [Playlist(name="Top 100 tracks", uri="dummy:/1")]) response1 = self.send_request('lsinfo "/"') self.send_request('lsinfo "/dummy"') response2 = self.send_request('lsinfo "/"') assert response1 == response2
def test_lsinfo_for_root_returns_browse_result_before_playlists(self): self.backend.library.dummy_browse_result = { "dummy:/": [ Ref.track(uri="dummy:/a", name="a"), Ref.directory(uri="dummy:/foo", name="foo"), ] } self.backend.playlists.set_dummy_playlists( [Playlist(name="a", uri="dummy:/a")]) response = self.send_request('lsinfo "/"') assert response.index("directory: dummy") < response.index( "playlist: a")
def test_with_new_tracks(self): tracks = [Track()] last_modified = datetime.datetime.now() playlist = Playlist(uri=u'an uri', name=u'a name', tracks=tracks, last_modified=last_modified) new_tracks = [Track(), Track()] new_playlist = playlist.copy(tracks=new_tracks) self.assertEqual(new_playlist.uri, u'an uri') self.assertEqual(new_playlist.name, u'a name') self.assertEqual(list(new_playlist.tracks), new_tracks) self.assertEqual(new_playlist.last_modified, last_modified)
def test_playlistdelete(self): tracks = [ Track(uri="dummy:a"), Track(uri="dummy:b"), Track(uri="dummy:c"), ] # len() == 3 self.backend.playlists.set_dummy_playlists( [Playlist(name="namé", uri="dummy:a1", tracks=tracks)]) self.send_request('playlistdelete "namé" "2"') self.assertInResponse("OK") assert 2 == len(self.backend.playlists.get_items("dummy:a1").get())
def setUp(self): # noqa: N802 self.plr1a = Ref.playlist(name='A', uri='dummy1:pl:a') self.plr1b = Ref.playlist(name='B', uri='dummy1:pl:b') self.plr2a = Ref.playlist(name='A', uri='dummy2:pl:a') self.plr2b = Ref.playlist(name='B', uri='dummy2:pl:b') self.pl1a = Playlist(name='A', tracks=[Track(uri='dummy1:t:a')]) self.pl1b = Playlist(name='B', tracks=[Track(uri='dummy1:t:b')]) self.pl2a = Playlist(name='A', tracks=[Track(uri='dummy2:t:a')]) self.pl2b = Playlist(name='B', tracks=[Track(uri='dummy2:t:b')]) self.sp1 = mock.Mock(spec=backend.PlaylistsProvider) self.sp1.as_list.return_value.get.return_value = [ self.plr1a, self.plr1b] self.sp1.lookup.return_value.get.side_effect = [self.pl1a, self.pl1b] self.sp2 = mock.Mock(spec=backend.PlaylistsProvider) self.sp2.as_list.return_value.get.return_value = [ self.plr2a, self.plr2b] self.sp2.lookup.return_value.get.side_effect = [self.pl2a, self.pl2b] self.backend1 = mock.Mock() self.backend1.actor_ref.actor_class.__name__ = 'Backend1' self.backend1.uri_schemes.get.return_value = ['dummy1'] self.backend1.playlists = self.sp1 self.backend2 = mock.Mock() self.backend2.actor_ref.actor_class.__name__ = 'Backend2' self.backend2.uri_schemes.get.return_value = ['dummy2'] self.backend2.playlists = self.sp2 # A backend without the optional playlists provider self.backend3 = mock.Mock() self.backend3.uri_schemes.get.return_value = ['dummy3'] self.backend3.has_playlists().get.return_value = False self.backend3.playlists = None self.core = core.Core(mixer=None, backends=[ self.backend3, self.backend1, self.backend2])
def test_lsinfo_for_root_returns_browse_result_before_playlists(self): self.backend.library.dummy_browse_result = { 'dummy:/': [ Ref.track(uri='dummy:/a', name='a'), Ref.directory(uri='dummy:/foo', name='foo') ] } self.backend.playlists.set_dummy_playlists( [Playlist(name='a', uri='dummy:/a')]) response = self.send_request('lsinfo "/"') self.assertLess(response.index('directory: dummy'), response.index('playlist: a'))
def test_playlistdelete(self): tracks = [ Track(uri='dummy:a'), Track(uri='dummy:b'), Track(uri='dummy:c'), ] # len() == 3 self.backend.playlists.set_dummy_playlists( [Playlist(name='name', uri='dummy:a1', tracks=tracks)]) self.send_request('playlistdelete "name" "2"') self.assertInResponse('OK') self.assertEqual( 2, len(self.backend.playlists.get_items('dummy:a1').get()))
def test_playlistadd(self): tracks = [ Track(uri='dummy:a'), Track(uri='dummy:b'), ] self.backend.library.dummy_library = tracks self.backend.playlists.set_dummy_playlists( [Playlist(name='name', uri='dummy:a1', tracks=[tracks[0]])]) self.send_request('playlistadd "name" "dummy:b"') self.assertInResponse('OK') self.assertEqual( 2, len(self.backend.playlists.get_items('dummy:a1').get()))
def test_playlistmove_save_fails(self): tracks = [ Track(uri="dummy:a"), Track(uri="dummy:b"), Track(uri="dummy:c"), # this one is getting moved to top ] self.backend.playlists.set_dummy_playlists( [Playlist(name="name", uri="dummy:a1", tracks=tracks)]) self.backend.playlists.set_allow_save(False) self.send_request('playlistmove "name" "2" "0"') self.assertInResponse("ACK [0@0] {playlistmove} Backend with " 'scheme "dummy" failed to save playlist')
def get_user_playlists(self): results = self.api.getPlaylists().get('playlists') if results is u'': return [] else: results = makelist( unescapeobj( self.api.getPlaylists().get('playlists').get('playlist'))) return [ Playlist(uri=u'subsonic://%s' % playlist.get('id'), name='User Playlist: %s' % self.fix_playlist_name(playlist.get('name'))) for playlist in results ]
def test_playlistmove(self): tracks = [ Track(uri="dummy:a"), Track(uri="dummy:b"), Track(uri="dummy:c"), # this one is getting moved to top ] self.backend.playlists.set_dummy_playlists( [Playlist(name="namé", uri="dummy:a1", tracks=tracks)]) self.send_request('playlistmove "namé" "2" "0"') self.assertInResponse("OK") assert ("dummy:c" == self.backend.playlists.get_items( "dummy:a1").get()[0].uri)
def test_with_new_name(self): tracks = [Track()] last_modified = 1390942873000 playlist = Playlist( uri="an uri", name="a name", tracks=tracks, last_modified=last_modified, ) new_playlist = playlist.replace(name="another name") assert new_playlist.uri == "an uri" assert new_playlist.name == "another name" assert list(new_playlist.tracks) == tracks assert new_playlist.last_modified == last_modified
def test_playlistdelete_save_fails(self): tracks = [ Track(uri="dummy:a"), Track(uri="dummy:b"), Track(uri="dummy:c"), ] # len() == 3 self.backend.playlists.set_dummy_playlists( [Playlist(name="name", uri="dummy:a1", tracks=tracks)]) self.backend.playlists.set_allow_save(False) self.send_request('playlistdelete "name" "2"') self.assertInResponse("ACK [0@0] {playlistdelete} Backend with " 'scheme "dummy" failed to save playlist')
def test_listplaylistinfo_without_quotes(self): tracks = [ Track(uri="dummy:a"), ] self.backend.library.dummy_library = tracks self.backend.playlists.set_dummy_playlists( [Playlist(name="name", uri="dummy:name", tracks=tracks)]) self.send_request("listplaylistinfo name") self.assertInResponse("file: dummy:a") self.assertNotInResponse("Track: 0") self.assertNotInResponse("Pos: 0") self.assertInResponse("OK")
def test(self, last_modified_mock): last_modified_mock.return_value = '2015-08-05T22:51:06Z' self.backend.library.dummy_browse_result = { 'dummy:/': [Ref.playlist(name='Top 100 tracks', uri='dummy:/1')], } self.backend.playlists.set_dummy_playlists([ Playlist(name='Top 100 tracks', uri='dummy:/1'), ]) response1 = self.send_request('lsinfo "/"') self.send_request('lsinfo "/dummy"') response2 = self.send_request('lsinfo "/"') self.assertEqual(response1, response2)
def refresh(self): playl = [] playl.append( self.backend.session.get_playlist( 'ccba4c72-6aaf-43db-a46f-7f0cc579362d')) playl.append( self.backend.session.get_playlist( '0c84fe6a-4cf1-425a-9598-f09eb377738b')) playl.append( self.backend.session.get_playlist( '5d5b6916-3201-4293-ac8d-e204852c90f8')) #playl.append(self.backend.session.get_playlist('14cb2e61-bd41-4aab-a03a-33b2d9a65181')) #playl.append(self.backend.session.get_playlist('895a801a-eb62-4466-b811-6043c148fb98')) playlists = [] tracks = [] logger.info(u'Trying to load wimp playlists') # load user playlists #logger.debug(u'Playlists fetched: ') for playlist in self.backend.session.get_all_playlists(): #for playlist in playl: tracks = [] logger.debug(u'PlaylistId=%s' % playlist.id) for track in self.backend.session.get_playlist_tracks(playlist.id): if self.backend.library.lookup('wimpy:track:' + str(track.id)): tracks += self.backend.library.lookup('wimpy:track:' + str(track.id)) logger.debug(u'Track exists: %s' % track) else: logger.debug(u'Track does not exist, adding: %s' % track.name) self.backend.library._to_mopidy_track(track) tracks += self.backend.library.lookup('wimpy:track:' + str(track.id)) logger.debug(u'tracks=%s' % tracks) playlist = Playlist(uri='wimpy:playlist:' + playlist.id, name=playlist.name, tracks=tracks) #playlist = Playlist(uri='wimp:playlist:' + playlist.id) playlists.append(playlist) self.playlists = playlists backend.BackendListener.send('playlists_loaded') logger.info(u'Loaded %s playlist from wimp' % len(playlists)) self.playlists = playlists backend.BackendListener.send('playlists_loaded')
def refresh(self): playlists = {} encoding = sys.getfilesystemencoding() for path in glob.glob(os.path.join(self._playlists_dir, b'*.m3u*')): relpath = os.path.basename(path) uri = translator.path_to_playlist_uri(relpath) name = os.path.splitext(relpath)[0].decode(encoding, 'replace') tracks = translator.parse_m3u(path) playlists[uri] = Playlist(uri=uri, name=name, tracks=tracks) self._playlists = playlists logger.info('Loaded %d M3U playlists from %s', len(playlists), self._playlists_dir)
def test_playlistmove(self): tracks = [ Track(uri='dummy:a'), Track(uri='dummy:b'), Track(uri='dummy:c') # this one is getting moved to top ] self.backend.playlists.set_dummy_playlists( [Playlist(name='name', uri='dummy:a1', tracks=tracks)]) self.send_request('playlistmove "name" "2" "0"') self.assertInResponse('OK') self.assertEqual( "dummy:c", self.backend.playlists.get_items('dummy:a1').get()[0].uri)
def test_load_with_range_loads_part_of_playlist(self): self.core.tracklist.add([Track(uri='a'), Track(uri='b')]) self.assertEqual(len(self.core.tracklist.tracks.get()), 2) self.backend.playlists.playlists = [ Playlist(name='A-list', uri='dummy:A-list', tracks=[ Track(uri='c'), Track(uri='d'), Track(uri='e')])] self.sendRequest('load "A-list" "1:2"') tracks = self.core.tracklist.tracks.get() self.assertEqual(3, len(tracks)) self.assertEqual('a', tracks[0].uri) self.assertEqual('b', tracks[1].uri) self.assertEqual('d', tracks[2].uri) self.assertInResponse('OK')