2026-06-24 19:11:02 -04:00
|
|
|
from unittest import mock
|
|
|
|
|
|
2026-06-24 19:43:20 -04:00
|
|
|
from mopidy.models import Playlist
|
|
|
|
|
|
2026-06-24 19:11:02 -04:00
|
|
|
from mopidy_smartplaylists.frontend import SmartPlaylistsFrontend
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TestSmartPlaylistsFrontend:
|
|
|
|
|
def test_on_start_with_recipes(self):
|
|
|
|
|
config = mock.Mock()
|
|
|
|
|
config.get.return_value = {
|
|
|
|
|
"decades": "1980,1990",
|
|
|
|
|
"genres": "",
|
|
|
|
|
"artists": "",
|
|
|
|
|
"playlist_prefix": "[Smart]",
|
|
|
|
|
"refresh_interval": "0",
|
|
|
|
|
}
|
|
|
|
|
core = mock.Mock()
|
2026-06-24 19:43:20 -04:00
|
|
|
core.library.search.return_value.get.return_value = []
|
|
|
|
|
core.playlists.lookup.return_value.get.return_value = None
|
|
|
|
|
core.playlists.save.return_value.get.return_value = Playlist(
|
|
|
|
|
name="test", uri="dummy:pl", tracks=[]
|
|
|
|
|
)
|
2026-06-24 19:11:02 -04:00
|
|
|
|
|
|
|
|
frontend = SmartPlaylistsFrontend(config, core)
|
|
|
|
|
frontend.on_start()
|
|
|
|
|
|
2026-06-24 19:43:20 -04:00
|
|
|
assert core.library.search.call_count == 2
|
2026-06-24 19:11:02 -04:00
|
|
|
|
|
|
|
|
def test_on_start_without_recipes(self):
|
|
|
|
|
config = mock.Mock()
|
|
|
|
|
config.get.return_value = {
|
|
|
|
|
"decades": "",
|
|
|
|
|
"genres": "",
|
|
|
|
|
"artists": "",
|
|
|
|
|
"playlist_prefix": "[Smart]",
|
|
|
|
|
"refresh_interval": "0",
|
|
|
|
|
}
|
|
|
|
|
core = mock.Mock()
|
|
|
|
|
|
|
|
|
|
frontend = SmartPlaylistsFrontend(config, core)
|
|
|
|
|
frontend.on_start()
|
|
|
|
|
|
|
|
|
|
core.library.search.assert_not_called()
|
|
|
|
|
|
|
|
|
|
def test_playlists_loaded_with_interval(self):
|
|
|
|
|
config = mock.Mock()
|
|
|
|
|
config.get.return_value = {
|
2026-06-24 19:43:20 -04:00
|
|
|
"decades": "1980",
|
2026-06-24 19:11:02 -04:00
|
|
|
"playlist_prefix": "[Smart]",
|
|
|
|
|
"refresh_interval": "24",
|
|
|
|
|
}
|
|
|
|
|
core = mock.Mock()
|
2026-06-24 19:43:20 -04:00
|
|
|
core.library.search.return_value.get.return_value = []
|
|
|
|
|
core.playlists.lookup.return_value.get.return_value = None
|
|
|
|
|
core.playlists.save.return_value.get.return_value = Playlist(
|
|
|
|
|
name="test", uri="dummy:pl", tracks=[]
|
|
|
|
|
)
|
2026-06-24 19:11:02 -04:00
|
|
|
|
|
|
|
|
frontend = SmartPlaylistsFrontend(config, core)
|
|
|
|
|
frontend.playlists_loaded()
|
|
|
|
|
|
|
|
|
|
core.library.search.assert_called()
|
|
|
|
|
|
|
|
|
|
def test_playlists_loaded_without_interval(self):
|
|
|
|
|
config = mock.Mock()
|
|
|
|
|
config.get.return_value = {
|
|
|
|
|
"playlist_prefix": "[Smart]",
|
|
|
|
|
"refresh_interval": "0",
|
|
|
|
|
}
|
|
|
|
|
core = mock.Mock()
|
|
|
|
|
|
|
|
|
|
frontend = SmartPlaylistsFrontend(config, core)
|
|
|
|
|
frontend.playlists_loaded()
|
|
|
|
|
|
|
|
|
|
core.library.search.assert_not_called()
|
2026-09-24 00:00:59 -04:00
|
|
|
|
|
|
|
|
def test_track_playback_started_accepts_tl_track(self):
|
|
|
|
|
config = mock.Mock()
|
|
|
|
|
config.get.return_value = {
|
|
|
|
|
"playlist_prefix": "[Smart]",
|
|
|
|
|
"smart_queue_enabled": "false",
|
|
|
|
|
}
|
|
|
|
|
core = mock.Mock()
|
|
|
|
|
|
|
|
|
|
frontend = SmartPlaylistsFrontend(config, core)
|
|
|
|
|
frontend.track_playback_started(tl_track=mock.Mock())
|
|
|
|
|
|
|
|
|
|
core.tracklist.add.assert_not_called()
|