emmental/tests/tracklist/test_tracklist.py
Anna Schumaker a485a3806b tracklist: Scroll to the requested Track
And wire this up to not only the Now Playing "jump" signal, but also the
next track pickers so we scroll when tracks are changed.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2023-05-10 17:42:27 -04:00

96 lines
4.1 KiB
Python

# 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.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.assertTrue(self.tracklist.has_css_class("card"))
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)