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