Test and implement library.find_exact

This commit is contained in:
Thomas Adamcik 2010-04-30 21:52:47 +02:00
parent f1453732dc
commit d5b80c7885
2 changed files with 55 additions and 9 deletions

View File

@ -14,7 +14,7 @@ import shutil
import threading
from mopidy.backends import *
from mopidy.models import Playlist, Track
from mopidy.models import Playlist, Track, Album
from mopidy import settings
from mopidy.utils import parse_m3u, parse_mpd_tag_cache
@ -201,4 +201,17 @@ class GStreamerLibraryController(BaseLibraryController):
raise LookupError
def find_exact(self, type, query):
return Playlist()
if not query:
raise LookupError('Missing query')
if type == 'track':
filter_func = lambda t: t.name == query
elif type == 'album':
filter_func = lambda t: getattr(t, 'album', Album()).name == query
elif type == 'artist':
filter_func = lambda t: filter(lambda a: a.name == query, t.artists)
else:
raise LookupError('Invalid lookup type')
tracks = filter(filter_func, self._uri_mapping.values())
return Playlist(tracks=tracks)

View File

@ -979,12 +979,13 @@ class BaseStoredPlaylistsControllerTest(object):
class BaseLibraryControllerTest(object):
tracks = []
artists = [Artist(name='artist1'), Artist(name='artist2')]
artists = [Artist(name='artist1'), Artist(name='artist2'), Artist()]
albums = [Album(name='album1', artists=artists[:1]),
Album(name='album2', artists=artists[1:])]
Album(name='album2', artists=artists[1:2]),
Album()]
tracks = [Track(name='track1', length=4000, artists=artists[:1], album=albums[0], uri='file://' + data_folder('uri1')),
Track(name='track2', length=4000, artists=artists[1:], album=albums[1], uri='file://' + data_folder('uri2'))]
# FIXME add tracks with partial info
Track(name='track2', length=4000, artists=artists[1:2], album=albums[1], uri='file://' + data_folder('uri2')),
Track()]
def setUp(self):
self.backend = self.backend_class(mixer=DummyMixer())
@ -1014,14 +1015,46 @@ class BaseLibraryControllerTest(object):
result = self.library.find_exact('track', 'unknown track')
self.assertEqual(result, Playlist())
result = self.library.find_exact('artist', 'unknown artist')
self.assertEqual(result, Playlist())
result = self.library.find_exact('album', 'unknown artist')
self.assertEqual(result, Playlist())
def test_find_exact_artist(self):
raise SkipTest
result = self.library.find_exact('artist', 'artist1')
self.assertEqual(result, Playlist(tracks=self.tracks[:1]))
result = self.library.find_exact('artist', 'artist2')
self.assertEqual(result, Playlist(tracks=self.tracks[1:2]))
def test_find_exact_track(self):
raise SkipTest
result = self.library.find_exact('track', 'track1')
self.assertEqual(result, Playlist(tracks=self.tracks[:1]))
result = self.library.find_exact('track', 'track2')
self.assertEqual(result, Playlist(tracks=self.tracks[1:2]))
def test_find_exact_album(self):
raise SkipTest
result = self.library.find_exact('album', 'album1')
self.assertEqual(result, Playlist(tracks=self.tracks[:1]))
result = self.library.find_exact('album', 'album2')
self.assertEqual(result, Playlist(tracks=self.tracks[1:2]))
def test_find_exact_wrong_type(self):
test = lambda: self.library.find_exact('wrong', 'test')
self.assertRaises(LookupError, test)
def test_find_exact_with_empty_query(self):
test = lambda: self.library.find_exact('artist', '')
self.assertRaises(LookupError, test)
test = lambda: self.library.find_exact('track', '')
self.assertRaises(LookupError, test)
test = lambda: self.library.find_exact('album', '')
self.assertRaises(LookupError, test)
def test_find_search_no_hits(self):
raise SkipTest