Пример #1
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)
Пример #2
0
    def test_get_music_directory(self):
        self._make_request("getMusicDirectory", error=10)
        self._make_request("getMusicDirectory", {"id": "id"}, error=0)
        self._make_request("getMusicDirectory", {"id": 1234567890}, error=70)

        # should test with folders with both children folders and tracks. this code would break in that case
        with db_session:
            for f in Folder.select():
                rv, child = self._make_request("getMusicDirectory",
                                               {"id": str(f.id)},
                                               tag="directory")
                self.assertEqual(child.get("id"), str(f.id))
                self.assertEqual(child.get("name"), f.name)
                self.assertEqual(len(child),
                                 f.children.count() + f.tracks.count())
                for dbc, xmlc in zip(
                        sorted(f.children, key=lambda c: c.name),
                        sorted(child, key=lambda c: c.get("title")),
                ):
                    self.assertEqual(dbc.name, xmlc.get("title"))
                    self.assertEqual(xmlc.get("artist"), f.name)
                    self.assertEqual(xmlc.get("parent"), str(f.id))
                for t, xmlc in zip(
                        sorted(f.tracks, key=lambda t: t.title),
                        sorted(child, key=lambda c: c.get("title")),
                ):
                    self.assertEqual(t.title, xmlc.get("title"))
                    self.assertEqual(xmlc.get("parent"), str(f.id))
Пример #3
0
 def test_add_post(self):
     self._login("alice", "Alic3")
     rv = self.client.post("/folder/add")
     self.assertIn("required", rv.data)
     rv = self.client.post("/folder/add", data={"name": "name"})
     self.assertIn("required", rv.data)
     rv = self.client.post("/folder/add", data={"path": "path"})
     self.assertIn("required", rv.data)
     rv = self.client.post("/folder/add",
                           data={
                               "name": "name",
                               "path": "path"
                           })
     self.assertIn("Add Folder", rv.data)
     rv = self.client.post(
         "/folder/add",
         data={
             "name": "name",
             "path": "tests/assets"
         },
         follow_redirects=True,
     )
     self.assertIn("created", rv.data)
     with db_session:
         self.assertEqual(Folder.select().count(), 1)
Пример #4
0
    def test_get_music_directory(self):
        self._make_request('getMusicDirectory', error=10)
        self._make_request('getMusicDirectory', {'id': 'id'}, error=0)
        self._make_request('getMusicDirectory', {'id': str(uuid.uuid4())},
                           error=70)

        # should test with folders with both children folders and tracks. this code would break in that case
        with db_session:
            for f in Folder.select():
                rv, child = self._make_request('getMusicDirectory',
                                               {'id': str(f.id)},
                                               tag='directory')
                self.assertEqual(child.get('id'), str(f.id))
                self.assertEqual(child.get('name'), f.name)
                self.assertEqual(len(child),
                                 f.children.count() + f.tracks.count())
                for dbc, xmlc in zip(
                        sorted(f.children, key=lambda c: c.name),
                        sorted(child, key=lambda c: c.get('title'))):
                    self.assertEqual(dbc.name, xmlc.get('title'))
                    self.assertEqual(xmlc.get('artist'), f.name)
                    self.assertEqual(xmlc.get('parent'), str(f.id))
                for t, xmlc in zip(sorted(f.tracks, key=lambda t: t.title),
                                   sorted(child,
                                          key=lambda c: c.get('title'))):
                    self.assertEqual(t.title, xmlc.get('title'))
                    self.assertEqual(xmlc.get('parent'), str(f.id))
Пример #5
0
    def test_add_cover_then_file(self):
        path = self._addcover()
        self._addfile()
        self._sleep()

        with db_session:
            self.assertEqual(Folder.select().first().cover_art, os.path.basename(path))
Пример #6
0
    def test_folder_delete(self):
        with self._tempdir() as d:
            self.__cli.onecmd("folder add tmpfolder " + d)
        self.__cli.onecmd("folder delete randomfolder")
        self.__cli.onecmd("folder delete tmpfolder")

        with db_session:
            self.assertEqual(Folder.select().count(), 0)
Пример #7
0
    def test_folder_add(self):
        with tempfile.TemporaryDirectory() as d:
            self.__add_folder("tmpfolder", d)

        with db_session:
            f = Folder.select().first()
            self.assertIsNotNone(f)
            self.assertEqual(f.path, d)
Пример #8
0
    def test_naming_add_bad(self):
        good = os.path.basename(self._addcover("cover"))
        self._sleep()
        self._addcover()
        self._sleep()

        with db_session:
            self.assertEqual(Folder.select().first().cover_art, good)
