emmental/scanner/test_task.py

110 lines
3.5 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_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)