emmental/tests/playlist/test_factory.py
Anna Schumaker b0734a41d0 playlist: Have the Factory create a visible Playlist
I either create or reuse an existing Playlist object when the
db-visible property changes to a new value.

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

86 lines
3.5 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_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_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)