119 lines
4.4 KiB
Python
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())
|