emmental/test_trackdb.py
Anna Schumaker a1d4d9e418 trackdb: Load saved files
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2020-10-26 17:39:15 -04:00

119 lines
4.4 KiB
Python

# Copyright 2020 (c) Anna Schumaker.
from lib import data
from lib import idle
from lib import publisher
import pathlib
import threading
import trackdb
import unittest
test_tracks = "./trier/Test Album"
class TestTrackDB(unittest.TestCase):
def setUp(self):
trackdb.LibraryAdded.register(self.on_library_added)
trackdb.LibraryRemoved.register(self.on_library_removed)
self.count_added = 0
self.count_removed = 0
def tearDown(self):
idle.reset()
trackdb.reset()
def on_library_added(self, lib):
self.count_added += 1
def on_library_removed(self, lib):
self.count_removed += 1
def test_trackdb_init(self):
self.assertEqual(trackdb.library_paths, [ ])
self.assertFalse(trackdb.need_save)
self.assertIsNone(trackdb.idle_id)
self.assertIsInstance(trackdb.LibraryAdded, publisher.Publisher)
self.assertIsInstance(trackdb.LibraryRemoved, publisher.Publisher)
self.assertIsInstance(trackdb.save_lock, type(threading.Lock()))
self.assertEqual(trackdb.db_file, "trackdb.pickle")
self.assertIn(trackdb.save, trackdb.LibraryAdded.subscribers)
self.assertIn(trackdb.save, trackdb.LibraryRemoved.subscribers)
self.assertIn(trackdb.save, trackdb.library.TrackAdded.subscribers)
self.assertIn(trackdb.save, trackdb.library.TrackRemoved.subscribers)
self.assertIn(trackdb.save, trackdb.track.TrackUpdated.subscribers)
def test_trackdb_add_path(self):
lib = trackdb.add_path(test_tracks)
self.assertIsInstance(lib, trackdb.library.LibraryPath)
self.assertEqual(trackdb.library_paths, [ lib ])
self.assertEqual(self.count_added, 1)
self.assertEqual(self.count_removed, 0)
self.assertIsNone(trackdb.add_path(test_tracks))
self.assertEqual(len(trackdb.library_paths), 1)
self.assertEqual(self.count_added, 1)
self.assertEqual(self.count_removed, 0)
trackdb.remove_path(test_tracks)
self.assertEqual(trackdb.library_paths, [ ])
self.assertEqual(self.count_added, 1)
self.assertEqual(self.count_removed, 1)
def test_trackdb_get_library(self):
self.assertIsNone(trackdb.get_library(test_tracks))
lib = trackdb.add_path(test_tracks)
self.assertEqual(trackdb.get_library(test_tracks), lib)
def test_trackdb_get_track(self):
lib = trackdb.add_path(test_tracks)
lib.scan().join()
self.assertEqual(trackdb.get_track(3), lib[3])
self.assertIsNone(trackdb.get_track(200))
def test_trackdb_save_load(self):
db_file = data.DataFile(trackdb.db_file, data.READ)
lib = trackdb.add_path(test_tracks)
lib.scan()
trackdb.save()
self.assertTrue(trackdb.need_save)
self.assertEqual(idle.Funcs, [ trackdb._do_save ])
self.assertFalse(db_file.exists())
idle.complete(delay=0.1)
self.assertIsNone(lib.thread)
self.assertEqual(idle.Funcs, [ ])
self.assertTrue(db_file.exists())
trackdb.library_paths.clear()
trackdb.library.NextID = 0
trackdb.load()
self.assertEqual(trackdb.library.NextID, 12)
self.assertEqual(len(trackdb.library_paths), 1)
self.assertEqual(len(trackdb.library_paths[0].tracks), 12)
def test_trackdb_stress(self):
lib = trackdb.add_path("./trier/Test Library/")
lib.scan()
idle.complete(0.1)
def test_trackdb_reset(self):
trackdb.library.TrackAdded.register(1)
trackdb.library.TrackRemoved.register(1)
trackdb.track.TrackUpdated.register(1)
trackdb.LibraryAdded.register(1)
trackdb.LibraryRemoved.register(1)
trackdb.library_paths = [ 1, 2, 3 ]
trackdb.need_save = True
with data.DataFile(trackdb.db_file, data.WRITE) as f:
f.pickle([ 0, [] ])
trackdb.reset()
self.assertEqual(trackdb.library_paths, [ ])
self.assertIn(trackdb.save, trackdb.library.TrackAdded.subscribers)
self.assertIn(trackdb.save, trackdb.library.TrackRemoved.subscribers)
self.assertIn(trackdb.save, trackdb.track.TrackUpdated.subscribers)
self.assertIn(trackdb.save, trackdb.LibraryAdded.subscribers)
self.assertIn(trackdb.save, trackdb.LibraryRemoved.subscribers)
self.assertFalse(trackdb.need_save)
self.assertFalse(data.DataFile(trackdb.db_file, data.READ).exists())