X-Git-Url: https://git.kaliko.me/?a=blobdiff_plain;f=tests%2Ftest_simadb.py;h=42e897d9126eded521fdde2470bc892b0337d2e8;hb=d81c669fc639184a61c7f9b514d179addbbddf17;hp=b71fa1baca973c13e8ac2e2e6581d1a62c0e68f1;hpb=9c754908e645834a53ce3906aac76a0aa92e98f4;p=mpd-sima.git diff --git a/tests/test_simadb.py b/tests/test_simadb.py index b71fa1b..42e897d 100644 --- a/tests/test_simadb.py +++ b/tests/test_simadb.py @@ -4,9 +4,9 @@ import datetime import unittest import os -from sima.lib.db import SimaDB +from sima.lib.simadb import SimaDB from sima.lib.track import Track -from sima.lib.meta import Album +from sima.lib.meta import Album, Artist, MetaContainer DEVOLT = { @@ -14,6 +14,7 @@ DEVOLT = { 'albumartist': 'Devolt', 'albumartistsort': 'Devolt', 'artist': 'Devolt', + 'genre': ['Rock'], 'date': '2011-12-01', 'disc': '1/1', 'file': 'music/Devolt/2011-Grey/03-Devolt - Crazy.mp3', @@ -28,7 +29,7 @@ DEVOLT = { 'track': '3/6'} DB_FILE = 'file::memory:?cache=shared' -KEEP_FILE = False # File db in file to ease debug +KEEP_FILE = True # File db in file to ease debug if KEEP_FILE: DB_FILE = '/dev/shm/unittest.sqlite' CURRENT = datetime.datetime.utcnow() @@ -69,12 +70,12 @@ class Test_00DB(Main): def test_01_add_track(self): trk = Track(**DEVOLT) trk_id = self.db.get_track(trk) - self.assertEqual(trk_id, self.db.get_track(trk), + self.assertEqual(trk_id, self.db.get_track(trk, add=False), 'Same track, same record') def test_02_history(self): # set records in the past to ease purging then - last = CURRENT - datetime.timedelta(hours=1) + last = CURRENT - datetime.timedelta(seconds=5) trk = Track(**DEVOLT) self.db.add_history(trk, date=last) self.db.add_history(trk, date=last) @@ -97,7 +98,8 @@ class Test_00DB(Main): # recent first, oldest last hist = list() for i in range(1, 5): # starts at 1 to ensure records are in the past - trk = Track(file=f'/foo/bar.{i}', name='{i}-baz', album='foolbum') + trk = Track(file=f'/foo/bar.{i}', name=f'{i}-baz', + album='foolbum', genre=f'{i}') hist.append(trk) last = CURRENT - datetime.timedelta(minutes=i) self.db.add_history(trk, date=last) @@ -145,9 +147,11 @@ class Test_00DB(Main): # trk03 = Track(file='03', **tr) self.db.add_history(trk03, CURRENT-datetime.timedelta(hours=1)) - # got multiple tracks, same artist, got artist history len == 1 + # got multiple tracks, same artist/album, got artist/album history len = 1 art_history = self.db.fetch_artists_history() + alb_history = self.db.fetch_albums_history() self.assertEqual(len(art_history), 1) + self.assertEqual(len(alb_history), 1) self.assertEqual(art_history, [trk01.Artist]) # Now add new artist to history @@ -164,7 +168,77 @@ class Test_00DB(Main): trk04.artist, trk03.artist], art_history) - def test_04_triggers(self): + def test_albums_history(self): + # set records in the past to ease purging then + last = CURRENT - datetime.timedelta(seconds=5) + track = { + 'album': 'album', 'title': 'title', + 'albumartist': 'albumartist', + 'artist': 'artist', + 'file': 'foo/bar.flac', + 'musicbrainz_albumartistid': 'd8e7e3e2-49ab-4f7c-b148-fc946d521f99', + 'musicbrainz_albumid': 'ea2ef2cf-59e1-443a-817e-9066e3e0be4b', + 'musicbrainz_artistid': 'd8e7e3e2-49ab-4f7c-b148-fc946d521f99',} + self.db.purge_history(duration=0) + self.db.add_history(Track(**track), last) + alb_history = self.db.fetch_albums_history() + alb = alb_history[0] + self.assertEqual(alb.Artist.name, track.get('albumartist')) + # Fetching Album history for "artist" should return "album" + artist = Artist(track.get('artist'), mbid=track.get('musicbrainz_artistid')) + alb_history = self.db.fetch_albums_history(artist) + self.assertTrue(alb_history) + # Falls back to album and MBID when albumartist and + # musicbrainz_albumartistid are not set + self.db.purge_history(duration=0) + track = { + 'album': 'no albumartist set', 'title': 'title', + 'artist': 'no album artist set', + 'file': 'bar/foo.flac', + 'musicbrainz_artistid': 'dddddddd-49ab-4f7c-b148-dddddddddddd',} + self.db.add_history(Track(**track), last) + alb_history = self.db.fetch_albums_history() + album = alb_history[0] + self.assertEqual(album.albumartist, track['artist']) + self.assertEqual(album.Artist.mbid, track['musicbrainz_artistid']) + + def test_04_filtering_history(self): + # Controls artist history filtering + for i in range(0, 5): + trk = Track(file=f'/foo/bar.{i}', name=f'{i}-baz', + artist=f'{i}-art', album=f'{i}-lbum') + last = CURRENT - datetime.timedelta(minutes=i) + self.db.add_history(trk, date=last) + if i == 5: # bounce latest record + self.db.add_history(trk, date=last) + art_history = self.db.fetch_artists_history() + # Already checked but to be sure, we should have 5 artists in history + self.assertEqual(len(art_history), 5) + for needle in ['4-art', Artist(name='4-art')]: + art_history = self.db.fetch_artists_history(needle=needle) + self.assertEqual(art_history, [needle]) + needle = Artist(name='not-art') + art_history = self.db.fetch_artists_history(needle=needle) + self.assertEqual(art_history, []) + # Controls artists history filtering + # for a list of Artist objects + needle_list = [Artist(name='3-art'), Artist(name='4-art')] + art_history = self.db.fetch_artists_history(needle=needle_list) + self.assertEqual(art_history, needle_list) + # for a MetaContainer + needle_meta = MetaContainer(needle_list) + art_history = self.db.fetch_artists_history(needle=needle_meta) + self.assertEqual(art_history, needle_list) + # for a list of string (Meta object handles Artist/str comparison) + art_history = self.db.fetch_artists_history(['3-art', '4-art']) + self.assertEqual(art_history, needle_list) + + # Controls album history filtering + needle = Artist(name='4-art') + alb_history = self.db.fetch_albums_history(needle=needle) + self.assertEqual(alb_history, [Album(name='4-lbum')]) + + def test_05_triggers(self): self.db.purge_history(duration=0) tracks_ids = list() # Add a first track @@ -204,10 +278,14 @@ class Test_00DB(Main): self.assertIn(('fooart',), artists) conn.close() + def test_06_add_album(self): + pass class Test_01BlockList(Main): def test_blocklist_addition(self): + trk = Track(file='/foo/bar/baz', name='title') + self.assertIs(self.db.get_bl_track(trk, add=False), None) tracks_ids = list() # Set 6 records, same album for i in range(1, 6): # starts at 1 to ensure records are in the past @@ -215,18 +293,31 @@ class Test_01BlockList(Main): albumartist='fooalbart', album='foolbum',) # Add track, save its DB id tracks_ids.append(self.db.get_track(trk)) - # set records in the past to ease purging then - last = CURRENT - datetime.timedelta(minutes=i) - self.db.add_history(trk, date=last) # Add to history if i == 1: self.db.get_bl_track(trk) + self.assertIsNot(self.db.get_bl_track(trk, add=False), None) if i == 2: - self.db.get_bl_track(trk) self.db.get_bl_album(Album(name=trk.album)) if i == 3: self.db.get_bl_artist(trk.Artist) + if i == 4: + self.assertIs(self.db.get_bl_track(trk, add=False), None) + - def test_blocklist_triggers(self): + def test_blocklist_triggers_00(self): + trk01 = Track(file='01', name='01', artist='artist A', album='album A') + blart01_id = self.db.get_bl_artist(trk01.Artist) + blalb01_id = self.db.get_bl_album(Album(name=trk01.album, mbid=trk01.musicbrainz_albumid)) + conn = self.db.get_database_connection() + self.db._remove_blocklist_id(blart01_id, with_connection=conn) + self.db._remove_blocklist_id(blalb01_id, with_connection=conn) + albums = conn.execute('SELECT albums.name FROM albums;').fetchall() + artists = conn.execute('SELECT artists.name FROM artists;').fetchall() + conn.close() + self.assertNotIn((trk01.album,), albums) + self.assertNotIn((trk01.artist,), artists) + + def test_blocklist_triggers_01(self): trk01 = Track(file='01', name='01', artist='artist A', album='album A') trk02 = Track(file='02', name='01', artist='artist A', album='album B') trk01_id = self.db.get_bl_track(trk01) @@ -254,5 +345,31 @@ class Test_01BlockList(Main): conn.close() +class Test_02Genre(Main): + + def test_genre(self): + conn = self.db.get_database_connection() + self.db.get_genre('Post-Rock', with_connection=conn) + genres = list() + for i in range(1, 15): # starts at 1 to ensure records are in the past + trk = Track(file=f'/foo/bar.{i}', name=f'{i}-baz', + album='foolbum', artist=f'{i}-art', genre=f'{i}') + genres.append(f'{i}') + last = CURRENT - datetime.timedelta(minutes=i) + self.db.add_history(trk, date=last) + genre_hist = self.db.fetch_genres_history(limit=10) + self.assertEqual([g[0] for g in genre_hist], genres[:10]) + + def test_null_genres(self): + conn = self.db.get_database_connection() + genres = list() + for i in range(1, 2): # starts at 1 to ensure records are in the past + trk = Track(file=f'/foo/bar.{i}', name=f'{i}-baz', + album='foolbum', artist=f'{i}-art') + last = CURRENT - datetime.timedelta(minutes=i) + self.db.add_history(trk, date=last) + genre_hist = self.db.fetch_genres_history(limit=10) + self.assertEqual(genre_hist, []) + # VIM MODLINE # vim: ai ts=4 sw=4 sts=4 expandtab fileencoding=utf8