Beispiel #1
0
    def test_issue133(self):
        scanner = Scanner()
        scanner.queue_folder("folder")
        scanner.run()

        track = Track.select().first()
        self.assertNotIn("\x00", track.title)
Beispiel #2
0
    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')
Beispiel #3
0
    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")
Beispiel #4
0
    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')
Beispiel #5
0
 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)
Beispiel #6
0
    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
Beispiel #7
0
    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)
Beispiel #8
0
    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)
Beispiel #9
0
    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')
Beispiel #10
0
    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)
Beispiel #11
0
    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)
Beispiel #12
0
    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')
Beispiel #13
0
    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)
Beispiel #14
0
    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)
Beispiel #15
0
    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)
Beispiel #16
0
    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)
Beispiel #17
0
    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")
Beispiel #18
0
    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)
Beispiel #19
0
 def assertTrackCountEqual(self, expected):
     self.assertEqual(Track.select().count(), expected)