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 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))
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)
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))
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))
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)
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)
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)
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)
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 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)
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_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))
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)
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))
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)
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)
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)
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))