aboutsummaryrefslogtreecommitdiffstats
path: root/session_manager_unittest.py
diff options
context:
space:
mode:
authorEddy Pedroni <eddy@0xf7.com>2021-12-21 18:24:55 +0100
committerEddy Pedroni <eddy@0xf7.com>2021-12-21 18:24:55 +0100
commit6eb42e6d4468ad161281125c77a41063f93380e1 (patch)
tree35ad2edeb7058ad60f47affb1b27dfac3fa62bac /session_manager_unittest.py
parentc1bfcc6064b3a22c76b986d9339daf6cbd403c80 (diff)
Added session manager, renamed solo-tool.py
Diffstat (limited to 'session_manager_unittest.py')
-rw-r--r--session_manager_unittest.py137
1 files changed, 137 insertions, 0 deletions
diff --git a/session_manager_unittest.py b/session_manager_unittest.py
new file mode 100644
index 0000000..0169132
--- /dev/null
+++ b/session_manager_unittest.py
@@ -0,0 +1,137 @@
+from session_manager import SessionManager
+from json import loads, dumps
+
+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 PlaylistMock:
+ def __init__(self):
+ self.lastAddedSong = None
+ self.songs = list()
+
+ def addSong(self, s):
+ self.songs.append(s)
+ self.lastAddedSong = s
+
+ def getSongs(self):
+ return self.songs
+
+class ABControllerMock:
+ def __init__(self):
+ self.limits = dict()
+
+ def addLimits(self, aLimit, bLimit, song="current"):
+ if song not in self.limits:
+ self.limits[song] = list()
+ self.limits[song].append([aLimit, bLimit])
+
+ def getLimits(self):
+ return self.limits
+
+class MockFile:
+ def __init__(self, init=""):
+ self.contents = init
+
+ def open(self, *args):
+ pass
+
+ def write(self, s):
+ self.contents += s
+
+ def read(self):
+ return self.contents
+
+
+def test_addSongs():
+ songs = [
+ "/path/to/song",
+ "/path/to/another/song"
+ ]
+
+ playlistMock = PlaylistMock()
+ uut = SessionManager(playlistMock, None)
+
+ for s in songs:
+ uut.addSong(s)
+ assert playlistMock.lastAddedSong == s
+
+def test_addAbLimits():
+ abLimits = [
+ [0.1, 0.2],
+ [0.3, 0.4]
+ ]
+
+ abControllerMock = ABControllerMock()
+ uut = SessionManager(None, abControllerMock)
+
+ for i, ab in enumerate(abLimits):
+ uut.addLimits(ab[0], ab[1])
+ assert abControllerMock.limits["current"][i] == ab
+
+def test_loadSession():
+ playlistMock = PlaylistMock()
+ abControllerMock = ABControllerMock()
+ uut = SessionManager(playlistMock, abControllerMock)
+
+ sessionFile = MockFile(dumps(testSession))
+ uut.loadSession(sessionFile)
+
+ for i, entry in enumerate(testSession):
+ expectedSong = entry["path"]
+ expectedLimits = entry["ab_limits"]
+ loadedSong = playlistMock.songs[i]
+ loadedLimits = abControllerMock.limits.get(expectedSong)
+
+ assert loadedSong == expectedSong
+ assert loadedLimits == expectedLimits
+
+def test_saveSession():
+ playlistMock = PlaylistMock()
+ abControllerMock = ABControllerMock()
+ uut = SessionManager(playlistMock, abControllerMock)
+
+ for i, entry in enumerate(testSession):
+ song = entry["path"]
+ playlistMock.addSong(song)
+
+ abLimits = entry["ab_limits"]
+ if abLimits is not None:
+ for l in abLimits:
+ abControllerMock.addLimits(l[0], l[1], song)
+
+ sessionFile = MockFile()
+ uut.saveSession(sessionFile)
+
+ savedSession = loads(sessionFile.read())
+ assert savedSession == testSession
+
+def test_loadAndSaveEmptySession():
+ playlistMock = PlaylistMock()
+ abControllerMock = ABControllerMock()
+ uut = SessionManager(playlistMock, abControllerMock)
+
+ sessionFile = MockFile()
+
+ uut.saveSession(sessionFile)
+ assert loads(sessionFile.read()) == list()
+
+ uut.loadSession(sessionFile)
+ assert playlistMock.getSongs() == list()
+ assert abControllerMock.getLimits() == dict()