Test and impl. search in library

This commit is contained in:
Thomas Adamcik 2010-04-30 22:25:19 +02:00
parent 9c612d1c52
commit 7773e8eba3
2 changed files with 97 additions and 12 deletions

View File

@ -215,3 +215,32 @@ class GStreamerLibraryController(BaseLibraryController):
tracks = filter(filter_func, self._uri_mapping.values())
return Playlist(tracks=tracks)
def search(self, type, query):
if not query:
raise LookupError('Missing query')
q = query.strip().lower()
library_tracks = self._uri_mapping.values()
track_filter = lambda t: q in t.name.lower()
album_filter = lambda t: q in getattr(t, 'album', Album()).name.lower()
artist_filter = lambda t: filter(lambda a: q in a.name.lower(), t.artists)
uri_filter = lambda t: q in t.uri.lower()
any_filter = lambda t: track_filter(t) or album_filter(t) or \
artist_filter(t) or uri_filter(t)
if type == 'track':
tracks = filter(track_filter, library_tracks)
elif type == 'album':
tracks = filter(album_filter, library_tracks)
elif type == 'artist':
tracks = filter(artist_filter, library_tracks)
elif type == 'uri':
tracks = filter(uri_filter, library_tracks)
elif type == 'any':
tracks = filter(any_filter, library_tracks)
else:
raise LookupError('Invalid lookup type: %s' % type)
return Playlist(tracks=tracks)

View File

@ -1056,20 +1056,76 @@ class BaseLibraryControllerTest(object):
test = lambda: self.library.find_exact('album', '')
self.assertRaises(LookupError, test)
def test_find_search_no_hits(self):
raise SkipTest
def test_search_no_hits(self):
result = self.library.search('track', 'unknown track')
self.assertEqual(result, Playlist())
def test_find_search_artist(self):
raise SkipTest
result = self.library.search('artist', 'unknown artist')
self.assertEqual(result, Playlist())
def test_find_search_track(self):
raise SkipTest
result = self.library.search('album', 'unknown artist')
self.assertEqual(result, Playlist())
def test_find_search_album(self):
raise SkipTest
result = self.library.search('uri', 'unknown')
self.assertEqual(result, Playlist())
def test_find_search_uri(self):
raise SkipTest
result = self.library.search('any', 'unknown')
self.assertEqual(result, Playlist())
def test_find_search_any(self):
raise SkipTest
def test_search_artist(self):
result = self.library.search('artist', 'Tist1')
self.assertEqual(result, Playlist(tracks=self.tracks[:1]))
result = self.library.search('artist', 'Tist2')
self.assertEqual(result, Playlist(tracks=self.tracks[1:2]))
def test_search_track(self):
result = self.library.search('track', 'Rack1')
self.assertEqual(result, Playlist(tracks=self.tracks[:1]))
result = self.library.search('track', 'Rack2')
self.assertEqual(result, Playlist(tracks=self.tracks[1:2]))
def test_search_album(self):
result = self.library.search('album', 'Bum1')
self.assertEqual(result, Playlist(tracks=self.tracks[:1]))
result = self.library.search('album', 'Bum2')
self.assertEqual(result, Playlist(tracks=self.tracks[1:2]))
def test_search_uri(self):
result = self.library.search('uri', 'RI1')
self.assertEqual(result, Playlist(tracks=self.tracks[:1]))
result = self.library.search('uri', 'RI2')
self.assertEqual(result, Playlist(tracks=self.tracks[1:2]))
def test_search_any(self):
result = self.library.search('any', 'Tist1')
self.assertEqual(result, Playlist(tracks=self.tracks[:1]))
result = self.library.search('any', 'Rack1')
self.assertEqual(result, Playlist(tracks=self.tracks[:1]))
result = self.library.search('any', 'Bum1')
self.assertEqual(result, Playlist(tracks=self.tracks[:1]))
result = self.library.search('any', 'RI1')
self.assertEqual(result, Playlist(tracks=self.tracks[:1]))
def test_search_wrong_type(self):
test = lambda: self.library.search('wrong', 'test')
self.assertRaises(LookupError, test)
def test_search_with_empty_query(self):
test = lambda: self.library.search('artist', '')
self.assertRaises(LookupError, test)
test = lambda: self.library.search('track', '')
self.assertRaises(LookupError, test)
test = lambda: self.library.search('album', '')
self.assertRaises(LookupError, test)
test = lambda: self.library.search('uri', '')
self.assertRaises(LookupError, test)
test = lambda: self.library.search('any', '')
self.assertRaises(LookupError, test)