diff --git a/tests/core/test_actor.py b/tests/core/test_actor.py index a22ed642..62c0ba2b 100644 --- a/tests/core/test_actor.py +++ b/tests/core/test_actor.py @@ -9,8 +9,12 @@ import mock import pykka +import mopidy + from mopidy.core import Core -from mopidy.internal import storage, versioning +from mopidy.internal import models, storage, versioning +from mopidy.models import Track +from tests import dummy_mixer class CoreActorTest(unittest.TestCase): @@ -52,6 +56,8 @@ class CoreActorExportRestoreTest(unittest.TestCase): def setUp(self): self.temp_dir = tempfile.mkdtemp() + self.state_file = os.path.join(self.temp_dir, 'core', 'state.json.gz') + config = { 'core': { 'max_tracklist_length': 10000, @@ -62,29 +68,87 @@ class CoreActorExportRestoreTest(unittest.TestCase): os.mkdir(os.path.join(self.temp_dir, 'core')) - self.core = Core.start( - config=config, mixer=None, backends=[]).proxy() + self.mixer = dummy_mixer.create_proxy() + self.core = Core( + config=config, mixer=self.mixer, backends=[]) def tearDown(self): # noqa: N802 pykka.ActorRegistry.stop_all() shutil.rmtree(self.temp_dir) def test_save_state(self): - self.core.teardown().get() - # TODO: implement meaningful test + self.core.teardown() - def test_load_state(self): - self.core.setup().get() - # TODO: implement meaningful test + assert os.path.isfile(self.state_file) + reload_data = storage.load(self.state_file) + data = {} + data['version'] = mopidy.__version__ + data['state'] = models.CoreState( + tracklist=models.TracklistState( + repeat=False, random=False, + consume=False, single=False, + next_tlid=1), + history=models.HistoryState(), + playback=models.PlaybackState(state='stopped', + time_position=0), + mixer=models.MixerState()) + assert data == reload_data + + def test_load_state_no_file(self): + self.core.setup() + + assert self.core.mixer.get_mute() is None + assert self.core.mixer.get_volume() is None + assert self.core.tracklist._next_tlid == 1 + assert self.core.tracklist.get_repeat() is False + assert self.core.tracklist.get_random() is False + assert self.core.tracklist.get_consume() is False + assert self.core.tracklist.get_single() is False + assert self.core.tracklist.get_length() == 0 + assert self.core.playback._start_paused is False + assert self.core.playback._start_at_position is None + assert self.core.history.get_length() == 0 + + def test_load_state_with_data(self): + data = {} + data['version'] = mopidy.__version__ + data['state'] = models.CoreState( + tracklist=models.TracklistState( + repeat=True, random=True, + consume=False, single=False, + tl_tracks=[models.TlTrack(tlid=12, track=Track(uri='a:a'))], + next_tlid=14), + history=models.HistoryState(history=[ + models.HistoryTrack( + timestamp=12, + track=models.Ref.track(uri='a:a', name='a')), + models.HistoryTrack( + timestamp=13, + track=models.Ref.track(uri='a:b', name='b'))]), + playback=models.PlaybackState(tlid=12, state='paused', + time_position=432), + mixer=models.MixerState(mute=True, volume=12)) + storage.dump(self.state_file, data) + + self.core.setup() + + assert self.core.mixer.get_mute() is True + assert self.core.mixer.get_volume() == 12 + assert self.core.tracklist._next_tlid == 14 + assert self.core.tracklist.get_repeat() is True + assert self.core.tracklist.get_random() is True + assert self.core.tracklist.get_consume() is False + assert self.core.tracklist.get_single() is False + assert self.core.tracklist.get_length() == 1 + assert self.core.playback._start_paused is True + assert self.core.playback._start_at_position == 432 + assert self.core.history.get_length() == 2 def test_delete_state_file_on_restore(self): - file_path = os.path.join(self.temp_dir, 'core', 'state.json.gz') - data = {} - storage.dump(file_path, data) - self.assertTrue(os.path.isfile(file_path), 'missing persistent file') + storage.dump(self.state_file, data) + assert os.path.isfile(self.state_file) - self.core.setup().get() + self.core.setup() - self.assertFalse(os.path.isfile(file_path), - 'persistent file has to be deleted') + assert not os.path.isfile(self.state_file)