def test_issue133(self): scanner = Scanner() scanner.queue_folder("folder") scanner.run() track = Track.select().first() self.assertNotIn("\x00", track.title)
def test_get_song(self): self._make_request('getSong', error = 10) self._make_request('getSong', { 'id': 'nastynasty' }, error = 0) self._make_request('getSong', { 'id': str(uuid.uuid4()) }, error = 70) with db_session: s = Track.select().first() self._make_request('getSong', { 'id': str(s.id) }, tag = 'song')
def test_get_song(self): self._make_request("getSong", error=10) self._make_request("getSong", {"id": "nastynasty"}, error=0) self._make_request("getSong", {"id": str(uuid.uuid4())}, error=70) with db_session: s = Track.select().first() self._make_request("getSong", {"id": str(s.id)}, tag="song")
def test_get_song(self): self._make_request('getSong', error=10) self._make_request('getSong', {'id': 'nastynasty'}, error=0) self._make_request('getSong', {'id': str(uuid.uuid4())}, error=70) with db_session: s = Track.select().first() self._make_request('getSong', {'id': str(s.id)}, tag='song')
def test_add_multiple(self): self._addfile() self._addfile() self._addfile() self.assertTrackCountEqual(0) self._sleep() with db_session: self.assertEqual(Track.select().count(), 3) self.assertEqual(Artist.select().count(), 1)
def setUp(self): super().setUp() with db_session: FolderManager.add("folder", os.path.abspath("tests/assets/folder")) scanner = Scanner() scanner.queue_folder("folder") scanner.run() self.trackid = Track.select().first().id self.userid = User.get(name="alice").id
def test_rename(self): path = self._addfile() self._sleep() trackid = None with db_session: self.assertEqual(Track.select().count(), 1) trackid = Track.select().first().id newpath = self._temppath(".mp3") shutil.move(path, newpath) self._sleep() with db_session: track = Track.select().first() self.assertIsNotNone(track) self.assertNotEqual(track.path, path) self.assertEqual(track.path, newpath) self.assertEqual( track._path_hash, memoryview(sha1(newpath.encode("utf-8")).digest())) self.assertEqual(track.id, trackid)
def test_update_playlist(self): self._make_request('updatePlaylist', error = 10) self._make_request('updatePlaylist', { 'playlistId': 1234 }, error = 0) self._make_request('updatePlaylist', { 'playlistId': str(uuid.uuid4()) }, error = 70) with db_session: playlist = Playlist.select(lambda p: p.user.name == 'alice').order_by(Playlist.created).first() pid = str(playlist.id) self._make_request('updatePlaylist', { 'playlistId': pid, 'songIdToAdd': 'string' }, error = 0) self._make_request('updatePlaylist', { 'playlistId': pid, 'songIndexToRemove': 'string' }, error = 0) name = str(playlist.name) self._make_request('updatePlaylist', { 'u': 'bob', 'p': 'B0b', 'playlistId': pid, 'name': 'new name' }, error = 50) rv, child = self._make_request('getPlaylist', { 'id': pid }, tag = 'playlist') self.assertEqual(child.get('name'), name) self.assertEqual(self._xpath(child, 'count(./entry)'), 2) self._make_request('updatePlaylist', { 'playlistId': pid, 'name': 'new name' }, skip_post = True) rv, child = self._make_request('getPlaylist', { 'id': pid }, tag = 'playlist') self.assertEqual(child.get('name'), 'new name') self.assertEqual(self._xpath(child, 'count(./entry)'), 2) self._make_request('updatePlaylist', { 'playlistId': pid, 'songIndexToRemove': [ -1, 2 ] }, skip_post = True) rv, child = self._make_request('getPlaylist', { 'id': pid }, tag = 'playlist') self.assertEqual(self._xpath(child, 'count(./entry)'), 2) self._make_request('updatePlaylist', { 'playlistId': pid, 'songIndexToRemove': [ 0, 2 ] }, skip_post = True) rv, child = self._make_request('getPlaylist', { 'id': pid }, tag = 'playlist') self.assertEqual(self._xpath(child, 'count(./entry)'), 1) self.assertEqual(self._find(child, './entry').get('title'), 'Three') with db_session: songs = { s.title: str(s.id) for s in Track.select() } self._make_request('updatePlaylist', { 'playlistId': pid, 'songIdToAdd': [ songs['One'], songs['Two'], songs['Two'] ] }, skip_post = True) rv, child = self._make_request('getPlaylist', { 'id': pid }, tag = 'playlist') self.assertSequenceEqual(self._xpath(child, './entry/@title'), [ 'Three', 'One', 'Two', 'Two' ]) self._make_request('updatePlaylist', { 'playlistId': pid, 'songIndexToRemove': [ 2, 1 ] }, skip_post = True) rv, child = self._make_request('getPlaylist', { 'id': pid }, tag = 'playlist') self.assertSequenceEqual(self._xpath(child, './entry/@title'), [ 'Three', 'Two' ]) self._make_request('updatePlaylist', { 'playlistId': pid, 'songIdToAdd': songs['One'] }, skip_post = True) self._make_request('updatePlaylist', { 'playlistId': pid, 'songIndexToRemove': [ 1, 1 ] }, skip_post = True) rv, child = self._make_request('getPlaylist', { 'id': pid }, tag = 'playlist') self.assertSequenceEqual(self._xpath(child, './entry/@title'), [ 'Three', 'One' ]) self._make_request('updatePlaylist', { 'playlistId': pid, 'songIdToAdd': str(uuid.uuid4()) }, error = 70) rv, child = self._make_request('getPlaylist', { 'id': pid }, tag = 'playlist') self.assertEqual(self._xpath(child, 'count(./entry)'), 2)
def test_create_playlist(self): self._make_request('createPlaylist', error = 10) self._make_request('createPlaylist', { 'name': 'wrongId', 'songId': 'abc' }, error = 0) self._make_request('createPlaylist', { 'name': 'unknownId', 'songId': str(uuid.uuid4()) }, error = 70) self._make_request('createPlaylist', { 'playlistId': 'abc' }, error = 0) self._make_request('createPlaylist', { 'playlistId': str(uuid.uuid4()) }, error = 70) # create self._make_request('createPlaylist', { 'name': 'new playlist' }, skip_post = True) rv, child = self._make_request('getPlaylists', tag = 'playlists') self.assertEqual(len(child), 3) playlist = self._find(child, "./playlist[@name='new playlist']") self.assertEqual(len(playlist), 0) # "update" newly created self._make_request('createPlaylist', { 'playlistId': playlist.get('id') }) rv, child = self._make_request('getPlaylists', tag = 'playlists') self.assertEqual(len(child), 3) # renaming self._make_request('createPlaylist', { 'playlistId': playlist.get('id'), 'name': 'renamed' }) rv, child = self._make_request('getPlaylists', tag = 'playlists') self.assertEqual(len(child), 3) self.assertIsNone(self._find(child, "./playlist[@name='new playlist']")) playlist = self._find(child, "./playlist[@name='renamed']") self.assertIsNotNone(playlist) # update from other user self._make_request('createPlaylist', { 'u': 'bob', 'p': 'B0b', 'playlistId': playlist.get('id') }, error = 50) # create more useful playlist with db_session: songs = { s.title: str(s.id) for s in Track.select() } self._make_request('createPlaylist', { 'name': 'songs', 'songId': list(map(lambda s: songs[s], [ 'Three', 'One', 'Two' ])) }, skip_post = True) with db_session: playlist = Playlist.get(name = 'songs') self.assertIsNotNone(playlist) rv, child = self._make_request('getPlaylist', { 'id': str(playlist.id) }, tag = 'playlist') self.assertEqual(child.get('songCount'), '3') self.assertEqual(self._xpath(child, 'count(./entry)'), 3) self.assertEqual(child[0].get('title'), 'Three') self.assertEqual(child[1].get('title'), 'One') self.assertEqual(child[2].get('title'), 'Two') # update self._make_request('createPlaylist', { 'playlistId': str(playlist.id), 'songId': songs['Two'] }, skip_post = True) rv, child = self._make_request('getPlaylist', { 'id': str(playlist.id) }, tag = 'playlist') self.assertEqual(child.get('songCount'), '1') self.assertEqual(self._xpath(child, 'count(./entry)'), 1) self.assertEqual(child[0].get('title'), 'Two')
def test_change(self): path = self._addfile() self._sleep() trackid = None with db_session: self.assertEqual(Track.select().count(), 1) self.assertEqual( Artist.select(lambda a: a.name == "Some artist").count(), 1) trackid = Track.select().first().id tags = mutagen.File(path, easy=True) tags["artist"] = "Renamed" tags.save() self._sleep() with db_session: self.assertEqual(Track.select().count(), 1) self.assertEqual( Artist.select(lambda a: a.name == "Some artist").count(), 0) self.assertEqual( Artist.select(lambda a: a.name == "Renamed").count(), 1) self.assertEqual(Track.select().first().id, trackid)
def setUp(self): super().setUp() with db_session: Folder(root=True, name="Empty root", path="/tmp") root = Folder(root=True, name="Root folder", path="tests/assets") for letter in "ABC": folder = Folder( name=letter + "rtist", path="tests/assets/{}rtist".format(letter), parent=root, ) artist = Artist(name=letter + "rtist") for lether in "AB": afolder = Folder( name=letter + lether + "lbum", path="tests/assets/{0}rtist/{0}{1}lbum".format( letter, lether), parent=folder, ) album = Album(name=letter + lether + "lbum", artist=artist) for num, song in enumerate(["One", "Two", "Three"]): Track( disc=1, number=num, title=song, duration=2, album=album, artist=artist, genre="Music!", bitrate=320, path="tests/assets/{0}rtist/{0}{1}lbum/{2}".format( letter, lether, song), last_modification=0, root_folder=root, folder=afolder, ) self.assertEqual(Folder.select().count(), 11) self.assertEqual(Folder.select(lambda f: f.root).count(), 2) self.assertEqual(Artist.select().count(), 3) self.assertEqual(Album.select().count(), 6) self.assertEqual(Track.select().count(), 18)
def setUp(self): super(BrowseTestCase, self).setUp() with db_session: Folder(root = True, name = 'Empty root', path = '/tmp') root = Folder(root = True, name = 'Root folder', path = 'tests/assets') for letter in 'ABC': folder = Folder( name = letter + 'rtist', path = 'tests/assets/{}rtist'.format(letter), parent = root ) artist = Artist(name = letter + 'rtist') for lether in 'AB': afolder = Folder( name = letter + lether + 'lbum', path = 'tests/assets/{0}rtist/{0}{1}lbum'.format(letter, lether), parent = folder ) album = Album(name = letter + lether + 'lbum', artist = artist) for num, song in enumerate([ 'One', 'Two', 'Three' ]): track = Track( disc = 1, number = num, title = song, duration = 2, album = album, artist = artist, bitrate = 320, path = 'tests/assets/{0}rtist/{0}{1}lbum/{2}'.format(letter, lether, song), content_type = 'audio/mpeg', last_modification = 0, root_folder = root, folder = afolder ) self.assertEqual(Folder.select().count(), 11) self.assertEqual(Folder.select(lambda f: f.root).count(), 2) self.assertEqual(Artist.select().count(), 3) self.assertEqual(Album.select().count(), 6) self.assertEqual(Track.select().count(), 18)
def setUp(self): super(BrowseTestCase, self).setUp() with db_session: Folder(root = True, name = 'Empty root', path = '/tmp') root = Folder(root = True, name = 'Root folder', path = 'tests/assets') for letter in 'ABC': folder = Folder( name = letter + 'rtist', path = 'tests/assets/{}rtist'.format(letter), parent = root ) artist = Artist(name = letter + 'rtist') for lether in 'AB': afolder = Folder( name = letter + lether + 'lbum', path = 'tests/assets/{0}rtist/{0}{1}lbum'.format(letter, lether), parent = folder ) album = Album(name = letter + lether + 'lbum', artist = artist) for num, song in enumerate([ 'One', 'Two', 'Three' ]): track = Track( disc = 1, number = num, title = song, duration = 2, album = album, artist = artist, bitrate = 320, path = 'tests/assets/{0}rtist/{0}{1}lbum/{2}'.format(letter, lether, song), last_modification = 0, root_folder = root, folder = afolder ) self.assertEqual(Folder.select().count(), 11) self.assertEqual(Folder.select(lambda f: f.root).count(), 2) self.assertEqual(Artist.select().count(), 3) self.assertEqual(Album.select().count(), 6) self.assertEqual(Track.select().count(), 18)
def test_update_playlist(self): self._make_request("updatePlaylist", error=10) self._make_request("updatePlaylist", {"playlistId": 1234}, error=0) self._make_request("updatePlaylist", {"playlistId": str(uuid.uuid4())}, error=70) with db_session: playlist = ( Playlist.select(lambda p: p.user.name == "alice").order_by( Playlist.created).first()) pid = str(playlist.id) self._make_request("updatePlaylist", { "playlistId": pid, "songIdToAdd": "string" }, error=0) self._make_request( "updatePlaylist", { "playlistId": pid, "songIndexToRemove": "string" }, error=0, ) name = str(playlist.name) self._make_request( "updatePlaylist", { "u": "bob", "p": "B0b", "playlistId": pid, "name": "new name" }, error=50, ) rv, child = self._make_request("getPlaylist", {"id": pid}, tag="playlist") self.assertEqual(child.get("name"), name) self.assertEqual(self._xpath(child, "count(./entry)"), 2) self._make_request("updatePlaylist", { "playlistId": pid, "name": "new name" }, skip_post=True) rv, child = self._make_request("getPlaylist", {"id": pid}, tag="playlist") self.assertEqual(child.get("name"), "new name") self.assertEqual(self._xpath(child, "count(./entry)"), 2) self._make_request( "updatePlaylist", { "playlistId": pid, "songIndexToRemove": [-1, 2] }, skip_post=True, ) rv, child = self._make_request("getPlaylist", {"id": pid}, tag="playlist") self.assertEqual(self._xpath(child, "count(./entry)"), 2) self._make_request( "updatePlaylist", { "playlistId": pid, "songIndexToRemove": [0, 2] }, skip_post=True, ) rv, child = self._make_request("getPlaylist", {"id": pid}, tag="playlist") self.assertEqual(self._xpath(child, "count(./entry)"), 1) self.assertEqual(self._find(child, "./entry").get("title"), "Three") with db_session: songs = {s.title: str(s.id) for s in Track.select()} self._make_request( "updatePlaylist", { "playlistId": pid, "songIdToAdd": [songs["One"], songs["Two"], songs["Two"]], }, skip_post=True, ) rv, child = self._make_request("getPlaylist", {"id": pid}, tag="playlist") self.assertSequenceEqual(self._xpath(child, "./entry/@title"), ["Three", "One", "Two", "Two"]) self._make_request( "updatePlaylist", { "playlistId": pid, "songIndexToRemove": [2, 1] }, skip_post=True, ) rv, child = self._make_request("getPlaylist", {"id": pid}, tag="playlist") self.assertSequenceEqual(self._xpath(child, "./entry/@title"), ["Three", "Two"]) self._make_request( "updatePlaylist", { "playlistId": pid, "songIdToAdd": songs["One"] }, skip_post=True, ) self._make_request( "updatePlaylist", { "playlistId": pid, "songIndexToRemove": [1, 1] }, skip_post=True, ) rv, child = self._make_request("getPlaylist", {"id": pid}, tag="playlist") self.assertSequenceEqual(self._xpath(child, "./entry/@title"), ["Three", "One"]) self._make_request( "updatePlaylist", { "playlistId": pid, "songIdToAdd": str(uuid.uuid4()) }, error=70, ) rv, child = self._make_request("getPlaylist", {"id": pid}, tag="playlist") self.assertEqual(self._xpath(child, "count(./entry)"), 2)
def test_create_playlist(self): self._make_request("createPlaylist", error=10) self._make_request("createPlaylist", { "name": "wrongId", "songId": "abc" }, error=0) self._make_request( "createPlaylist", { "name": "unknownId", "songId": str(uuid.uuid4()) }, error=70, ) self._make_request("createPlaylist", {"playlistId": "abc"}, error=0) self._make_request("createPlaylist", {"playlistId": str(uuid.uuid4())}, error=70) # create self._make_request("createPlaylist", {"name": "new playlist"}, skip_post=True) rv, child = self._make_request("getPlaylists", tag="playlists") self.assertEqual(len(child), 3) playlist = self._find(child, "./playlist[@name='new playlist']") self.assertEqual(len(playlist), 0) # "update" newly created self._make_request("createPlaylist", {"playlistId": playlist.get("id")}) rv, child = self._make_request("getPlaylists", tag="playlists") self.assertEqual(len(child), 3) # renaming self._make_request("createPlaylist", { "playlistId": playlist.get("id"), "name": "renamed" }) rv, child = self._make_request("getPlaylists", tag="playlists") self.assertEqual(len(child), 3) self.assertIsNone(self._find(child, "./playlist[@name='new playlist']")) playlist = self._find(child, "./playlist[@name='renamed']") self.assertIsNotNone(playlist) # update from other user self._make_request( "createPlaylist", { "u": "bob", "p": "B0b", "playlistId": playlist.get("id") }, error=50, ) # create more useful playlist with db_session: songs = {s.title: str(s.id) for s in Track.select()} self._make_request( "createPlaylist", { "name": "songs", "songId": list(map(lambda s: songs[s], ["Three", "One", "Two"])), }, skip_post=True, ) with db_session: playlist = Playlist.get(name="songs") self.assertIsNotNone(playlist) rv, child = self._make_request("getPlaylist", {"id": str(playlist.id)}, tag="playlist") self.assertEqual(child.get("songCount"), "3") self.assertEqual(self._xpath(child, "count(./entry)"), 3) self.assertEqual(child[0].get("title"), "Three") self.assertEqual(child[1].get("title"), "One") self.assertEqual(child[2].get("title"), "Two") # update self._make_request( "createPlaylist", { "playlistId": str(playlist.id), "songId": songs["Two"] }, skip_post=True, ) rv, child = self._make_request("getPlaylist", {"id": str(playlist.id)}, tag="playlist") self.assertEqual(child.get("songCount"), "1") self.assertEqual(self._xpath(child, "count(./entry)"), 1) self.assertEqual(child[0].get("title"), "Two")
def test_get_album_list2(self): self._make_request("getAlbumList2", error=10) self._make_request("getAlbumList2", {"type": "void"}, error=0) self._make_request("getAlbumList2", { "type": "random", "size": "size_t" }, error=0) self._make_request("getAlbumList2", { "type": "newest", "offset": "&v + 2" }, error=0) self._make_request("getAlbumList2", {"type": "byYear"}, error=10) self._make_request( "getAlbumList2", { "type": "byYear", "fromYear": "Epoch", "toYear": "EOL" }, error=0, ) self._make_request("getAlbumList2", {"type": "byGenre"}, error=10) types = [ "random", "newest", "frequent", "recent", "starred", "alphabeticalByName", "alphabeticalByArtist", ] for t in types: self._make_request("getAlbumList2", {"type": t}, tag="albumList2", skip_post=t == "random") self._make_request("getAlbumList2", {"type": "random"}, tag="albumList2", skip_post=True) rv, child = self._make_request( "getAlbumList2", { "type": "byYear", "fromYear": 100, "toYear": 200 }, tag="albumList2", ) self.assertEqual(len(child), 1) rv, child = self._make_request( "getAlbumList2", { "type": "byYear", "fromYear": 200, "toYear": 300 }, tag="albumList2", ) self.assertEqual(len(child), 0) # Need more data to properly test ordering rv, child = self._make_request( "getAlbumList2", { "type": "byYear", "fromYear": 200, "toYear": 100 }, tag="albumList2", ) self.assertEqual(len(child), 1) rv, child = self._make_request("getAlbumList2", { "type": "byGenre", "genre": "FARTS" }, tag="albumList2") self.assertEqual(len(child), 0) rv, child = self._make_request("getAlbumList2", { "type": "byGenre", "genre": "Lampshade" }, tag="albumList2") self.assertEqual(len(child), 1) with db_session: Track.select().delete() Album.get().delete() rv, child = self._make_request("getAlbumList2", {"type": "random"}, tag="albumList2") self.assertEqual(len(child), 0)
def assertTrackCountEqual(self, expected): self.assertEqual(Track.select().count(), expected)