Test whole save/load state.

This commit is contained in:
Jens Luetjen 2016-04-01 22:16:05 +02:00
parent 6e33bbcadd
commit 6ee36752bd

View File

@ -9,8 +9,12 @@ import mock
import pykka import pykka
import mopidy
from mopidy.core import Core 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): class CoreActorTest(unittest.TestCase):
@ -52,6 +56,8 @@ class CoreActorExportRestoreTest(unittest.TestCase):
def setUp(self): def setUp(self):
self.temp_dir = tempfile.mkdtemp() self.temp_dir = tempfile.mkdtemp()
self.state_file = os.path.join(self.temp_dir, 'core', 'state.json.gz')
config = { config = {
'core': { 'core': {
'max_tracklist_length': 10000, 'max_tracklist_length': 10000,
@ -62,29 +68,87 @@ class CoreActorExportRestoreTest(unittest.TestCase):
os.mkdir(os.path.join(self.temp_dir, 'core')) os.mkdir(os.path.join(self.temp_dir, 'core'))
self.core = Core.start( self.mixer = dummy_mixer.create_proxy()
config=config, mixer=None, backends=[]).proxy() self.core = Core(
config=config, mixer=self.mixer, backends=[])
def tearDown(self): # noqa: N802 def tearDown(self): # noqa: N802
pykka.ActorRegistry.stop_all() pykka.ActorRegistry.stop_all()
shutil.rmtree(self.temp_dir) shutil.rmtree(self.temp_dir)
def test_save_state(self): def test_save_state(self):
self.core.teardown().get() self.core.teardown()
# TODO: implement meaningful test
def test_load_state(self): assert os.path.isfile(self.state_file)
self.core.setup().get() reload_data = storage.load(self.state_file)
# TODO: implement meaningful test 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): def test_delete_state_file_on_restore(self):
file_path = os.path.join(self.temp_dir, 'core', 'state.json.gz')
data = {} data = {}
storage.dump(file_path, data) storage.dump(self.state_file, data)
self.assertTrue(os.path.isfile(file_path), 'missing persistent file') assert os.path.isfile(self.state_file)
self.core.setup().get() self.core.setup()
self.assertFalse(os.path.isfile(file_path), assert not os.path.isfile(self.state_file)
'persistent file has to be deleted')