# Copyright 2020 (c) Anna Schumaker. from lib import publisher from gi.repository import GObject from . import tags from . import track import datetime import pathlib import unittest test_tracks = pathlib.Path("./data/Test Album") class FakeLibrary: def __init__(self): self.name = test_tracks class TestTrack(unittest.TestCase): def setUp(self): tags.reset() self.lib = FakeLibrary() def tearDown(self): tags.reset() def test_track_init(self): trak = track.Track(1, test_tracks / "01 - Test Track.ogg", self.lib) self.assertEqual(trak.trackid, 1) self.assertEqual(trak.filepath(), test_tracks / "01 - Test Track.ogg") self.assertIsInstance(trak, GObject.Object) def test_track_album(self): trak = track.Track(1, test_tracks / "01 - Test Track.ogg", self.lib) artist = trak.artist self.assertEqual(trak.album, tags.Album[artist, "Test Album"]) self.assertEqual(trak["album"], "Test Album") def test_track_artist(self): trak = track.Track(1, test_tracks / "01 - Test Track.ogg", self.lib) self.assertEqual(trak.artist, tags.Artist["Test Artist"]) self.assertEqual(trak["artist"], "Test Artist") self.assertEqual(trak.artist.sort, "artist, test") trak2 = track.Track(2, test_tracks / "02 - Test {Disc 2}.ogg", self.lib) self.assertEqual(trak2.artist, tags.Artist["Test Album Artist"]) self.assertEqual(trak2.artist.sort, "album artist, test") def test_track_decade(self): trak = track.Track(1, test_tracks / "01 - Test Track.ogg", self.lib) self.assertEqual(trak.decade, tags.Decade["2010s"]) self.assertEqual(trak["decade"], "2010s") def test_track_discnumber(self): trak = track.Track(1, test_tracks / "01 - Test Track.ogg", self.lib) self.assertEqual(trak.discnumber, 1) self.assertEqual(trak["discnumber"], "01") def test_track_filepath(self): trak = track.Track(1, test_tracks / "01 - Test Track.ogg", self.lib) self.assertEqual(trak.path, pathlib.Path("01 - Test Track.ogg")) self.assertEqual(trak.filepath(), test_tracks / "01 - Test Track.ogg") def test_track_genres(self): trak = track.Track(1, test_tracks / "02 - Test {Disc 2}.ogg", self.lib) genlist = [ tags.Genre["Test"], tags.Genre["Genre"], tags.Genre["List"] ] self.assertEqual(trak.genres, genlist) self.assertEqual(trak["genres"], "Test, Genre, List") def test_track_length(self): trak = track.Track(1, test_tracks / "01 - Test Track.ogg", self.lib) self.assertEqual(trak.length, 10) self.assertEqual(trak["length"], "0:10") trak.length = 61 self.assertEqual(trak["length"], "1:01") trak.length = 3 self.assertEqual(trak["length"], "0:03") def test_track_played(self): trak = track.Track(1, test_tracks / "01 - Test Track.ogg", self.lib) trak.playcount = 0 trak.lastplayed = None self.assertEqual(trak["playcount"], "0") self.assertEqual(trak["lastplayed"], "Never") trak.played() self.assertEqual(trak.playcount, 1) self.assertEqual(trak.lastplayed.date(), datetime.date.today()) self.assertEqual(trak["playcount"], "1") #self.assertEqual(trak["lastplayed"], str(datetime.date.today())) trak.played() self.assertEqual(trak.playcount, 2) self.assertEqual(trak["playcount"], "2") def test_track_title(self): trak = track.Track(1, test_tracks / "01 - Test Track.ogg", self.lib) self.assertEqual(trak.title, "Test Track") self.assertEqual(trak["title"], "Test Track") def test_track_tracknumber(self): trak = track.Track(1, test_tracks / "01 - Test Track.ogg", self.lib) self.assertEqual(trak.tracknumber, 1) self.assertEqual(trak["tracknumber"], "1-01") trak.tracknumber = 10 self.assertEqual(trak["tracknumber"], "1-10") def test_track_year(self): trak = track.Track(1, test_tracks / "01 - Test Track.ogg", self.lib) self.assertEqual(trak.year, tags.Year[trak.decade, "2019"]) self.assertEqual(trak["year"], "2019") trak2 = track.Track(2, test_tracks / "02 - Test {Disc 2}.ogg", self.lib) self.assertEqual(trak2.year, tags.Year[trak2.decade, "2019"]) self.assertEqual(trak2["year"], "2019") def test_track_playlists(self): trak = track.Track(1, test_tracks / "01 - Test Track.ogg", self.lib) default = [ tags.User["Collection"], tags.User["New Tracks"] ] self.assertEqual(trak.playlists, default) trak.add_to_playlist("Test") self.assertEqual(trak.playlists, default + [ tags.User["Test"] ]) trak.remove_from_playlist("Test") self.assertEqual(trak.playlists, default) self.assertEqual(len(tags.User["Test"]), 0) def test_track_about_to_remove(self): trak = track.Track(1, test_tracks / "01 - Test Track.ogg", self.lib) trak.about_to_remove() self.assertEqual(len(tags.Artist), 0) self.assertEqual(len(tags.Album), 0) self.assertEqual(len(tags.Genre), 0) self.assertEqual(len(tags.Decade), 0) self.assertEqual(len(tags.Year), 0) self.assertEqual(len(tags.User["Collection"]), 0) self.assertEqual(len(tags.User["New Tracks"]), 0) def test_track_state(self): trak = track.Track(1, test_tracks / "01 - Test Track.ogg", self.lib) trak.add_to_playlist("Starred") trak.add_to_playlist("Previous") state = trak.__getstate__() self.assertEqual(state["artist"], "Test Artist") self.assertEqual(state["album"], "Test Album") self.assertEqual(state["genres"], [ "Test" ]) self.assertEqual(state["decade"], "2010s") self.assertEqual(state["year"], "2019") self.assertEqual(state["playlists"], [ "Collection", "Starred" ]) tags.Artist["Test Artist"].tracks = [ 1 ] tags.Album[trak.artist, "Test Album"].tracks = [ 1 ] tags.Genre["Test"].tracks = [ 1 ] tags.Decade["2010s"].tracks = [ 1 ] tags.Year[trak.decade, "2019"].tracks = [ 1 ] tags.User["Collection"].tracks = [ 1 ] tags.User["Starred"].tracks = [ 1 ] trak.__dict__.clear() trak.__setstate__(state) trak.__set_tags__() self.assertEqual(trak.artist, tags.Artist["Test Artist"]) self.assertEqual(trak.album, tags.Album[trak.artist, "Test Album"]) self.assertEqual(trak.genres, [ tags.Genre["Test"] ]) self.assertEqual(trak.decade, tags.Decade["2010s"]) self.assertEqual(trak.year, tags.Year[trak.decade, "2019"]) self.assertEqual(trak.playlists, [ tags.User["Collection"], tags.User["Starred"] ]) self.assertEqual(tags.Artist["Test Artist"].tracks, [ trak ]) self.assertEqual(tags.Album[trak.artist, "Test Album"].tracks, [ trak ]) self.assertEqual(tags.Genre["Test"].tracks, [ trak ]) self.assertEqual(tags.Decade["2010s"].tracks, [ trak ]) self.assertEqual(tags.Year[trak.decade, "2019"].tracks, [ trak ]) self.assertEqual(tags.User["Collection"].tracks, [ trak ]) self.assertEqual(tags.User["Starred"].tracks, [ trak ])