# Copyright 2021 (c) Anna Schumaker. import db import pathlib import sqlite3 import unittest from gi.repository import GObject class TestLibrary(unittest.TestCase): def track_added(self, library, added): self.added = added def track_removed(self, library, removed, adjusted_current): self. removed = (removed, adjusted_current) def setUp(self): db.reset() def test_init(self): library = db.library.Table.insert(pathlib.Path("/a/b/c")) self.assertIsInstance(library, db.playlist.Playlist) self.assertEqual(library.get_property("name"), "/a/b/c") self.assertEqual(library.get_property("icon-name"), "folder-music") def test_delete(self): library = db.library.Table.find(pathlib.Path("/a/b/c")) library.delete() self.assertIsNone(db.library.Table.lookup(pathlib.Path("/a/b/c"))) def test_path(self): library = db.library.Table.insert(pathlib.Path("/a/b/c")) self.assertIsInstance(library._path, pathlib.Path) self.assertEqual(library.get_property("path"), library._path) def test_enabled(self): library = db.library.Table.insert(pathlib.Path("/a/b/c")) self.assertTrue(library._enabled) self.assertTrue(library.get_property("enabled")) library.enabled = False self.assertFalse(library._enabled) def test_tracks(self): library = db.library.Table.insert(pathlib.Path("/a/b/c")) library.connect("track-added", self.track_added) self.assertEqual(library.get_n_tracks(), 0) self.assertEqual(library.get_tracks(), [ ]) track = db.make_fake_track(1, 1, "Test Track", "/a/b/c/1.ogg") self.assertEqual(library.get_n_tracks(), 1) self.assertEqual(library.get_track(0), track) self.assertEqual(library.get_tracks(), [ track ]) self.assertEqual(library.get_track_index(track), 0) self.assertEqual(self.added, track) library.connect("track-removed", self.track_removed) db.track.Table.delete(track) self.assertEqual(library.get_tracks(), [ ]) self.assertEqual(self.removed, (track, False)) class TestLibraryTable(unittest.TestCase): def setUp(self): db.reset() def test_init(self): table = db.library.LibraryTable() self.assertIsInstance(table, db.playlist.Model) self.assertIsInstance(table, db.table.Model) self.assertEqual(table.table, "libraries") self.assertEqual(table.order, "path") self.assertIsInstance(db.library.Table, db.library.LibraryTable) db.sql.execute("SELECT libraryid,plstateid,enabled,path FROM libraries") def test_insert(self): table = db.library.LibraryTable() library = table.insert(pathlib.Path("/a/b/c")) self.assertIsInstance(library, db.library.Library) self.assertIsInstance(library._plstate, db.state.PlaylistState) self.assertEqual(library._rowkey, "libraryid") self.assertEqual(library._path, pathlib.Path("/a/b/c")) self.assertTrue(library._enabled) with self.assertRaises(sqlite3.IntegrityError): db.library.Table.insert(pathlib.Path("/a/b/c")) def test_delete(self): table = db.library.LibraryTable() library = table.insert(pathlib.Path("/a/b/c")) state = library.plist_state table.delete(library) self.assertIsNone(db.library.Table.lookup(pathlib.Path("/a/b/c"))) self.assertIsNone(db.state.Table.get(state.rowid)) def test_lookup(self): table = db.library.LibraryTable() library = table.insert(pathlib.Path("/a/b/c")) self.assertEqual(table.lookup(pathlib.Path("/a/b/c")), library) self.assertIsNone(table.lookup(pathlib.Path("/a/b/d")))