247 lines
10 KiB
Python
247 lines
10 KiB
Python
# Copyright 2023 (c) Anna Schumaker.
|
|
"""Tests our sidebar test selector."""
|
|
import datetime
|
|
import unittest
|
|
import xfstestsdb.gtk.sidebar
|
|
from gi.repository import GLib
|
|
from gi.repository import Gtk
|
|
|
|
|
|
class TestRunidView(unittest.TestCase):
|
|
"""Test the RunidView class."""
|
|
|
|
def setUp(self):
|
|
"""Set up common variables."""
|
|
self.xfstestsdb = xfstestsdb.Command()
|
|
with unittest.mock.patch("sys.stdout"):
|
|
self.xfstestsdb.run(["new", "/dev/vda2"])
|
|
self.xfstestsdb.run(["new", "/dev/vda1"])
|
|
self.xfstestsdb.run(["new", "/dev/vda1"])
|
|
self.xfstestsdb.run(["new", "/dev/vda3"])
|
|
|
|
self.today = datetime.date.today()
|
|
self.devlist = xfstestsdb.gtk.tree.DateDeviceList(self.xfstestsdb.sql,
|
|
self.today)
|
|
self.view = xfstestsdb.gtk.sidebar.RunidView(self.devlist)
|
|
|
|
def test_init(self):
|
|
"""Test that the RunidView was set up properly."""
|
|
self.assertIsInstance(self.view, Gtk.ScrolledWindow)
|
|
self.assertEqual(self.view.props.vexpand, True)
|
|
|
|
def test_listview(self):
|
|
"""Test that the listview child is set up properly."""
|
|
self.assertIsInstance(self.view._view, Gtk.ListView)
|
|
self.assertIsInstance(self.view._selection, Gtk.SingleSelection)
|
|
self.assertIsInstance(self.view._view.props.factory,
|
|
xfstestsdb.gtk.row.SidebarFactory)
|
|
|
|
self.assertTrue(self.view._view.props.single_click_activate)
|
|
self.assertTrue(self.view._view.has_css_class("navigation-sidebar"))
|
|
self.assertTrue(self.view._view.has_css_class("background"))
|
|
|
|
self.assertEqual(self.view._view.props.model,
|
|
self.view._selection)
|
|
self.assertEqual(self.view.props.child, self.view._view)
|
|
|
|
def test_model_property(self):
|
|
"""Test the model property."""
|
|
self.assertEqual(self.view.model, self.devlist)
|
|
self.assertEqual(self.view._selection.props.model,
|
|
self.devlist.treemodel)
|
|
|
|
self.view.model = None
|
|
self.assertIsNone(self.view._selection.props.model)
|
|
|
|
self.view.model = self.devlist
|
|
self.assertEqual(self.view._selection.props.model,
|
|
self.devlist.treemodel)
|
|
|
|
def test_runid_property(self):
|
|
"""Test the runid property."""
|
|
self.view.model = self.devlist
|
|
self.assertEqual(self.view.runid, 0)
|
|
|
|
self.view._view.emit("activate", 1)
|
|
self.assertEqual(self.view.runid, 2)
|
|
self.view._view.emit("activate", 2)
|
|
self.assertEqual(self.view.runid, 3)
|
|
self.view._view.emit("activate", 4)
|
|
self.assertEqual(self.view.runid, 1)
|
|
self.view._view.emit("activate", 6)
|
|
self.assertEqual(self.view.runid, 4)
|
|
|
|
def test_expand_collapse(self):
|
|
"""Test expanding and collapsing child rows."""
|
|
self.view.model = self.devlist
|
|
|
|
self.assertTrue(self.view._selection[0].get_expanded())
|
|
self.assertEqual(self.view.runid, 0)
|
|
|
|
self.view._view.emit("activate", 0)
|
|
self.assertFalse(self.view._selection[0].get_expanded())
|
|
self.assertEqual(self.view.runid, 0)
|
|
|
|
self.view._view.emit("activate", 0)
|
|
self.assertTrue(self.view._selection[0].get_expanded())
|
|
self.assertEqual(self.view.runid, 2)
|
|
|
|
|
|
class TestCalendarView(unittest.TestCase):
|
|
"""Test the CalendarView class."""
|
|
|
|
def setUp(self):
|
|
"""Set up common variables."""
|
|
self.xfstestsdb = xfstestsdb.Command()
|
|
with unittest.mock.patch("sys.stdout"):
|
|
self.xfstestsdb.run(["new", "/dev/vda1"])
|
|
self.xfstestsdb.run(["new", "/dev/vda2"])
|
|
self.xfstestsdb.run(["new", "/dev/vda3"])
|
|
self.xfstestsdb.run(["new", "/dev/vda4"])
|
|
|
|
query = "UPDATE xfstests_runs SET timestamp=? WHERE runid=?"
|
|
dtime = datetime.datetime.now().replace(year=2023, month=1)
|
|
self.xfstestsdb.sql(query, dtime.replace(day=1), 1)
|
|
self.xfstestsdb.sql(query, dtime.replace(day=8), 2)
|
|
self.xfstestsdb.sql(query, dtime.replace(day=15), 3)
|
|
|
|
self.sidebar = xfstestsdb.gtk.sidebar.CalendarView(self.xfstestsdb.sql)
|
|
|
|
def test_init(self):
|
|
"""Test that the calendar view was set up properly."""
|
|
self.assertIsInstance(self.sidebar, Gtk.Box)
|
|
self.assertEqual(self.sidebar.props.spacing, 6)
|
|
self.assertEqual(self.sidebar.props.orientation,
|
|
Gtk.Orientation.VERTICAL)
|
|
self.assertEqual(self.sidebar.sql, self.xfstestsdb.sql)
|
|
|
|
def test_calendar(self):
|
|
"""Test the calendar widget."""
|
|
self.assertIsInstance(self.sidebar._calendar, Gtk.Calendar)
|
|
self.assertEqual(self.sidebar.get_first_child(),
|
|
self.sidebar._calendar)
|
|
|
|
today = datetime.date.today()
|
|
self.assertTrue(self.sidebar._calendar.get_day_is_marked(today.day))
|
|
|
|
def test_view(self):
|
|
"""Test the runid view widget."""
|
|
self.assertIsInstance(self.sidebar._view,
|
|
xfstestsdb.gtk.sidebar.RunidView)
|
|
self.assertIsInstance(self.sidebar._view.model,
|
|
xfstestsdb.gtk.tree.DateDeviceList)
|
|
self.assertEqual(self.sidebar._calendar.get_next_sibling(),
|
|
self.sidebar._view)
|
|
|
|
self.assertEqual(self.sidebar._view.model.date, datetime.date.today())
|
|
|
|
def test_marked_days(self):
|
|
"""Test marking days in the calendar."""
|
|
gl_date = GLib.DateTime.new_local(2023, 1, 10, 0, 0, 0)
|
|
self.sidebar._calendar.select_day(gl_date)
|
|
|
|
for signal in ["next-month", "next-year", "prev-month", "prev-year"]:
|
|
with self.subTest(signal=signal):
|
|
with unittest.mock.patch.object(self.sidebar._calendar,
|
|
"clear_marks") as mock_clear:
|
|
with unittest.mock.patch.object(self.sidebar._calendar,
|
|
"mark_day") as mock_mark:
|
|
self.sidebar._calendar.emit(signal)
|
|
mock_clear.assert_called()
|
|
mock_mark.assert_has_calls([unittest.mock.call(1),
|
|
unittest.mock.call(8),
|
|
unittest.mock.call(15)])
|
|
|
|
def test_select_day(self):
|
|
"""Test selecting a day in the calendar."""
|
|
gl_now = GLib.DateTime.new_now_local()
|
|
self.sidebar._calendar.select_day(gl_now.add_days(-1))
|
|
|
|
today = datetime.date.today()
|
|
self.assertEqual(self.sidebar._view.model.date,
|
|
today - datetime.timedelta(days=1))
|
|
|
|
def test_runid_property(self):
|
|
"""Test the runid property."""
|
|
self.assertEqual(self.sidebar.runid, 0)
|
|
self.sidebar._view.runid = 42
|
|
self.assertEqual(self.sidebar.runid, 42)
|
|
|
|
|
|
class TestSidebar(unittest.TestCase):
|
|
"""Test the Sidebar class."""
|
|
|
|
def setUp(self):
|
|
"""Set up common variables."""
|
|
self.xfstestsdb = xfstestsdb.Command()
|
|
self.sidebar = xfstestsdb.gtk.sidebar.Sidebar(self.xfstestsdb.sql)
|
|
|
|
def test_init(self):
|
|
"""Test taht the sidebar was set up properly."""
|
|
self.assertIsInstance(self.sidebar, Gtk.Box)
|
|
self.assertEqual(self.sidebar.props.orientation,
|
|
Gtk.Orientation.VERTICAL)
|
|
self.assertEqual(self.sidebar.sql, self.xfstestsdb.sql)
|
|
|
|
def test_stack_switcher(self):
|
|
"""Test the Gtk.StackSwitcher."""
|
|
self.assertIsInstance(self.sidebar._switcher, Gtk.StackSwitcher)
|
|
self.assertEqual(self.sidebar._switcher.props.stack,
|
|
self.sidebar._stack)
|
|
self.assertTrue(self.sidebar._switcher.has_css_class("large-icons"))
|
|
|
|
self.assertEqual(self.sidebar._switcher.props.margin_top, 6)
|
|
self.assertEqual(self.sidebar._switcher.props.margin_bottom, 6)
|
|
self.assertEqual(self.sidebar._switcher.props.margin_start, 80)
|
|
self.assertEqual(self.sidebar._switcher.props.margin_end, 80)
|
|
|
|
self.assertEqual(self.sidebar.get_first_child(),
|
|
self.sidebar._switcher)
|
|
|
|
def test_separator(self):
|
|
"""Test the Gtk.Separator between sidebar widgets."""
|
|
sep = self.sidebar._switcher.get_next_sibling()
|
|
self.assertIsInstance(sep, Gtk.Separator)
|
|
self.assertEqual(sep.props.orientation, Gtk.Orientation.HORIZONTAL)
|
|
self.assertEqual(sep.get_next_sibling(), self.sidebar._stack)
|
|
|
|
def test_stack(self):
|
|
"""Test the Gtk.Stack."""
|
|
self.assertIsInstance(self.sidebar._stack, Gtk.Stack)
|
|
self.assertEqual(self.sidebar._stack.props.transition_type,
|
|
Gtk.StackTransitionType.OVER_LEFT_RIGHT)
|
|
self.assertEqual(self.sidebar.get_last_child(), self.sidebar._stack)
|
|
|
|
def test_calendar_page(self):
|
|
"""Test the Sidebar calendar view page."""
|
|
self.assertIsInstance(self.sidebar._calendar,
|
|
xfstestsdb.gtk.sidebar.CalendarView)
|
|
self.assertEqual(self.sidebar._calendar.sql, self.xfstestsdb.sql)
|
|
|
|
self.assertEqual(self.sidebar._stack.get_child_by_name("calendar"),
|
|
self.sidebar._calendar)
|
|
page = self.sidebar._stack.get_page(self.sidebar._calendar)
|
|
self.assertEqual(page.props.title, "Calendar")
|
|
self.assertEqual(page.props.icon_name, "month-symbolic")
|
|
|
|
def test_tag_page(self):
|
|
"""Test the Sidebar tag view page."""
|
|
self.assertIsInstance(self.sidebar._tags,
|
|
xfstestsdb.gtk.sidebar.RunidView)
|
|
|
|
self.assertEqual(self.sidebar._stack.get_child_by_name("tags"),
|
|
self.sidebar._tags)
|
|
page = self.sidebar._stack.get_page(self.sidebar._tags)
|
|
self.assertEqual(page.props.title, "Tags")
|
|
self.assertEqual(page.props.icon_name, "tag-symbolic")
|
|
|
|
def test_runid(self):
|
|
"""Test the runid property."""
|
|
self.assertEqual(self.sidebar.runid, 0)
|
|
|
|
self.sidebar._calendar.runid = 1
|
|
self.assertEqual(self.sidebar.runid, 1)
|
|
|
|
self.sidebar._tags.runid = 2
|
|
self.assertEqual(self.sidebar.runid, 2)
|