Пример #9
0
    def test_folder_delete(self):
        with tempfile.TemporaryDirectory() as d:
            self.__add_folder("tmpfolder", d)
        self.__invoke("folder delete randomfolder", True)
        self.__invoke("folder delete tmpfolder")

        with db_session:
            self.assertEqual(Folder.select().count(), 0)
Пример #10
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)
Пример #11
0
    def test_folder_add(self):
        with self._tempdir() as d:
            self.__cli.onecmd("folder add tmpfolder " + d)

        with db_session:
            f = Folder.select().first()
            self.assertIsNotNone(f)
            self.assertEqual(f.path, d)
Пример #12
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)
Пример #13
0
    def test_naming_remove_bad(self):
        bad = self._addcover()
        good = self._addcover("cover")
        self._sleep()
        os.unlink(bad)
        self._sleep()

        with db_session:
            self.assertEqual(Folder.select().first().cover_art, os.path.basename(good))
Пример #14
0
    def test_folder_add_errors(self):
        with tempfile.TemporaryDirectory() as d:
            self.__add_folder("f1", d)
            self.__add_folder("f2", d, True)
        with tempfile.TemporaryDirectory() as d:
            self.__add_folder("f1", d, True)
        self.__invoke("folder add f3 /invalid/path", True)

        with db_session:
            self.assertEqual(Folder.select().count(), 1)
Пример #15
0
    def test_rename(self):
        path = self._addcover()
        self._sleep()
        newpath = self._temppath(".jpg")
        shutil.move(path, newpath)
        self._sleep()

        with db_session:
            self.assertEqual(Folder.select().first().cover_art,
                             os.path.basename(newpath))
Пример #16
0
    def test_remove_cover(self):
        self._addfile()
        path = self._addcover()
        self._sleep()

        os.unlink(path)
        self._sleep()

        with db_session:
            self.assertIsNone(Folder.select().first().cover_art)
Пример #17
0
    def test_folder_add_errors(self):
        with self._tempdir() as d:
            self.__cli.onecmd("folder add f1 " + d)
            self.__cli.onecmd("folder add f2 " + d)
        with self._tempdir() as d:
            self.__cli.onecmd("folder add f1 " + d)
        self.__cli.onecmd("folder add f3 /invalid/path")

        with db_session:
            self.assertEqual(Folder.select().count(), 1)
Пример #18
0
    def test_delete(self):
        with db_session:
            folder = Folder(name="folder", path="tests/assets", root=True)

        self._login("bob", "B0b")
        rv = self.client.get("/folder/del/" + str(folder.id),
                             follow_redirects=True)
        self.assertIn("There's nothing much to see", rv.data)
        with db_session:
            self.assertEqual(Folder.select().count(), 1)
        self._logout()

        self._login("alice", "Alic3")
        rv = self.client.get("/folder/del/string", follow_redirects=True)
        self.assertIn("Invalid folder id", rv.data)
        rv = self.client.get("/folder/del/1234567890", follow_redirects=True)
        self.assertIn("No such folder", rv.data)
        rv = self.client.get("/folder/del/" + str(folder.id),
                             follow_redirects=True)
        self.assertIn("Music folders", rv.data)
        with db_session:
            self.assertEqual(Folder.select().count(), 0)
Пример #19
0
    def test_get_music_directory(self):
        self._make_request('getMusicDirectory', error = 10)
        self._make_request('getMusicDirectory', { 'id': 'id' }, error = 0)
        self._make_request('getMusicDirectory', { 'id': str(uuid.uuid4()) }, error = 70)

        # should test with folders with both children folders and tracks. this code would break in that case
        with db_session:
            for f in Folder.select():
                rv, child = self._make_request('getMusicDirectory', { 'id': str(f.id) }, tag = 'directory')
                self.assertEqual(child.get('id'), str(f.id))
                self.assertEqual(child.get('name'), f.name)
                self.assertEqual(len(child), f.children.count() + f.tracks.count())
                for dbc, xmlc in zip(sorted(f.children, key = lambda c: c.name), sorted(child, key = lambda c: c.get('title'))):
                    self.assertEqual(dbc.name, xmlc.get('title'))
                    self.assertEqual(xmlc.get('artist'), f.name)
                    self.assertEqual(xmlc.get('parent'), str(f.id))
                for t, xmlc in zip(sorted(f.tracks, key = lambda t: t.title), sorted(child, key = lambda c: c.get('title'))):
                    self.assertEqual(t.title, xmlc.get('title'))
                    self.assertEqual(xmlc.get('parent'), str(f.id))