diff --git a/mopidy/backends/local/library.py b/mopidy/backends/local/library.py index 319049f0..0de63faf 100644 --- a/mopidy/backends/local/library.py +++ b/mopidy/backends/local/library.py @@ -67,8 +67,11 @@ class LocalLibraryProvider(base.BaseLibraryProvider): for a in getattr(t.album, 'artists', [])]) date_filter = lambda t: q == t.date any_filter = lambda t: ( - track_filter(t) or album_filter(t) or - artist_filter(t) or uri_filter(t)) + track_filter(t) or + album_filter(t) or + artist_filter(t) or + albumartist_filter(t) or + uri_filter(t)) if field == 'uri': result_tracks = filter(uri_filter, result_tracks) @@ -114,8 +117,12 @@ class LocalLibraryProvider(base.BaseLibraryProvider): q in a.name.lower() for a in getattr(t.album, 'artists', [])]) date_filter = lambda t: t.date and t.date.startswith(q) - any_filter = lambda t: track_filter(t) or album_filter(t) or \ - artist_filter(t) or uri_filter(t) + any_filter = lambda t: ( + track_filter(t) or + album_filter(t) or + artist_filter(t) or + albumartist_filter(t) or + uri_filter(t)) if field == 'uri': result_tracks = filter(uri_filter, result_tracks) diff --git a/tests/backends/local/library_test.py b/tests/backends/local/library_test.py index 149a9cb3..bc7181eb 100644 --- a/tests/backends/local/library_test.py +++ b/tests/backends/local/library_test.py @@ -140,6 +140,29 @@ class LocalLibraryControllerTest(unittest.TestCase): result = self.library.find_exact(date=['2002']) self.assertEqual(list(result[0].tracks), self.tracks[1:2]) + def test_find_exact_any(self): + # Matches on track artist + result = self.library.find_exact(any=['artist1']) + self.assertEqual(list(result[0].tracks), self.tracks[:1]) + + # Matches on track + result = self.library.find_exact(any=['track1']) + self.assertEqual(list(result[0].tracks), self.tracks[:1]) + + # Matches on track album + result = self.library.find_exact(any=['album1']) + self.assertEqual(list(result[0].tracks), self.tracks[:1]) + + # Matches on track album artists + result = self.library.find_exact(any=['artist3']) + self.assertEqual(list(result[0].tracks), self.tracks[2:3]) + + # Matches on URI + result = self.library.find_exact(any=['local:track:path1']) + self.assertEqual(list(result[0].tracks), self.tracks[:1]) + result = self.library.find_exact(any=['local:track:path1']) + self.assertEqual(list(result[0].tracks), self.tracks[:1]) + def test_find_exact_wrong_type(self): test = lambda: self.library.find_exact(wrong=['test']) self.assertRaises(LookupError, test) @@ -225,12 +248,25 @@ class LocalLibraryControllerTest(unittest.TestCase): self.assertEqual(list(result[0].tracks), self.tracks[1:2]) def test_search_any(self): + # Matches on track artist result = self.library.search(any=['Tist1']) self.assertEqual(list(result[0].tracks), self.tracks[:1]) + + # Matches on track result = self.library.search(any=['Rack1']) self.assertEqual(list(result[0].tracks), self.tracks[:1]) + + # Matches on track album result = self.library.search(any=['Bum1']) self.assertEqual(list(result[0].tracks), self.tracks[:1]) + + # Matches on track album artists + result = self.library.search(any=['Tist3']) + self.assertEqual(list(result[0].tracks), self.tracks[2:3]) + + # Matches on URI + result = self.library.search(any=['TH1']) + self.assertEqual(list(result[0].tracks), self.tracks[:1]) result = self.library.search(any=['TH1']) self.assertEqual(list(result[0].tracks), self.tracks[:1])