# 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_scanner_task_init(self): t = task.Task() self.assertIsInstance(t, GObject.GObject) with self.assertRaises(NotImplementedError): t.run_task() class TestScannerCommitTask(unittest.TestCase): def test_scanner_commit_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_scanner_file_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.assertEqual(artist.sort, "artist, test") album = db.album.Table.lookup(artist, "Test Album") self.assertIsNotNone(album) self.assertIsNotNone(db.disc.Table.lookup(album, 1)) 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(db.genre.Map.lookup_tracks(genre), [ track ]) new = db.playlist.Table.find("New Tracks") self.assertEqual(db.playlist.TempMap.lookup_tracks(new), [ track ]) class TestScannerImportTask(unittest.TestCase): def setUp(self): db.reset() def test_scanner_import_task(self): today = datetime.date.today() lib = db.library.Table.find(test_tracks) it = task.ImportTask(lib, test_track01, 4, today) self.assertIsInstance(it, task.FileTask) self.assertEqual(it.library, lib) self.assertEqual(it.filepath, test_track01) self.assertEqual(it.playcount, 4) self.assertEqual(it.lastplayed, today) self.assertIsNone(it.run_task()) track = db.track.Table.lookup(test_track01) self.assertEqual(track.playcount, 4) self.assertEqual(track.lastplayed, datetime.datetime.combine(today, datetime.time())) class TestScannerDirectoryTask(unittest.TestCase): def setUp(self): db.reset() def test_scanner_directory_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)