# 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)