235 lines
9.9 KiB
Python
235 lines
9.9 KiB
Python
# Copyright 2023 (c) Anna Schumaker.
|
|
"""Test our Playlist Manager object."""
|
|
import io
|
|
import unittest.mock
|
|
import emmental.playlist
|
|
import tests.util
|
|
from gi.repository import GObject
|
|
|
|
|
|
@unittest.mock.patch("sys.stdout", new_callable=io.StringIO)
|
|
class TestFactory(tests.util.TestCase):
|
|
"""Test the Playlist Factory class."""
|
|
|
|
def setUp(self):
|
|
"""Set up common variables."""
|
|
super().setUp()
|
|
self.sql.playlists.load(now=True)
|
|
self.user_plist = self.sql.playlists.create("User Playlist")
|
|
self.factory = emmental.playlist.Factory(self.sql)
|
|
|
|
def test_init(self, mock_stdout: io.StringIO):
|
|
"""Check that the Playlist Factory is set up properly."""
|
|
self.assertIsInstance(self.factory, GObject.GObject)
|
|
self.assertEqual(self.factory.sql, self.sql)
|
|
|
|
def test_active(self, mock_stdout: io.StringIO):
|
|
"""Test the active playlist property."""
|
|
self.assertIsNone(self.factory.db_active)
|
|
|
|
self.sql.set_active_playlist(self.user_plist)
|
|
self.assertEqual(self.factory.db_active, self.user_plist)
|
|
self.assertRegex(mock_stdout.getvalue(),
|
|
"factory: active playlist is: User Playlist")
|
|
|
|
self.sql.set_active_playlist(None)
|
|
self.assertIsNone(self.factory.db_active)
|
|
self.assertRegex(mock_stdout.getvalue(), "active playlist is: <None>")
|
|
|
|
def test_active_playlist(self, mock_stdout: io.StringIO):
|
|
"""Test creating a Playlist when setting the dv_visible property."""
|
|
self.assertIsNone(self.factory.active_playlist)
|
|
|
|
self.factory.db_active = self.user_plist
|
|
self.assertIsInstance(self.factory.active_playlist,
|
|
emmental.playlist.playlist.Playlist)
|
|
self.assertEqual(self.factory.active_playlist.sql, self.sql)
|
|
self.assertEqual(self.factory.active_playlist.playlist,
|
|
self.user_plist)
|
|
|
|
orig_id = id(self.factory.active_playlist)
|
|
self.factory.db_active = self.sql.playlists.collection
|
|
self.assertEqual(id(self.factory.active_playlist), orig_id)
|
|
self.assertEqual(self.factory.active_playlist.playlist,
|
|
self.sql.playlists.collection)
|
|
|
|
active = self.factory.active_playlist
|
|
self.factory.db_active = None
|
|
self.assertIsNone(self.factory.active_playlist)
|
|
self.assertIsNone(active.playlist)
|
|
|
|
def test_active_visible_playlist(self, mock_stdout: io.StringIO):
|
|
"""Test setting the active playlist to the visible playlist."""
|
|
self.factory.db_visible = self.user_plist
|
|
self.factory.db_active = self.user_plist
|
|
self.assertEqual(id(self.factory.active_playlist),
|
|
id(self.factory.visible_playlist))
|
|
|
|
self.factory.db_active = self.user_plist
|
|
self.assertEqual(id(self.factory.active_playlist),
|
|
id(self.factory.visible_playlist))
|
|
|
|
self.factory.db_active = self.sql.playlists.collection
|
|
self.assertNotEqual(id(self.factory.active_playlist),
|
|
id(self.factory.visible_playlist))
|
|
|
|
active = self.factory.active_playlist
|
|
self.factory.db_active = self.user_plist
|
|
self.assertEqual(id(self.factory.active_playlist),
|
|
id(self.factory.visible_playlist))
|
|
self.assertIsNone(active.playlist)
|
|
|
|
active = self.factory.active_playlist
|
|
self.factory.db_active = None
|
|
self.assertEqual(active.playlist, self.user_plist)
|
|
self.assertIsNone(self.factory.active_playlist)
|
|
|
|
def test_active_loop(self, mock_stdout: io.StringIO):
|
|
"""Test changing the loop property of the active playlist."""
|
|
notify = unittest.mock.Mock()
|
|
self.factory.connect("notify::active-loop", notify)
|
|
|
|
self.assertEqual(self.factory.active_loop, "None")
|
|
self.factory.active_loop = "Playlist"
|
|
self.assertEqual(self.factory.active_loop, "None")
|
|
notify.assert_not_called()
|
|
|
|
self.factory.db_active = self.user_plist
|
|
self.assertEqual(self.factory.active_loop, "None")
|
|
notify.assert_called()
|
|
|
|
notify.reset_mock()
|
|
self.factory.active_loop = "Playlist"
|
|
self.assertEqual(self.user_plist.loop, "Playlist")
|
|
self.assertEqual(self.factory.active_loop, "Playlist")
|
|
notify.assert_called()
|
|
|
|
notify.reset_mock()
|
|
self.factory.active_loop = "Playlist"
|
|
notify.assert_not_called()
|
|
|
|
def test_active_shuffle(self, mock_stdout: io.StringIO):
|
|
"""Test changing the shuffle property of the active playlist."""
|
|
notify = unittest.mock.Mock()
|
|
self.factory.connect("notify::active-shuffle", notify)
|
|
|
|
self.assertFalse(self.factory.active_shuffle)
|
|
self.factory.active_shuffle = True
|
|
self.assertFalse(self.factory.active_shuffle)
|
|
notify.assert_not_called()
|
|
|
|
self.factory.db_active = self.user_plist
|
|
self.assertFalse(self.factory.active_shuffle)
|
|
notify.assert_called()
|
|
|
|
notify.reset_mock()
|
|
self.factory.active_shuffle = True
|
|
self.assertTrue(self.user_plist.shuffle)
|
|
self.assertTrue(self.factory.active_shuffle)
|
|
notify.assert_called()
|
|
|
|
notify.reset_mock()
|
|
self.factory.active_shuffle = True
|
|
notify.assert_not_called()
|
|
|
|
def test_previous(self, mock_stdout: io.StringIO):
|
|
"""Test the previous playlist property."""
|
|
self.assertIsNone(self.factory.db_previous)
|
|
|
|
self.factory.db_previous = self.sql.playlists.previous
|
|
self.assertEqual(self.factory.db_previous, self.sql.playlists.previous)
|
|
self.assertRegex(mock_stdout.getvalue(),
|
|
r"factory: previous playlist is: Previous Tracks")
|
|
|
|
self.factory.db_previous = None
|
|
self.assertRegex(mock_stdout.getvalue(),
|
|
"factory: previous playlist is: <None>")
|
|
|
|
def test_previous_playlist(self, mock_stdout: io.StringIO):
|
|
"""Test creating a Playlist when setting the db_previous property."""
|
|
self.assertIsNone(self.factory.previous_playlist)
|
|
|
|
self.factory.db_previous = self.sql.playlists.previous
|
|
self.assertIsInstance(self.factory.previous_playlist,
|
|
emmental.playlist.previous.Previous)
|
|
self.assertEqual(self.factory.previous_playlist.sql, self.sql)
|
|
self.assertEqual(self.factory.previous_playlist.playlist,
|
|
self.sql.playlists.previous)
|
|
|
|
previous = self.factory.previous_playlist
|
|
self.factory.db_previous = None
|
|
self.assertIsNone(self.factory.previous_playlist)
|
|
self.assertIsNone(previous.playlist)
|
|
|
|
def test_visible(self, mock_stdout: io.StringIO):
|
|
"""Test the visible playlist property."""
|
|
self.assertIsNone(self.factory.db_visible)
|
|
|
|
self.factory.db_visible = self.user_plist
|
|
self.assertEqual(self.factory.db_visible, self.user_plist)
|
|
self.assertRegex(mock_stdout.getvalue(),
|
|
"factory: visible playlist is: User Playlist")
|
|
|
|
self.factory.db_visible = None
|
|
self.assertRegex(mock_stdout.getvalue(),
|
|
"factory: visible playlist is: <None>")
|
|
|
|
def test_visible_playlist(self, mock_stdout: io.StringIO):
|
|
"""Test creating a Playlist when setting the db_visible property."""
|
|
self.assertIsNone(self.factory.visible_playlist)
|
|
|
|
self.factory.db_visible = self.user_plist
|
|
self.assertIsInstance(self.factory.visible_playlist,
|
|
emmental.playlist.playlist.Playlist)
|
|
self.assertEqual(self.factory.visible_playlist.sql, self.sql)
|
|
self.assertEqual(self.factory.visible_playlist.playlist,
|
|
self.user_plist)
|
|
|
|
orig_id = id(self.factory.visible_playlist)
|
|
self.factory.db_visible = self.sql.playlists.collection
|
|
self.assertEqual(id(self.factory.visible_playlist), orig_id)
|
|
self.assertEqual(self.factory.visible_playlist.playlist,
|
|
self.sql.playlists.collection)
|
|
|
|
visible = self.factory.visible_playlist
|
|
self.factory.db_visible = None
|
|
self.assertIsNone(self.factory.visible_playlist)
|
|
self.assertIsNone(visible.playlist)
|
|
|
|
def test_visible_active_playlist(self, mock_stdout: io.StringIO):
|
|
"""Test setting the visible playlist to the active playlist."""
|
|
self.factory.db_active = self.user_plist
|
|
self.factory.db_visible = self.user_plist
|
|
self.assertEqual(id(self.factory.visible_playlist),
|
|
id(self.factory.active_playlist))
|
|
|
|
self.factory.db_visible = self.user_plist
|
|
self.assertEqual(id(self.factory.visible_playlist),
|
|
id(self.factory.active_playlist))
|
|
|
|
self.factory.db_visible = self.sql.playlists.collection
|
|
self.assertNotEqual(id(self.factory.visible_playlist),
|
|
id(self.factory.active_playlist))
|
|
|
|
visible = self.factory.visible_playlist
|
|
self.factory.db_visible = self.user_plist
|
|
self.assertEqual(id(self.factory.visible_playlist),
|
|
id(self.factory.active_playlist))
|
|
self.assertIsNone(visible.playlist)
|
|
|
|
visible = self.factory.visible_playlist
|
|
self.factory.db_visible = None
|
|
self.assertEqual(visible.playlist, self.user_plist)
|
|
self.assertIsNone(self.factory.visible_playlist)
|
|
|
|
def test_visible_previous_playlist(self, mock_stdout: io.StringIO):
|
|
"""Test setting the visible playlist to the previous playlist."""
|
|
self.factory.db_previous = self.sql.playlists.previous
|
|
self.factory.db_visible = self.sql.playlists.previous
|
|
self.assertEqual(id(self.factory.visible_playlist),
|
|
id(self.factory.previous_playlist))
|
|
|
|
self.factory.db_visible = self.user_plist
|
|
self.assertNotEqual(id(self.factory.visible_playlist),
|
|
id(self.factory.previous_playlist))
|