387 lines
16 KiB
Python
387 lines
16 KiB
Python
# Copyright 2021 (c) Anna Schumaker.
|
|
import db
|
|
import sqlite3
|
|
import unittest
|
|
from gi.repository import GObject
|
|
from . import sql
|
|
|
|
class TestCollection(unittest.TestCase):
|
|
def track_added(self, plist, added):
|
|
self.added = added
|
|
|
|
def track_removed(self, plist, removed, adjusted_current):
|
|
self.removed = (removed, adjusted_current)
|
|
|
|
def refreshed(self, plist):
|
|
self.refreshed = True
|
|
|
|
def setUp(self): db.reset()
|
|
|
|
def test_init(self):
|
|
collection = db.user.Table.find("Collection")
|
|
self.assertIsInstance(collection, db.playlist.Playlist)
|
|
self.assertIsInstance(collection, db.user.Collection)
|
|
self.assertEqual(collection.name, "Collection")
|
|
self.assertEqual(collection.icon_name, "media-playback-start")
|
|
self.assertTrue(collection.plist_state.loop)
|
|
|
|
def test_tracks(self):
|
|
collection = db.user.Table.find("Collection")
|
|
collection.connect("track-added", self.track_added)
|
|
self.assertEqual(collection.get_n_tracks(), 0)
|
|
self.assertEqual(collection.get_tracks(), [ ])
|
|
|
|
track = db.make_fake_track(1, 1, "Test Track", "/a/b/c/1.ogg")
|
|
self.assertEqual(collection.get_n_tracks(), 1)
|
|
self.assertEqual(collection.get_track(0), track)
|
|
self.assertEqual(collection.get_tracks(), [ track ])
|
|
self.assertEqual(collection.get_track_index(track), 0)
|
|
self.assertEqual(self.added, track)
|
|
|
|
collection.connect("track-removed", self.track_removed)
|
|
db.track.Table.delete(track)
|
|
self.assertEqual(collection.get_tracks(), [ ])
|
|
self.assertEqual(self.removed, (track, False))
|
|
|
|
def test_library_enabled(self):
|
|
collection = db.user.Table.find("Collection")
|
|
track1 = db.make_fake_track(1, 1, "Test Track 1", "/a/b/c/1.ogg")
|
|
track2 = db.make_fake_track(2, 2, "Test Track 2", "/a/b/c/2.ogg")
|
|
self.assertEqual(collection.get_n_tracks(), 2)
|
|
self.assertEqual(collection.get_tracks(), [ track1, track2 ])
|
|
collection.connect("refreshed", self.refreshed)
|
|
|
|
track1.library.enabled = False
|
|
self.assertEqual(collection.get_n_tracks(), 0)
|
|
self.assertEqual(collection.get_tracks(), [ ])
|
|
self.assertTrue(self.refreshed)
|
|
|
|
self.refreshed = None
|
|
track1.library.enabled = True
|
|
self.assertEqual(collection.get_n_tracks(), 2)
|
|
self.assertEqual(collection.get_tracks(), [ track1, track2 ])
|
|
self.assertTrue(self.refreshed)
|
|
|
|
|
|
class TestFavorites(unittest.TestCase):
|
|
def track_added(self, plist, added):
|
|
self.added = added
|
|
|
|
def track_removed(self, plist, removed, adjusted_current):
|
|
self.removed = (removed, False)
|
|
|
|
def setUp(self): db.reset()
|
|
|
|
def test_init(self):
|
|
favorites = db.user.Table.find("Favorites")
|
|
self.assertIsInstance(favorites, db.playlist.MappedPlaylist)
|
|
self.assertIsInstance(favorites, db.user.UserPlaylist)
|
|
self.assertEqual(favorites.name, "Favorites")
|
|
self.assertEqual(favorites.icon_name, "emmental-favorites")
|
|
self.assertEqual(favorites.map_table, "playlist_map")
|
|
self.assertFalse(favorites.plist_state.loop)
|
|
self.assertTrue(favorites.can_add_remove_tracks())
|
|
|
|
def test_add_remove_track(self):
|
|
favorites = db.user.Table.find("Favorites")
|
|
track = db.make_fake_track(1, 1, "Test Track", "/a/b/c/1.ogg")
|
|
favorites.connect("track-added", self.track_added)
|
|
self.assertEqual(favorites.get_n_tracks(), 0)
|
|
self.assertEqual(favorites.get_tracks(), [ ])
|
|
|
|
self.assertTrue(favorites.add_track(track))
|
|
self.assertFalse(favorites.add_track(track))
|
|
self.assertEqual(favorites.get_n_tracks(), 1)
|
|
self.assertEqual(favorites.get_track(0), track)
|
|
self.assertEqual(favorites.get_tracks(), [ track ])
|
|
self.assertEqual(favorites.get_track_index(track), 0)
|
|
self.assertEqual(self.added, track)
|
|
|
|
favorites.connect("track-removed", self.track_removed)
|
|
self.assertTrue(favorites.remove_track(track))
|
|
self.assertFalse(favorites.remove_track(track))
|
|
self.assertEqual(favorites.get_n_tracks(), 0)
|
|
self.assertEqual(favorites.get_tracks(), [ ])
|
|
self.assertEqual(self.removed, (track, False))
|
|
|
|
|
|
class TestNewTracks(unittest.TestCase):
|
|
def track_added(self, plist, added):
|
|
self.added = added
|
|
|
|
def track_removed(self, plist, removed, adjusted_current):
|
|
self.removed = (removed, adjusted_current)
|
|
|
|
def setUp(self): db.reset()
|
|
|
|
def test_init(self):
|
|
new = db.user.Table.find("New Tracks")
|
|
self.assertIsInstance(new, db.playlist.MappedPlaylist)
|
|
self.assertIsInstance(new, db.user.UserPlaylist)
|
|
self.assertEqual(new.name, "New Tracks")
|
|
self.assertEqual(new.icon_name, "starred")
|
|
self.assertEqual(new.map_table, "temp_playlist_map")
|
|
self.assertFalse(new.plist_state.loop)
|
|
self.assertFalse(new.can_add_remove_tracks())
|
|
|
|
def test_add_remove_track(self):
|
|
new = db.user.Table.find("New Tracks")
|
|
new.connect("track-added", self.track_added)
|
|
self.assertEqual(new.get_n_tracks(), 0)
|
|
self.assertEqual(new.get_tracks(), [ ])
|
|
|
|
track = db.make_fake_track(1, 1, "Test Track", "/a/b/c/1.ogg")
|
|
self.assertEqual(new.get_n_tracks(), 1)
|
|
self.assertEqual(new.get_track(0), track)
|
|
self.assertEqual(new.get_tracks(), [ track ])
|
|
self.assertEqual(new.get_track_index(track), 0)
|
|
self.added = track
|
|
|
|
new.connect("track-removed", self.track_removed)
|
|
self.assertTrue(new.remove_track(track))
|
|
self.assertFalse(new.remove_track(track))
|
|
self.assertEqual(new.get_n_tracks(), 0)
|
|
self.assertEqual(new.get_tracks(), [ ])
|
|
self.assertEqual(self.removed, (track, False))
|
|
|
|
|
|
class TestPrevious(unittest.TestCase):
|
|
def track_added(self, plist, added):
|
|
self.added = added
|
|
|
|
def track_removed(self, plist, removed, adjusted_current):
|
|
self.removed = (removed, adjusted_current)
|
|
|
|
def setUp(self): db.reset()
|
|
|
|
def test_init(self):
|
|
previous = db.user.Table.find("Previous")
|
|
self.assertIsInstance(previous, db.user.UserPlaylist)
|
|
self.assertIsInstance(previous, db.user.Previous)
|
|
self.assertEqual(previous.name, "Previous")
|
|
self.assertEqual(previous.icon_name, "media-skip-backward")
|
|
self.assertEqual(previous.map_table, "temp_playlist_map")
|
|
self.assertEqual(previous.plist_state.sort, [ "temp_playlist_map.rowid DESC" ])
|
|
self.assertFalse(previous.plist_state.loop)
|
|
self.assertFalse(previous.can_add_remove_tracks())
|
|
|
|
def test_add_remove_track(self):
|
|
previous = db.user.Table.find("Previous")
|
|
track1 = db.make_fake_track(1, 1, "Test Track", "/a/b/c/1.ogg")
|
|
track2 = db.make_fake_track(2, 2, "Test Track 2", "/a/b/c/2.ogg")
|
|
previous.connect("track-added", self.track_added)
|
|
self.assertEqual(previous.get_n_tracks(), 0)
|
|
self.assertEqual(previous.get_tracks(), [ ])
|
|
|
|
self.assertTrue(previous.add_track(track1))
|
|
self.assertEqual(previous.get_n_tracks(), 1)
|
|
self.assertEqual(previous.get_track(0), track1)
|
|
self.assertEqual(previous.get_tracks(), [ track1 ])
|
|
self.assertEqual(previous.get_track_index(track1), 0)
|
|
self.assertEqual(self.added, track1)
|
|
|
|
self.assertTrue(previous.add_track(track2))
|
|
self.assertEqual(previous.get_n_tracks(), 2)
|
|
self.assertEqual(previous.get_track(0), track2)
|
|
self.assertEqual(previous.get_track(1), track1)
|
|
self.assertEqual(previous.get_tracks(), [ track2, track1 ])
|
|
self.assertEqual(previous.get_track_index(track2), 0)
|
|
self.assertEqual(previous.get_track_index(track1), 1)
|
|
self.assertEqual(self.added, track2)
|
|
|
|
previous.connect("track-removed", self.track_removed)
|
|
self.assertTrue(previous.add_track(track1))
|
|
self.assertEqual(previous.get_n_tracks(), 2)
|
|
self.assertEqual(previous.get_track(0), track1)
|
|
self.assertEqual(previous.get_track(1), track2)
|
|
self.assertEqual(previous.get_tracks(), [ track1, track2 ])
|
|
self.assertEqual(previous.get_track_index(track1), 0)
|
|
self.assertEqual(previous.get_track_index(track2), 1)
|
|
self.assertEqual(self.removed, (track1, False))
|
|
self.assertEqual(self.added, track1)
|
|
|
|
self.assertTrue(previous.remove_track(track1))
|
|
self.assertFalse(previous.remove_track(track1))
|
|
self.assertEqual(previous.get_n_tracks(), 1)
|
|
self.assertEqual(previous.get_tracks(), [ track2 ])
|
|
self.assertEqual(previous.get_track_index(track2), 0)
|
|
self.assertEqual(self.removed, (track1, True))
|
|
|
|
def test_previous_track(self):
|
|
previous = db.user.Table.find("Previous")
|
|
self.assertEqual(previous.get_property("current"), -1)
|
|
|
|
previous.add_track(db.make_fake_track(1, 1, "Track 1", "/a/b/c/1.ogg"))
|
|
self.assertEqual(previous.get_property("current"), 0)
|
|
previous.add_track(db.make_fake_track(2, 2, "Track 2", "/a/b/c/2.ogg"))
|
|
self.assertEqual(previous.get_property("current"), 0)
|
|
previous.add_track(db.make_fake_track(3, 3, "Track 3", "/a/b/c/3.ogg"))
|
|
self.assertEqual(previous.get_property("current"), 0)
|
|
|
|
self.assertEqual(previous.previous_track(), previous.get_track(1))
|
|
self.assertEqual(previous.previous_track(), previous.get_track(2))
|
|
self.assertIsNone(previous.previous_track())
|
|
self.assertIsNone(previous.previous_track())
|
|
|
|
def test_next_track(self):
|
|
previous = db.user.Table.find("Previous")
|
|
previous.add_track(db.make_fake_track(1, 1, "Track 1", "/a/b/c/1.ogg"))
|
|
previous.add_track(db.make_fake_track(2, 2, "Track 2", "/a/b/c/2.ogg"))
|
|
previous.add_track(db.make_fake_track(3, 3, "Track 3", "/a/b/c/3.ogg"))
|
|
previous.current = 2
|
|
|
|
self.assertEqual(previous.next_track(), previous.get_track(1))
|
|
self.assertEqual(previous.current, 1)
|
|
self.assertEqual(previous.next_track(), previous.get_track(0))
|
|
self.assertEqual(previous.current, 0)
|
|
self.assertIsNone(previous.next_track())
|
|
self.assertEqual(previous.current, -1)
|
|
self.assertIsNone(previous.next_track())
|
|
self.assertEqual(previous.current, -1)
|
|
|
|
|
|
class TestQueuedTracks(unittest.TestCase):
|
|
def track_added(self, plist, added):
|
|
self.added = added
|
|
|
|
def track_removed(self, plist, removed, adjusted_current):
|
|
self.removed = (removed, adjusted_current)
|
|
|
|
def setUp(self): db.reset()
|
|
|
|
def test_init(self):
|
|
queued = db.user.Table.find("Queued Tracks")
|
|
self.assertIsInstance(queued, db.user.UserPlaylist)
|
|
self.assertIsInstance(queued, db.user.QueuedTracks)
|
|
self.assertEqual(queued.name, "Queued Tracks")
|
|
self.assertEqual(queued.icon_name, "media-skip-forward")
|
|
self.assertEqual(queued.map_table, "playlist_map")
|
|
self.assertEqual(queued.plist_state.sort, [ "playlist_map.rowid ASC" ])
|
|
self.assertFalse(queued.plist_state.loop)
|
|
self.assertTrue(queued.can_add_remove_tracks())
|
|
|
|
def test_add_remove_track(self):
|
|
queued = db.user.Table.find("Queued Tracks")
|
|
track = db.make_fake_track(1, 1, "Test Track", "/a/b/c/1.ogg")
|
|
queued.connect("track-added", self.track_added)
|
|
self.assertEqual(queued.get_n_tracks(), 0)
|
|
self.assertEqual(queued.get_tracks(), [ ])
|
|
|
|
self.assertTrue(queued.add_track(track))
|
|
self.assertFalse(queued.add_track(track))
|
|
self.assertEqual(queued.get_n_tracks(), 1)
|
|
self.assertEqual(queued.get_track(0), track)
|
|
self.assertEqual(queued.get_tracks(), [ track ])
|
|
self.assertEqual(queued.get_track_index(track), 0)
|
|
self.assertEqual(self.added, track)
|
|
|
|
queued.connect("track-removed", self.track_removed)
|
|
self.assertTrue(queued.remove_track(track))
|
|
self.assertFalse(queued.remove_track(track))
|
|
self.assertEqual(queued.get_n_tracks(), 0)
|
|
self.assertEqual(queued.get_tracks(), [ ])
|
|
self.assertEqual(self.removed, (track, False))
|
|
|
|
def test_next_track(self):
|
|
queued = db.user.Table.find("Queued Tracks")
|
|
queued.add_track(db.make_fake_track(1, 1, "Test 1", "/a/b/c/1.ogg"))
|
|
queued.add_track(db.make_fake_track(2, 2, "Test 2", "/a/b/c/2.ogg"))
|
|
queued.add_track(db.make_fake_track(3, 3, "Test 3", "/a/b/c/3.ogg"))
|
|
|
|
self.assertEqual(queued.next_track(), db.track.Table.lookup("/a/b/c/1.ogg"))
|
|
self.assertEqual(queued.get_n_tracks(), 2)
|
|
self.assertEqual(queued.next_track(), db.track.Table.lookup("/a/b/c/2.ogg"))
|
|
self.assertEqual(queued.get_n_tracks(), 1)
|
|
self.assertEqual(queued.next_track(), db.track.Table.lookup("/a/b/c/3.ogg"))
|
|
self.assertEqual(queued.get_n_tracks(), 0)
|
|
self.assertIsNone(queued.next_track())
|
|
|
|
|
|
class TestUserPlaylist(unittest.TestCase):
|
|
def track_added(self, plist, added):
|
|
self.added = added
|
|
|
|
def track_removed(self, plist, removed, adjusted_current):
|
|
self.removed = (removed, adjusted_current)
|
|
|
|
def setUp(self): db.reset()
|
|
|
|
def test_init(self):
|
|
plist = db.user.Table.find("Test Playlist")
|
|
self.assertIsInstance(plist, db.playlist.MappedPlaylist)
|
|
self.assertIsInstance(plist, db.user.UserPlaylist)
|
|
self.assertEqual(plist.name, "Test Playlist")
|
|
self.assertEqual(plist.icon_name, "audio-x-generic")
|
|
self.assertEqual(plist.map_table, "playlist_map")
|
|
self.assertFalse(plist.plist_state.loop)
|
|
self.assertTrue(plist.can_add_remove_tracks())
|
|
|
|
def test_delete(self):
|
|
track = db.make_fake_track(1, 1, "Test Track", "/a/b/c/1.ogg")
|
|
plist = db.user.Table.find("Test Playlist")
|
|
plist.add_track(track)
|
|
plist.delete()
|
|
self.assertEqual(plist.get_n_tracks(), 0)
|
|
self.assertIsNone(db.user.Table.lookup("Test Playlist"))
|
|
|
|
def test_add_remove_track(self):
|
|
plist = db.user.Table.find("Test Playlist")
|
|
track = db.make_fake_track(1, 1, "Test Track", "/a/b/c/1.ogg")
|
|
plist.connect("track-added", self.track_added)
|
|
self.assertEqual(plist.get_n_tracks(), 0)
|
|
self.assertEqual(plist.get_tracks(), [ ])
|
|
|
|
self.assertTrue(plist.add_track(track))
|
|
self.assertFalse(plist.add_track(track))
|
|
self.assertEqual(plist.get_n_tracks(), 1)
|
|
self.assertEqual(plist.get_track(0), track)
|
|
self.assertEqual(plist.get_tracks(), [ track ])
|
|
self.assertEqual(plist.get_track_index(track), 0)
|
|
self.assertEqual(self.added, track)
|
|
|
|
plist.connect("track-removed", self.track_removed)
|
|
self.assertTrue(plist.remove_track(track))
|
|
self.assertFalse(plist.remove_track(track))
|
|
self.assertEqual(plist.get_n_tracks(), 0)
|
|
self.assertEqual(plist.get_tracks(), [ ])
|
|
self.assertEqual(self.removed, (track, False))
|
|
|
|
|
|
class TestUserTable(unittest.TestCase):
|
|
def setUp(self):
|
|
db.reset()
|
|
|
|
def test_init(self):
|
|
table = db.user.UserTable()
|
|
self.assertIsInstance(table, db.playlist.Model)
|
|
self.assertEqual(table.table, "playlists")
|
|
self.assertEqual(table.order, "sort")
|
|
|
|
self.assertIsInstance(db.user.Table, db.user.UserTable)
|
|
db.sql.execute("SELECT playlistid,plstateid,name,sort FROM playlists")
|
|
|
|
def test_insert(self):
|
|
table = db.user.UserTable()
|
|
playlist = table.find("Test Playlist")
|
|
|
|
self.assertIsInstance(playlist, db.user.UserPlaylist)
|
|
self.assertEqual(playlist._name, "Test Playlist")
|
|
self.assertEqual(playlist._rowkey, "playlistid")
|
|
|
|
with self.assertRaises(sqlite3.IntegrityError):
|
|
db.user.Table.insert("Test Playlist")
|
|
|
|
def test_lookup(self):
|
|
playlist = db.user.Table.insert("Test Playlist")
|
|
self.assertEqual(db.user.Table.lookup("Test Playlist"), playlist)
|
|
self.assertIsNone(db.user.Table.lookup("none"))
|
|
|
|
def test_default_playlists(self):
|
|
table = db.user.UserTable()
|
|
self.assertEqual(table.get_n_items(), 5)
|
|
self.assertEqual(table.get_item(0).name, "Collection")
|
|
self.assertEqual(table.get_item(1).name, "Favorites")
|
|
self.assertEqual(table.get_item(2).name, "New Tracks")
|
|
self.assertEqual(table.get_item(3).name, "Previous")
|
|
self.assertEqual(table.get_item(4).name, "Queued Tracks")
|