172 lines
7.5 KiB
Python
172 lines
7.5 KiB
Python
# Copyright 2022 (c) Anna Schumaker.
|
|
"""Tests our playlist Sidebar card."""
|
|
import emmental.sidebar
|
|
import tests.util
|
|
import unittest.mock
|
|
from gi.repository import Gtk
|
|
|
|
|
|
class TestSidebar(tests.util.TestCase):
|
|
"""Tests the Sidebar card."""
|
|
|
|
def setUp(self):
|
|
"""Set up common variables."""
|
|
super().setUp()
|
|
self.sidebar = emmental.sidebar.Card(sql=self.sql)
|
|
|
|
def test_init(self):
|
|
"""Test that the Sidebar has been set up correctly."""
|
|
self.assertIsInstance(self.sidebar, Gtk.Box)
|
|
|
|
self.assertEqual(self.sidebar.sql, self.sql)
|
|
self.assertEqual(self.sidebar.get_orientation(),
|
|
Gtk.Orientation.VERTICAL)
|
|
self.assertFalse(self.sidebar.get_sensitive())
|
|
|
|
self.assertTrue(self.sidebar.has_css_class("card"))
|
|
|
|
def test_header(self):
|
|
"""Test the Sidebar header."""
|
|
self.assertIsInstance(self.sidebar._header, Gtk.CenterBox)
|
|
self.assertEqual(self.sidebar.get_first_child(), self.sidebar._header)
|
|
self.assertTrue(self.sidebar._header.has_css_class("toolbar"))
|
|
|
|
def test_filter(self):
|
|
"""Test the Sidebar filter entry."""
|
|
self.assertIsInstance(self.sidebar._filter, emmental.entry.Filter)
|
|
|
|
self.assertEqual(self.sidebar._header.get_center_widget(),
|
|
self.sidebar._filter)
|
|
self.assertEqual(self.sidebar._filter.get_placeholder_text(),
|
|
"type to filter playlists")
|
|
self.assertTrue(self.sidebar._filter.get_hexpand())
|
|
|
|
with unittest.mock.patch.object(self.sql, "filter") as mock_filter:
|
|
self.sidebar._filter.set_text("test text")
|
|
self.sidebar._filter.emit("search-changed")
|
|
mock_filter.assert_called_with("*test text*")
|
|
|
|
def test_sensitivity_and_startup(self):
|
|
"""Test setting the sidebar sensitivity when all tables have loaded."""
|
|
tables = [t for t in self.sql.playlist_tables()]
|
|
self.sidebar.select_playlist = unittest.mock.Mock()
|
|
self.sidebar._libraries.extra_widget.emit = unittest.mock.Mock()
|
|
|
|
for table in tables:
|
|
self.assertFalse(self.sidebar.get_sensitive())
|
|
self.sidebar.select_playlist.assert_not_called()
|
|
self.sidebar._libraries.extra_widget.emit.assert_not_called()
|
|
self.sql.emit("table-loaded", table)
|
|
|
|
self.assertTrue(self.sidebar.get_sensitive())
|
|
self.sidebar.select_playlist.assert_called()
|
|
self.sidebar._libraries.extra_widget.emit.assert_called_with("clicked")
|
|
|
|
self.sidebar.select_playlist.reset_mock()
|
|
self.sql.emit("table-loaded", tables[0])
|
|
self.sidebar.select_playlist.assert_not_called()
|
|
|
|
def test_show_all_artists(self):
|
|
"""Test the show-all-artists property."""
|
|
self.assertFalse(self.sidebar.show_all_artists)
|
|
self.sidebar.show_all_artists = True
|
|
self.assertTrue(self.sidebar._artists.show_all)
|
|
self.sidebar._artists.show_all = False
|
|
self.assertFalse(self.sidebar.show_all_artists)
|
|
|
|
def test_selected_playlist(self):
|
|
"""Test the selected-playlist property."""
|
|
self.assertIsNone(self.sidebar.selected_playlist)
|
|
|
|
playlist1 = self.sql.playlists.create("Playlist 1")
|
|
self.sidebar._view.selected_playlist = playlist1
|
|
self.assertEqual(self.sidebar.selected_playlist, playlist1)
|
|
|
|
def test_view(self):
|
|
"""Test that sidebar sections are in the View."""
|
|
self.assertIsInstance(self.sidebar._view,
|
|
emmental.sidebar.section.View)
|
|
self.assertEqual(self.sidebar._header.get_next_sibling(),
|
|
self.sidebar._view)
|
|
|
|
self.assertListEqual(self.sidebar._view._sections,
|
|
[self.sidebar._playlists,
|
|
self.sidebar._artists,
|
|
self.sidebar._genres,
|
|
self.sidebar._decades,
|
|
self.sidebar._libraries])
|
|
|
|
def test_sections(self):
|
|
"""Tests sidebar section models."""
|
|
self.assertIsInstance(self.sidebar._playlists,
|
|
emmental.sidebar.playlist.Section)
|
|
self.assertIsInstance(self.sidebar._artists,
|
|
emmental.sidebar.artist.Section)
|
|
self.assertIsInstance(self.sidebar._genres,
|
|
emmental.sidebar.genre.Section)
|
|
self.assertIsInstance(self.sidebar._decades,
|
|
emmental.sidebar.decade.Section)
|
|
self.assertIsInstance(self.sidebar._libraries,
|
|
emmental.sidebar.library.Section)
|
|
|
|
self.assertEqual(self.sidebar._view.get_first_child(),
|
|
self.sidebar._playlists)
|
|
self.assertEqual(self.sidebar._playlists.get_next_sibling(),
|
|
self.sidebar._artists)
|
|
self.assertEqual(self.sidebar._artists.get_next_sibling(),
|
|
self.sidebar._genres)
|
|
self.assertEqual(self.sidebar._genres.get_next_sibling(),
|
|
self.sidebar._decades)
|
|
self.assertEqual(self.sidebar._decades.get_next_sibling(),
|
|
self.sidebar._libraries)
|
|
|
|
self.assertEqual(self.sidebar._playlists.table, self.sql.playlists)
|
|
self.assertEqual(self.sidebar._artists.table, self.sql.artists)
|
|
self.assertEqual(self.sidebar._artists.album_table, self.sql.albums)
|
|
self.assertEqual(self.sidebar._genres.table, self.sql.genres)
|
|
self.assertEqual(self.sidebar._decades.table, self.sql.decades)
|
|
self.assertEqual(self.sidebar._decades.year_table, self.sql.years)
|
|
self.assertEqual(self.sidebar._libraries.table, self.sql.libraries)
|
|
|
|
def test_select_playlist(self):
|
|
"""Test setting the active playlist."""
|
|
playlist = self.sql.playlists.create("Test Playlist")
|
|
self.sidebar.select_playlist(playlist)
|
|
self.assertTrue(self.sidebar._playlists.active)
|
|
self.assertEqual(self.sidebar.selected_playlist, playlist)
|
|
|
|
artist = self.sql.artists.create("Test Artist")
|
|
album = self.sql.albums.create("Test Album", "Test Artist", "2023")
|
|
medium = self.sql.media.create(album, "Test Medium", number=1)
|
|
|
|
self.sidebar._artists.select_playlist = unittest.mock.Mock()
|
|
for plist in [artist, album, medium]:
|
|
self.sidebar._artists.select_playlist.reset_mock()
|
|
self.sidebar._artists.active = False
|
|
|
|
self.sidebar.select_playlist(plist)
|
|
self.assertTrue(self.sidebar._artists.active)
|
|
self.sidebar._artists.select_playlist.assert_called_with(plist)
|
|
|
|
genre = self.sql.genres.create("Test Genre")
|
|
self.sidebar.select_playlist(genre)
|
|
self.assertTrue(self.sidebar._genres.active)
|
|
self.assertEqual(self.sidebar.selected_playlist, genre)
|
|
|
|
decade = self.sql.decades.create(1990)
|
|
year = self.sql.years.create(1990)
|
|
|
|
self.sidebar._decades.select_playlist = unittest.mock.Mock()
|
|
for plist in [decade, year]:
|
|
self.sidebar._decades.select_playlist.reset_mock()
|
|
self.sidebar._decades.active = False
|
|
|
|
self.sidebar.select_playlist(plist)
|
|
self.assertTrue(self.sidebar._decades.active)
|
|
self.sidebar._decades.select_playlist.assert_called_with(plist)
|
|
|
|
library = self.sql.libraries.create("/a/b/c")
|
|
self.sidebar.select_playlist(library)
|
|
self.assertTrue(self.sidebar._libraries.active)
|
|
self.assertEqual(self.sidebar.selected_playlist, library)
|