# Copyright 2022 (c) Anna Schumaker. """Tests our Tracklist card.""" import unittest.mock import emmental.tracklist import tests.util from gi.repository import GLib from gi.repository import Gtk class TestTracklist(tests.util.TestCase): """Tests the Tracklist card.""" def setUp(self): """Set up common variables.""" super().setUp() self.tracklist = emmental.tracklist.Card(self.sql) self.db_plist = self.sql.playlists.create("Test Playlist") self.playlist = emmental.playlist.playlist.Playlist(self.sql, self.db_plist) def test_init(self): """Test that the Tracklist has been set up correctly.""" self.assertIsInstance(self.tracklist, Gtk.Box) self.assertIsInstance(self.tracklist._top_box, Gtk.CenterBox) self.assertIsInstance(self.tracklist._top_left, Gtk.Box) self.assertEqual(self.tracklist.sql, self.sql) self.assertEqual(self.tracklist.get_spacing(), 6) self.assertEqual(self.tracklist.get_orientation(), Gtk.Orientation.VERTICAL) self.assertEqual(self.tracklist._top_box.get_margin_top(), 6) self.assertEqual(self.tracklist._top_box.get_margin_start(), 6) self.assertEqual(self.tracklist._top_box.get_margin_end(), 6) self.assertEqual(self.tracklist._top_box.get_orientation(), Gtk.Orientation.HORIZONTAL) self.assertEqual(self.tracklist.get_first_child(), self.tracklist._top_box) self.assertEqual(self.tracklist._top_box.get_start_widget(), self.tracklist._top_left) self.assertTrue(self.tracklist.has_css_class("card")) def test_visible_columns(self): """Test the visible columns button.""" self.assertIsInstance(self.tracklist._visible_cols, emmental.tracklist.buttons.VisibleColumns) self.assertEqual(self.tracklist._visible_cols.columns, self.tracklist._trackview.columns) self.assertEqual(self.tracklist._top_left.get_first_child(), self.tracklist._visible_cols) def test_filter(self): """Test the Tracklist Filter entry.""" self.assertIsInstance(self.tracklist._filter, emmental.entry.Filter) self.assertEqual(self.tracklist._top_box.get_center_widget(), self.tracklist._filter) self.assertEqual(self.tracklist._filter.get_margin_start(), 100) self.assertEqual(self.tracklist._filter.get_margin_end(), 100) self.assertEqual(self.tracklist._filter.get_placeholder_text(), "type to filter tracks") self.assertTrue(self.tracklist._filter.get_hexpand()) with unittest.mock.patch.object(self.sql.tracks, "filter") as mock_filter: self.tracklist._filter.set_text("test text") self.tracklist._filter.emit("search-changed") mock_filter.assert_called_with("*test text*") def test_trackview(self): """Test the Trackview widget.""" self.assertIsInstance(self.tracklist._trackview, emmental.tracklist.trackview.TrackView) self.assertEqual(self.tracklist._top_box.get_next_sibling(), self.tracklist._trackview) self.assertEqual(self.tracklist._trackview.get_margin_start(), 6) self.assertEqual(self.tracklist._trackview.get_margin_end(), 6) self.assertEqual(self.tracklist.columns, self.tracklist._trackview.columns) def test_playlist(self): """Test the playlist property.""" self.assertIsNone(self.tracklist.playlist) self.tracklist.playlist = self.playlist self.assertEqual(self.tracklist.playlist, self.playlist) self.assertEqual(self.tracklist._trackview.playlist, self.playlist) @unittest.mock.patch("gi.repository.GLib.idle_add") def test_scroll_to_track(self, mock_idle_add: unittest.mock.Mock): """Test the scroll_to_track() function.""" self.tracklist.scroll_to_track(None) mock_idle_add.assert_not_called() self.tracklist.playlist = self.playlist self.tracklist.scroll_to_track(None) mock_idle_add.assert_called_with(self.tracklist._Card__scroll_idle, None) with unittest.mock.patch.object(self.tracklist._trackview, "scroll_to_track") as mock_scroll: self.assertEqual(self.tracklist._Card__scroll_idle(None), GLib.SOURCE_REMOVE) mock_scroll.assert_called_with(None)