diff options
Diffstat (limited to 'solo-tool-project/test/session_manager_unittest.py')
-rw-r--r-- | solo-tool-project/test/session_manager_unittest.py | 137 |
1 files changed, 41 insertions, 96 deletions
diff --git a/solo-tool-project/test/session_manager_unittest.py b/solo-tool-project/test/session_manager_unittest.py index e74bab4..0edc252 100644 --- a/solo-tool-project/test/session_manager_unittest.py +++ b/solo-tool-project/test/session_manager_unittest.py @@ -1,114 +1,59 @@ -from solo_tool.session_manager import loadSession, saveSession -from json import loads, dumps - import pytest +from json import loads +import pathlib +import shutil -testSession = [ - { - "path" : "/path/to/another/song", - "ab_limits" : None - }, - { - "path" : "/path/to/song", - "ab_limits" : [ - [0.1, 0.2], - [0.3, 0.4] - ] - }, - { - "path" : "/path/to/something", - "ab_limits" : [ - [0.1, 0.2] - ] - } -] - -class ABControllerMock: - def __init__(self): - self.limits = dict() - - def storeLimits(self, aLimit, bLimit, song="current"): - if song not in self.limits: - self.limits[song] = list() - self.limits[song].append([aLimit, bLimit]) - - def getStoredLimits(self, song): - return self.limits.get(song) - - def clear(self): - self.__init__() - -class MockFile: - def __init__(self, init=""): - self.contents = init - - def open(self, *args): - pass - - def write(self, s): - self.contents += s +pytestmark = pytest.mark.skip(reason="not yet implemented") - def read(self): - return self.contents - -@pytest.fixture -def songListMock(): - return [] +from solo_tool.session_manager import loadSession, saveSession +from solo_tool.solo_tool import SoloTool @pytest.fixture -def abControllerMock(): - return ABControllerMock() +def prepared_tmp_path(tmp_path): + testFiles = [ + "test.flac", + "test.mp3", + "test_session.json" + ] + for f in testFiles: + shutil.copy(pathlib.Path(f), tmp_path) + return tmp_path -def test_loadSession(songListMock, abControllerMock): - sessionFile = MockFile(dumps(testSession)) - loadSession(sessionFile, songListMock, abControllerMock) +def test_loadSession(prepared_tmp_path): + soloTool = loadSession(prepared_tmp_path / "test_session.json") - for i, entry in enumerate(testSession): - expectedSong = entry["path"] - expectedLimits = entry["ab_limits"] - loadedSong = songListMock[i] - loadedLimits = abControllerMock.limits.get(expectedSong) + assert soloTool.songs == ["test.flac", "test.mp3"] - assert loadedSong == expectedSong - assert loadedLimits == expectedLimits + soloTool.song = 0 + assert soloTool.keyPositions == [] -def test_saveSession(songListMock, abControllerMock): - for i, entry in enumerate(testSession): - song = entry["path"] - songListMock.append(song) + soloTool.song = 1 + assert soloTool.keyPositions == [0.1, 0.3] - abLimits = entry["ab_limits"] - if abLimits is not None: - for l in abLimits: - abControllerMock.storeLimits(l[0], l[1], song) +def test_saveSession(prepared_tmp_path): + soloTool = SoloTool() + soloTool.addSong("test.flac") + soloTool.addSong("test.mp3") + soloTool.keyPositions = [0.1, 0.3] - sessionFile = MockFile() - saveSession(sessionFile, songListMock, abControllerMock) + testFile = prepared_tmp_path / "test_session_saved.json" + saveSession(soloTool, testFile) - savedSession = loads(sessionFile.read()) - assert savedSession == testSession + with open(testFile, "r") as f: + savedSession = loads(f.read()) -def test_loadAndSaveEmptySession(songListMock, abControllerMock): - sessionFile = MockFile() + with open(prepared_tmp_path / "test_session.json", "r") as f: + testSession = loads(f.read()) - saveSession(sessionFile, songListMock, abControllerMock) - assert loads(sessionFile.read()) == list() + assert savedSession == testSession - loadSession(sessionFile, songListMock, abControllerMock) +def test_loadAndSaveEmptySession(prepared_tmp_path): + emptyFile = prepared_tmp_path / "empty_session.json" - assert songListMock == list() - for s in songListMock: - assert abControllerMock.getStoredLimits(s) == None + soloTool = SoloTool() -def test_loadSessionNotAdditive(songListMock, abControllerMock): - sessionFile = MockFile(dumps(testSession)) - loadSession(sessionFile, songListMock, abControllerMock) - loadSession(sessionFile, songListMock, abControllerMock) + saveSession(soloTool, emptyFile) + reloadedTool = loadSession(emptyFile) - songs = songListMock - assert len(songs) == len(set(songs)) - for s in songs: - abLimits = abControllerMock.getStoredLimits(s) - if abLimits is not None: - abLimitStr = [f"[{l[0]}, {l[1]}] " for l in abLimits] - assert len(abLimitStr) == len(set(abLimitStr)) + assert reloadedTool.songs == [] + |