Anna Schumaker
b245b2073e
To remove a bunch of redundant names from the test functions Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
193 lines
6.7 KiB
Python
193 lines
6.7 KiB
Python
# Copyright 2021 (c) Anna Schumaker.
|
|
import db
|
|
import pathlib
|
|
import time
|
|
import unittest
|
|
from gi.repository import Gio
|
|
from gi.repository import GLib
|
|
from gi.repository import Gtk
|
|
from . import queue
|
|
from . import task
|
|
from . import widgets
|
|
|
|
main_context = GLib.main_context_default()
|
|
test_album = pathlib.Path("./data/Test Album/").absolute()
|
|
test_subdir = test_album / "Test Subdir"
|
|
|
|
class FakeTask(task.Task):
|
|
def run_task(self): return None
|
|
|
|
class TestScannerProgressBar(unittest.TestCase):
|
|
def test_init(self):
|
|
q = queue.TaskQueue()
|
|
pb = widgets.ProgressBar(q)
|
|
|
|
self.assertIsInstance(pb, Gtk.ProgressBar)
|
|
self.assertTrue( pb.get_hexpand())
|
|
self.assertFalse(pb.get_visible())
|
|
self.assertEqual(pb.get_valign(), Gtk.Align.CENTER)
|
|
self.assertEqual(pb.queue, q)
|
|
|
|
for i in range(3): q.push(FakeTask())
|
|
self.assertTrue(pb.get_visible())
|
|
self.assertTrue(widgets.ProgressBar(q).get_visible())
|
|
|
|
for i in [ 1, 2, 0 ]:
|
|
q.run()
|
|
self.assertEqual(pb.get_fraction(), i/3)
|
|
self.assertFalse(pb.get_visible())
|
|
|
|
|
|
class DirectoryChooserWidget(unittest.TestCase):
|
|
def test_init(self):
|
|
dcw = widgets.DirectoryChooserWidget()
|
|
|
|
self.assertIsInstance(dcw, Gtk.FileChooserWidget)
|
|
self.assertIsInstance(dcw.filter, Gtk.FileFilter)
|
|
|
|
self.assertEqual(dcw.get_action(), Gtk.FileChooserAction.SELECT_FOLDER)
|
|
self.assertEqual(dcw.get_filter(), dcw.filter)
|
|
self.assertFalse(dcw.get_create_folders())
|
|
|
|
gfile = Gio.File.new_for_path(str(test_album))
|
|
self.assertTrue(dcw.set_current_folder(gfile))
|
|
while main_context.iteration(may_block=False): pass
|
|
self.assertEqual(dcw.selected_path(), test_album)
|
|
|
|
gfile = Gio.File.new_for_path(str(test_subdir))
|
|
self.assertTrue(dcw.set_file(gfile))
|
|
while main_context.iteration(may_block=False): time.sleep(0.001)
|
|
self.assertEqual(dcw.selected_path(), test_subdir)
|
|
|
|
|
|
class DirectoryChooserPopover(unittest.TestCase):
|
|
def test_init(self):
|
|
db.reset()
|
|
q = queue.TaskQueue()
|
|
dcp = widgets.DirectoryChooserPopover(q)
|
|
|
|
self.assertIsInstance(dcp, Gtk.Popover)
|
|
self.assertIsInstance(dcp.chooser, widgets.DirectoryChooserWidget)
|
|
self.assertIsInstance(dcp.cancel, Gtk.Button)
|
|
self.assertIsInstance(dcp.select, Gtk.Button)
|
|
self.assertIsInstance(dcp.grid, Gtk.Grid)
|
|
|
|
self.assertEqual(dcp.queue, q)
|
|
self.assertEqual(dcp.cancel.get_label(), "Cancel")
|
|
self.assertEqual(dcp.select.get_label(), "Add Folder")
|
|
|
|
self.assertTrue(dcp.has_css_class("normal-icons"))
|
|
self.assertTrue(dcp.select.has_css_class("suggested-action"))
|
|
|
|
self.assertEqual(dcp.get_child(), dcp.grid)
|
|
self.assertIn(dcp.chooser, dcp.grid)
|
|
self.assertIn(dcp.cancel, dcp.grid)
|
|
self.assertIn(dcp.select, dcp.grid)
|
|
|
|
gfile = Gio.File.new_for_path(str(test_album))
|
|
self.assertTrue(dcp.chooser.set_current_folder(gfile))
|
|
while main_context.iteration(may_block=False): pass
|
|
|
|
dcp.select.emit("clicked")
|
|
self.assertIsNotNone(db.library.Table.find(test_album))
|
|
self.assertEqual(len(q.tasks), 2)
|
|
self.assertIsInstance(q.tasks[0], task.CheckSchedulerTask)
|
|
self.assertIsInstance(q.tasks[1], task.DirectoryTask)
|
|
q.tasks_finished()
|
|
|
|
|
|
class TestScannerAddFolderButton(unittest.TestCase):
|
|
def test_init(self):
|
|
q = queue.TaskQueue()
|
|
afb = widgets.AddFolderButton(q)
|
|
|
|
self.assertIsInstance(afb, Gtk.MenuButton)
|
|
self.assertIsInstance(afb.popover, widgets.DirectoryChooserPopover)
|
|
|
|
self.assertEqual(afb.get_popover(), afb.popover)
|
|
self.assertEqual(afb.get_icon_name(), "folder-new")
|
|
self.assertEqual(afb.get_direction(), Gtk.ArrowType.UP)
|
|
|
|
|
|
class TestScannerUpdateButton(unittest.TestCase):
|
|
def test_init(self):
|
|
lib = db.library.Table.find("/a/b/c")
|
|
q = queue.TaskQueue()
|
|
ub = widgets.UpdateButton(lib, q)
|
|
|
|
self.assertIsInstance(ub, Gtk.Button)
|
|
self.assertIsInstance(ub, widgets.ScannerButton)
|
|
self.assertEqual(ub.get_icon_name(), "view-refresh")
|
|
self.assertEqual(ub.library, lib)
|
|
self.assertEqual(ub.queue, q)
|
|
self.assertTrue(ub.get_hexpand())
|
|
|
|
ub.emit("clicked")
|
|
self.assertEqual(len(q.tasks), 2)
|
|
self.assertIsInstance(q.tasks[0], task.CheckSchedulerTask)
|
|
self.assertIsInstance(q.tasks[1], task.DirectoryTask)
|
|
q.tasks_finished()
|
|
|
|
|
|
class TestScannerUpdateAllButton(unittest.TestCase):
|
|
def test_init(self):
|
|
db.reset()
|
|
lib1 = db.library.Table.find("/a/b/c")
|
|
lib2 = db.library.Table.find("/d/e/f")
|
|
q = queue.TaskQueue()
|
|
uba = widgets.UpdateAllButton(q)
|
|
|
|
self.assertIsInstance(uba, Gtk.Button)
|
|
self.assertIsInstance(uba, widgets.ScannerButton)
|
|
self.assertEqual(uba.get_icon_name(), "view-refresh")
|
|
self.assertEqual(uba.queue, q)
|
|
self.assertTrue(uba.get_hexpand())
|
|
|
|
uba.emit("clicked")
|
|
self.assertEqual(len(q.tasks), 4)
|
|
self.assertIsInstance(q.tasks[0], task.CheckSchedulerTask)
|
|
self.assertIsInstance(q.tasks[1], task.DirectoryTask)
|
|
self.assertIsInstance(q.tasks[2], task.CheckSchedulerTask)
|
|
self.assertIsInstance(q.tasks[3], task.DirectoryTask)
|
|
q.tasks_finished()
|
|
|
|
|
|
class TestScannerRemoveButton(unittest.TestCase):
|
|
def test_init(self):
|
|
lib = db.library.Table.find("/a/b/c")
|
|
q = queue.TaskQueue()
|
|
rb = widgets.RemoveButton(lib, q)
|
|
|
|
self.assertIsInstance(rb, Gtk.Button)
|
|
self.assertIsInstance(rb, widgets.ScannerButton)
|
|
self.assertEqual(rb.get_icon_name(), "list-remove")
|
|
self.assertEqual(rb.library, lib)
|
|
self.assertEqual(rb.queue, q)
|
|
self.assertTrue(rb.get_hexpand())
|
|
|
|
rb.emit("clicked")
|
|
self.assertEqual(len(q.tasks), 1)
|
|
self.assertIsInstance(q.tasks[0], task.RemoveLibrarySchedulerTask)
|
|
q.tasks_finished()
|
|
|
|
|
|
class TestEnableSwitch(unittest.TestCase):
|
|
def test_init(self):
|
|
lib = db.library.Table.find("/a/b/c")
|
|
q = queue.TaskQueue()
|
|
es = widgets.EnableSwitch(lib, q)
|
|
|
|
self.assertIsInstance(es, Gtk.Switch)
|
|
self.assertEqual(es.library, lib)
|
|
self.assertEqual(es.queue, q)
|
|
self.assertEqual(es.get_halign(), Gtk.Align.CENTER)
|
|
self.assertEqual(es.get_valign(), Gtk.Align.CENTER)
|
|
self.assertTrue(es.get_active())
|
|
|
|
es.set_active(False)
|
|
self.assertFalse(es.library.enabled)
|
|
self.assertFalse(widgets.EnableSwitch(lib, q).get_active())
|
|
|
|
es.set_active(True)
|
|
self.assertTrue(lib.enabled)
|