139 lines
5.2 KiB
Python
139 lines
5.2 KiB
Python
# Copyright 2022 (c) Anna Schumaker
|
|
"""Tests our genre Gio.ListModel."""
|
|
import emmental.db
|
|
import tests.util
|
|
|
|
|
|
class TestGenreObject(tests.util.TestCase):
|
|
"""Tests our genre object."""
|
|
|
|
def setUp(self):
|
|
"""Set up common variables."""
|
|
tests.util.TestCase.setUp(self)
|
|
self.table = self.sql.genres
|
|
self.genre = emmental.db.genres.Genre(table=self.table, genreid=123,
|
|
propertyid=456, name="Genre")
|
|
|
|
def test_init(self):
|
|
"""Test that the Genre is set up properly."""
|
|
self.assertIsInstance(self.genre, emmental.db.playlist.Playlist)
|
|
self.assertEqual(self.genre.table, self.table)
|
|
self.assertEqual(self.genre.propertyid, 456)
|
|
self.assertEqual(self.genre.genreid, 123)
|
|
self.assertEqual(self.genre.primary_key, 123)
|
|
self.assertIsNone(self.genre.parent)
|
|
|
|
|
|
class TestGenreTable(tests.util.TestCase):
|
|
"""Tests our genre table."""
|
|
|
|
def setUp(self):
|
|
"""Set up common variables."""
|
|
tests.util.TestCase.setUp(self)
|
|
self.table = self.sql.genres
|
|
|
|
def test_init(self):
|
|
"""Test that the genre model is configured correctly."""
|
|
self.assertIsInstance(self.table, emmental.db.playlist.Table)
|
|
self.assertEqual(len(self.table), 0)
|
|
self.assertTrue(self.table.autodelete)
|
|
self.assertTrue(self.table.system_tracks)
|
|
|
|
def test_construct(self):
|
|
"""Test constructing a new genre playlist."""
|
|
genre = self.table.construct(genreid=1, propertyid=1, name="Genre")
|
|
self.assertIsInstance(genre, emmental.db.genres.Genre)
|
|
self.assertEqual(genre.table, self.table)
|
|
self.assertEqual(genre.propertyid, 1)
|
|
self.assertEqual(genre.genreid, 1)
|
|
self.assertEqual(genre.name, "Genre")
|
|
self.assertFalse(genre.active)
|
|
|
|
def test_create(self):
|
|
"""Test creating a genre playlist."""
|
|
genre = self.table.create("Test Genre")
|
|
self.assertIsInstance(genre, emmental.db.genres.Genre)
|
|
self.assertEqual(genre.name, "Test Genre")
|
|
self.assertEqual(genre.sort_order,
|
|
"albumartist, album, mediumno, number")
|
|
|
|
cur = self.sql("SELECT COUNT(name) FROM genres")
|
|
self.assertEqual(cur.fetchone()["COUNT(name)"], 1)
|
|
|
|
row = self.sql("""SELECT COUNT(*) FROM playlist_properties
|
|
WHERE propertyid=?""", genre.propertyid).fetchone()
|
|
self.assertEqual(row["COUNT(*)"], 1)
|
|
|
|
self.assertIsNone(self.table.create("Test Genre"))
|
|
|
|
def test_delete(self):
|
|
"""Test deleting a genre playlist."""
|
|
genre = self.table.create("Test Genre")
|
|
self.assertTrue(genre.delete())
|
|
self.assertIsNone(self.table.index(genre))
|
|
|
|
cur = self.sql("SELECT COUNT(name) FROM genres")
|
|
self.assertEqual(cur.fetchone()["COUNT(name)"], 0)
|
|
self.assertEqual(len(self.table), 0)
|
|
self.assertIsNone(self.table.get_item(0))
|
|
|
|
row = self.sql("""SELECT COUNT(*) FROM playlist_properties
|
|
WHERE propertyid=?""", genre.propertyid).fetchone()
|
|
self.assertEqual(row["COUNT(*)"], 0)
|
|
|
|
self.assertFalse(genre.delete())
|
|
|
|
def test_filter(self):
|
|
"""Test filtering a genre playlist."""
|
|
self.table.create("Genre 1")
|
|
self.table.create("Genre 2")
|
|
|
|
self.table.filter("*1", now=True)
|
|
self.assertSetEqual(self.table.get_filter().keys, {1})
|
|
self.table.filter("genre*", now=True)
|
|
self.assertSetEqual(self.table.get_filter().keys, {1, 2})
|
|
|
|
def test_get_sort_key(self):
|
|
"""Test the get_sort_key() function."""
|
|
genre = self.table.create("Genre 1")
|
|
self.assertTupleEqual(self.table.get_sort_key(genre),
|
|
(("genre", "1"), genre.genreid))
|
|
|
|
def test_load(self):
|
|
"""Test loading genres from the database."""
|
|
self.table.create("Genre 1")
|
|
self.table.create("Genre 2")
|
|
|
|
genres2 = emmental.db.genres.Table(self.sql)
|
|
self.assertEqual(len(genres2), 0)
|
|
|
|
genres2.load(now=True)
|
|
self.assertEqual(len(genres2), 2)
|
|
self.assertEqual(genres2.get_item(0).name, "Genre 1")
|
|
self.assertEqual(genres2.get_item(1).name, "Genre 2")
|
|
|
|
def test_lookup(self):
|
|
"""Test looking up genre playlists."""
|
|
genre = self.table.create("Test Genre")
|
|
self.assertEqual(self.table.lookup("Test Genre"), genre)
|
|
self.assertEqual(self.table.lookup("test genre"), genre)
|
|
self.assertIsNone(self.table.lookup("No Genre"))
|
|
|
|
def test_update(self):
|
|
"""Test updating genre attributes."""
|
|
genre = self.table.create("Test Genre")
|
|
genre.active = True
|
|
genre.loop = "Track"
|
|
genre.shuffle = True
|
|
genre.sort_order = "trackid"
|
|
|
|
row = self.sql("""SELECT active, loop, shuffle,
|
|
sort_order, current_trackid
|
|
FROM genres_view WHERE genreid=?""",
|
|
genre.genreid).fetchone()
|
|
self.assertTrue(row["active"])
|
|
self.assertEqual(row["loop"], "Track")
|
|
self.assertTrue(row["shuffle"])
|
|
self.assertEqual(row["sort_order"], "trackid")
|
|
self.assertIsNone(row["current_trackid"])
|