emmental/db/test_playlist.py
Anna Schumaker 0fd1069484 db: Add a PlaylistMap
And create both permanent and temporary maps for tracks. The temporary
map is intended to be used for the New Tracks and Previous playlists,
since we don't store the state across restarts.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-08-23 13:17:45 -04:00

141 lines
5.6 KiB
Python

# Copyright 2021 (c) Anna Schumaker.
import db
import sqlite3
import unittest
from gi.repository import GObject
expected = [ (1, "Collection", "collection"),
(2, "Favorites", "favorites"),
(3, "New Tracks", "new tracks"),
(4, "Previous", "previous"),
(5, "Queued Tracks", "queued tracks") ]
class TestPlaylistTable(unittest.TestCase):
def setUp(self):
db.reset()
def test_playlist_table_init(self):
self.assertIsInstance(db.playlist.Table, db.playlist.PlaylistTable)
self.assertEqual(db.playlist.Default, [ "Collection", "Favorites", "New Tracks",
"Previous", "Queued Tracks" ])
rows = db.execute("SELECT playlistid,name,sort "
"FROM playlists").fetchall()
self.assertEqual(tuple(rows[0]), expected[0])
self.assertEqual(tuple(rows[1]), expected[1])
self.assertEqual(tuple(rows[2]), expected[2])
self.assertEqual(tuple(rows[3]), expected[3])
self.assertEqual(tuple(rows[4]), expected[4])
def test_playlist_table_insert(self):
playlist = db.playlist.Table.insert("Test Playlist")
self.assertIsInstance(playlist, db.playlist.Playlist)
self.assertIsInstance(playlist, db.objects.Tag)
self.assertEqual(playlist.name, "Test Playlist")
self.assertEqual(playlist.sort, "test playlist")
with self.assertRaises(sqlite3.IntegrityError):
db.playlist.Table.insert("Test Playlist")
def test_playlist_table_delete(self):
playlist = db.playlist.Table.find("Test Playlist")
track = db.make_fake_track(1, 1.234, "Test Title", "/a/b.cde")
db.playlist.Map.insert(playlist, track)
db.playlist.TempMap.insert(playlist, track)
db.playlist.Table.delete(playlist)
self.assertIsNone(db.playlist.Table.lookup("Test Playlist"))
self.assertEqual(db.playlist.Map.lookup_playlists(track), [ ])
self.assertEqual(db.playlist.TempMap.lookup_playlists(track), [ ])
def test_playlist_table_get(self):
playlist = db.playlist.Playlist(1)
self.assertEqual(db.playlist.Table.get(1), playlist)
self.assertIsNone(db.playlist.Table.get(6))
def test_playlist_table_lookup(self):
playlist = db.playlist.Table.insert("Test Playlist")
self.assertEqual(db.playlist.Table.lookup("Test Playlist"), playlist)
self.assertIsNone(db.playlist.Table.lookup("none"))
class TestPlaylistMap(unittest.TestCase):
def setUp(self):
db.reset()
def test_playlist_map_init(self):
self.assertIsInstance(db.playlist.Map, db.playlist.PlaylistMap)
self.assertIsInstance(db.playlist.TempMap, db.playlist.PlaylistMap)
self.assertEqual(db.playlist.Map.map_lhs, db.playlist.Playlist)
self.assertEqual(db.playlist.Map.map_rhs, db.track.Track)
self.assertFalse(db.playlist.Map.temporary)
self.assertTrue( db.playlist.TempMap.temporary)
db.execute("SELECT playlistid,trackid FROM playlist_map")
db.execute("SELECT playlistid,trackid FROM temp_playlist_map")
def test_playlist_map_insert(self):
track = db.make_fake_track(1, 1.234, "Test Title", "/a/b.cde")
collection = db.playlist.Table.find("Collection")
db.playlist.Map.insert(collection, track)
with self.assertRaises(sqlite3.IntegrityError):
db.playlist.Map.insert(collection, track)
def test_playlist_map_delete(self):
track = db.make_fake_track(1, 1.234, "Test Title", "/a/b.cde")
playlist = db.playlist.Table.find("Test Playlist")
db.playlist.Map.insert(playlist, track)
db.playlist.Map.delete(playlist, track)
self.assertEqual(db.playlist.Map.lookup_tracks(playlist), [ ])
def test_playlist_map_lookup_tracks(self):
track1 = db.make_fake_track(1, 1.234, "Test Title", "/a/b.cde")
track2 = db.make_fake_track(2, 2.345, "Test Title 2", "/a/c.def")
playlist = db.playlist.Table.find("Collection")
db.playlist.Map.insert(playlist, track1)
db.playlist.Map.insert(playlist, track2)
lookup_res = db.playlist.Map.lookup_tracks(playlist)
self.assertEqual(lookup_res, [ track1, track2 ])
def test_playlist_map_lookup_playlists(self):
track = db.make_fake_track(1, 1.234, "Test Title", "/a/b.cde")
collection = db.playlist.Table.find("Collection")
favorites = db.playlist.Table.find("Favorites")
db.playlist.Map.insert(collection, track)
db.playlist.Map.insert(favorites, track)
lookup_res = db.playlist.Map.lookup_playlists(track)
self.assertEqual(lookup_res, [ collection, favorites ])
def test_playlist_map_delete_track(self):
track = db.make_fake_track(1, 1.234, "Test Title", "/a/b.cde")
collection = db.playlist.Table.find("Collection")
favorites = db.playlist.Table.find("Favorites")
db.playlist.Map.insert(collection, track)
db.playlist.Map.insert(favorites, track)
db.playlist.Map.delete_track(track)
self.assertEqual(db.playlist.Map.lookup_playlists(track), [ ])
def test_playlist_map_delete_playlist(self):
track1 = db.make_fake_track(1, 1.234, "Test Title", "/a/b.cde")
track2 = db.make_fake_track(2, 2.345, "Test Title 2", "/a/c.def")
playlist = db.playlist.Table.find("Collection")
db.playlist.Map.insert(playlist, track1)
db.playlist.Map.insert(playlist, track2)
db.playlist.Map.delete_playlist(playlist)
self.assertEqual(db.playlist.Map.lookup_tracks(playlist), [ ])