# Copyright 2021 (c) Anna Schumaker. import datetime import db import pathlib import sqlite3 import unittest from gi.repository import GObject class TestTrackTable(unittest.TestCase): def setUp(self): db.reset() def test_track_table_init(self): self.assertIsInstance(db.track.Table, db.track.TrackTable) db.sql.execute("SELECT trackid,libraryid,artistid,albumid,discid,decadeid,yearid FROM tracks") db.sql.execute("SELECT number,playcount,lastplayed,length,title,path FROM tracks") def test_track_table_insert(self): library = db.library.Table.find(pathlib.Path("/a/b/c")) artist = db.artist.Table.find("Test Artist", "test artist") album = db.album.Table.find(artist, "Test Album") disc = db.disc.Table.find(album, 1, None) decade = db.decade.Table.find(2020) year = db.year.Table.insert(decade, 2021) track = db.track.Table.insert(library, artist, album, disc, decade, year, 1, 1.234, "Test Title", pathlib.Path("/a/b/c/d.efg")) self.assertIsInstance(track, db.track.Track) self.assertIsInstance(track, db.objects.Row) self.assertEqual(track.library, library) self.assertEqual(track.artist, artist) self.assertEqual(track.album, album) self.assertEqual(track.disc, disc) self.assertEqual(track.decade, decade) self.assertEqual(track.year, year) self.assertEqual(track.number, 1) self.assertEqual(track.playcount, 0) self.assertEqual(track.lastplayed, None) self.assertEqual(track.length, 1.234) self.assertEqual(track.title, "Test Title") self.assertEqual(track.path, pathlib.Path("/a/b/c/d.efg")) with self.assertRaises(sqlite3.IntegrityError): db.track.Table.insert(library, artist, album, disc, decade, year, 1, 1.234, "Test Title", pathlib.Path("/a/b/c/d.efg")) def test_track_table_delete(self): track = db.make_fake_track(1, 1.234, "Test Title", "/a/b/c/d.efg") genre = db.genre.Table.find("Test Genre") playlist = db.user.Table.find("Test Playlist") db.genre.Map.insert(genre, track) db.user.Map.insert(playlist, track) db.user.TempMap.insert(playlist, track) db.track.Table.delete(track) self.assertIsNone(db.track.Table.lookup(pathlib.Path("/a/b/c/d.efg"))) self.assertEqual(db.genre.Map.lookup_tracks(genre), [ ]) self.assertEqual(db.user.Map.lookup_tracks(playlist), [ ]) self.assertEqual(db.user.TempMap.lookup_tracks(playlist), [ ]) def test_track_table_get(self): track = db.make_fake_track(1, 1.234, "Test Title", "/a/b/c/d.efg") self.assertEqual(db.track.Table.get(1), track) self.assertIsNone(db.track.Table.get(2)) def test_track_table_lookup(self): track = db.make_fake_track(1, 1.234, "Test Title", "/a/b/c/d.efg") self.assertEqual(db.track.Table.lookup(pathlib.Path("/a/b/c/d.efg")), track) self.assertIsNone(db.library.Table.lookup(pathlib.Path("/a/b/d/h.ijk"))) def test_track_table_find(self): with self.assertRaises(NotImplementedError): db.track.Table.find(pathlib.Path("/a/b/c/d.efg")) def test_track_played(self): track = db.make_fake_track(1, 1.234, "Test Title", "/a/b/c/d.efg") now = datetime.datetime.now() yesterday = datetime.date.today() - datetime.timedelta(days=1) track.played() self.assertEqual(track.playcount, 1) self.assertEqual(track.lastplayed.replace(microsecond=0), now.replace(microsecond=0)) track.last_played(4, yesterday) self.assertEqual(track.playcount, 4) self.assertEqual(track.lastplayed.replace(microsecond=0), datetime.datetime.combine(yesterday, datetime.time())) track.last_played(5, now) self.assertEqual(track.playcount, 5) self.assertEqual(track.lastplayed, now)