# 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"])