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 = {
'albumartist': 'Devolt',
'albumartistsort': 'Devolt',
'artist': 'Devolt',
+ 'genre': ['Rock'],
'date': '2011-12-01',
'disc': '1/1',
'file': 'music/Devolt/2011-Grey/03-Devolt - Crazy.mp3',
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)
# 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)
#
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
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
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
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_00(self):
trk01 = Track(file='01', name='01', artist='artist A', album='album A')
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