emmental/scanner/test_task.py

224 lines
7.1 KiB
Python

# Copyright 2021 (c) Anna Schumaker.
import datetime
import db
import pathlib
import unittest
from gi.repository import GObject
from . import task
test_tracks = pathlib.Path("./data/Test Album")
test_track01 = test_tracks / "01 - Test Track.ogg"
class TestScannerTask(unittest.TestCase):
def test_task(self):
t = task.Task()
self.assertIsInstance(t, GObject.GObject)
with self.assertRaises(NotImplementedError):
t.run_task()
class TestScannerCommitTask(unittest.TestCase):
def test_task(self):
ct = task.CommitTask()
self.assertIsInstance(ct, task.Task)
self.assertEqual(ct.run_task(), None)
class TestScannerFileTask(unittest.TestCase):
def setUp(self):
db.reset()
def test_task(self):
lib = db.library.Table.find(test_tracks)
ft = task.FileTask(lib, test_track01)
self.assertIsInstance(ft, task.Task)
self.assertEqual(ft.library, lib)
self.assertEqual(ft.filepath, test_track01)
self.assertIsNone(ft.run_task())
self.assertIsNone(ft.run_task())
artist = db.artist.Table.lookup("Test Artist")
self.assertIsNotNone(artist)
album = db.album.Table.lookup(artist, "Test Album",
datetime.date(2019, 2, 1))
self.assertIsNotNone(album)
self.assertIsNotNone(db.disc.Table.lookup(album, 1))
decade = db.decade.Table.lookup(2010)
self.assertIsNotNone(decade)
self.assertIsNotNone(db.year.Table.lookup(2019))
track = db.track.Table.lookup(test_track01)
self.assertEqual(track.number, 1)
self.assertEqual(track.length, 10)
self.assertEqual(track.title, "Test Track")
self.assertEqual(track.path, test_track01)
genre = db.genre.Table.lookup("Test")
self.assertEqual(genre.get_track(0), track)
new = db.user.Table.find("New Tracks")
self.assertEqual(new.get_track(0), track)
class TestScannerDirectoryTask(unittest.TestCase):
def setUp(self):
db.reset()
def test_task(self):
lib = db.library.Table.find(test_tracks)
dt = task.DirectoryTask(lib, test_tracks)
self.assertIsInstance(dt, task.Task)
self.assertEqual(dt.library, lib)
self.assertEqual(dt.dirpath, test_tracks)
tasks = dt.run_task()
self.assertIsNotNone(tasks)
self.assertEqual(len(tasks), 15)
file_tasks = [ t for t in tasks if isinstance(t, task.FileTask) ]
dir_tasks = [ t for t in tasks if isinstance(t, task.DirectoryTask) ]
commit_task = [ t for t in tasks if isinstance(t, task.CommitTask) ]
self.assertEqual(len(file_tasks), 13)
self.assertEqual(len(dir_tasks), 1)
self.assertEqual(len(commit_task), 1)
class TestScannerCheckTask(unittest.TestCase):
def setUp(self):
db.reset()
def test_task(self):
lib = db.library.Table.find(test_tracks)
for i in [ 1, 2, 3 ]:
db.make_fake_track(i, i, f"Test Track {i}", f"{lib.path}/{i}.ogg", lib.path)
track = db.make_fake_track(4, 4, "data/Test Album/04 - Test (Disc Two).ogg", lib.path)
tracks = [ db.track.Table.get(i) for i in [ 1, 2, 3, 4 ] ]
ct = task.CheckTask(tracks)
self.assertIsInstance(ct, task.Task)
self.assertEqual(ct.tracks, tracks)
self.assertIsNone(ct.run_task())
self.assertIsNone(db.track.Table.get(1))
self.assertIsNone(db.track.Table.get(2))
self.assertIsNone(db.track.Table.get(3))
self.assertEqual(db.track.Table.get(4), track)
class TestScannerCheckSchedulerTask(unittest.TestCase):
def setUp(self):
db.reset()
def test_task(self):
lib = db.library.Table.find(test_tracks)
track = db.make_fake_track(1, 1, "Test Album Track", str(test_track01), str(test_tracks))
lib2 = db.library.Table.find("/a/b/c")
for i in range(75):
db.make_fake_track(i, i, f"Test Track {i}",f"/a/b/c/{i}.ogg", lib="/a/b/c")
cst = task.CheckSchedulerTask(lib2)
self.assertIsInstance(cst, task.Task)
self.assertEqual(cst.library, lib2)
tasks = cst.run_task()
self.assertEqual(len(tasks), 2)
self.assertIsInstance(tasks[0], task.CheckTask)
self.assertIsInstance(tasks[1], task.CheckTask)
self.assertEqual(len(tasks[0].tracks), 50)
self.assertEqual(len(tasks[1].tracks), 25)
tasks[0].run_task()
tasks[1].run_task()
self.assertEqual(db.track.Table.get(1), track)
for i in range(1, 76):
self.assertIsNone(db.track.Table.get(1+i))
class TestScannerRemoveTask(unittest.TestCase):
def setUp(self):
db.reset()
def test_task(self):
lib = db.library.Table.find(test_tracks)
for i in [ 1, 2, 3, 4, 5 ]:
db.make_fake_track(i, i, f"Test Track {i}", f"{lib.path}/{i}.ogg", lib.path)
tracks = [ db.track.Table.get(i) for i in [ 1, 2, 3, 4, 5 ] ]
rt = task.RemoveTask(tracks)
self.assertIsInstance(rt, task.Task)
self.assertEqual(rt.tracks, tracks)
self.assertIsNone(rt.run_task())
for i in [ 1, 2, 3, 4, 5 ]:
self.assertIsNone(db.track.Table.get(i))
class TestScannerRemoveLibraryTask(unittest.TestCase):
def setUp(self):
db.reset()
def test_task(self):
lib = db.library.Table.find(test_tracks)
rlt = task.RemoveLibraryTask(lib)
self.assertIsInstance(rlt, task.Task)
self.assertEqual(rlt.library, lib)
self.assertIsNone(rlt.run_task())
self.assertIsNone(db.library.Table.lookup(test_tracks))
class TestScannerRemoveLibrarySchedulerTask(unittest.TestCase):
def setUp(self):
db.reset()
def test_task(self):
lib = db.library.Table.find(test_tracks)
for i in range(75):
db.make_fake_track(i, i, f"Test Track {i}",f"/a/b/c/{i}.ogg", lib.path)
rlst = task.RemoveLibrarySchedulerTask(lib)
self.assertIsInstance(rlst, task.Task)
self.assertEqual(rlst.library, lib)
tasks = rlst.run_task()
self.assertEqual(len(tasks), 3)
self.assertIsInstance(tasks[0], task.RemoveTask)
self.assertIsInstance(tasks[1], task.RemoveTask)
self.assertIsInstance(tasks[2], task.RemoveLibraryTask)
self.assertEqual(len(tasks[0].tracks), 50)
self.assertEqual(len(tasks[1].tracks), 25)
self.assertEqual(tasks[2].library, lib)
for t in tasks: t.run_task()
for i in range(1, 76):
self.assertIsNone(db.track.Table.get(i))
self.assertIsNone(db.library.Table.lookup(test_tracks))
class TestEnableLibraryTask(unittest.TestCase):
def test_task(self):
lib = db.library.Table.find(test_tracks)
elt = task.EnableLibraryTask(lib, False)
self.assertIsInstance(elt, task.Task)
self.assertEqual(elt.library, lib)
self.assertEqual(elt.enable, False)
self.assertIsNone(elt.run_task())
self.assertFalse(lib.enabled)
elt.enable = True
self.assertIsNone(elt.run_task())
self.assertTrue(lib.enabled)