OpenSearch completion expects an array containing the following elements: - the prefix - the list of completions - the list of descriptions (optional) - the list of URL (optional)
See: http://www.opensearch.org/Specifications/OpenSearch/Extensions/Suggestions/1.0 --- distro_tracker/core/static/js/main.js | 10 ++++++++-- distro_tracker/core/tests/tests_views.py | 30 +++++++++++++++++++++--------- distro_tracker/core/views.py | 4 +++- 3 files changed, 32 insertions(+), 12 deletions(-) diff --git a/distro_tracker/core/static/js/main.js b/distro_tracker/core/static/js/main.js index d13e2ee6cbdd..3eee6aa17eb4 100644 --- a/distro_tracker/core/static/js/main.js +++ b/distro_tracker/core/static/js/main.js @@ -15,14 +15,20 @@ $(function() { $('#package-search-input, .package-search-input').typeahead([ { name: 'source-packages', - remote: '/api/package/search/autocomplete?q=%QUERY&package_type=source', + remote: { + url: '/api/package/search/autocomplete?q=%QUERY&package_type=source', + filter: function(r) { return r[1]; } + }, header: '<h5 class="text-center typeahead-package-title">Source packages</h5>', // Use a slightly larger delay between requests than the default rateLimitWait: 500 }, { name: 'pseudo-packages', - remote: '/api/package/search/autocomplete?q=%QUERY&package_type=pseudo', + remote: { + url: '/api/package/search/autocomplete?q=%QUERY&package_type=pseudo', + filter: function(r) { return r[1]; } + }, header: '<h5 class="text-center typeahead-package-title">Pseudo Packages</h5>', // Use a slightly larger delay between requests than the default rateLimitWait: 500 diff --git a/distro_tracker/core/tests/tests_views.py b/distro_tracker/core/tests/tests_views.py index ab4bf0848e97..9d8db7c92d1c 100644 --- a/distro_tracker/core/tests/tests_views.py +++ b/distro_tracker/core/tests/tests_views.py @@ -279,8 +279,10 @@ class PackageAutocompleteViewTest(TestCase): response = json.loads(response.content.decode('utf-8')) self.assertEqual(len(response), 2) - self.assertIn('dummy-package', response) - self.assertIn('d-package', response) + self.assertEqual(response[0], 'd') + self.assertEqual(len(response[1]), 2) + self.assertIn('dummy-package', response[1]) + self.assertIn('d-package', response[1]) # No packages given when there are no matching source packages response = self.client.get(reverse('dtracker-api-package-autocomplete'), { @@ -288,7 +290,9 @@ class PackageAutocompleteViewTest(TestCase): 'q': 'z', }) response = json.loads(response.content.decode('utf-8')) - self.assertEqual(len(response), 0) + self.assertEqual(len(response), 2) + self.assertEqual(response[0], 'z') + self.assertEqual(len(response[1]), 0) def test_pseudo_package_autocomplete(self): """ @@ -301,8 +305,10 @@ class PackageAutocompleteViewTest(TestCase): }) response = json.loads(response.content.decode('utf-8')) - self.assertEqual(len(response), 1) - self.assertIn('pseudo-package', response) + self.assertEqual(len(response), 2) + self.assertEqual(response[0], 'p') + self.assertEqual(len(response[1]), 1) + self.assertIn('pseudo-package', response[1]) # No packages given when there are no matching pseudo packages response = self.client.get(reverse('dtracker-api-package-autocomplete'), { @@ -310,7 +316,9 @@ class PackageAutocompleteViewTest(TestCase): 'q': '-', }) response = json.loads(response.content.decode('utf-8')) - self.assertEqual(len(response), 0) + self.assertEqual(len(response), 2) + self.assertEqual(response[0], '-') + self.assertEqual(len(response[1]), 0) def test_all_packages_autocomplete(self): """ @@ -323,15 +331,19 @@ class PackageAutocompleteViewTest(TestCase): response = json.loads(response.content.decode('utf-8')) self.assertEqual(len(response), 2) - self.assertIn('package', response) - self.assertIn('pseudo-package', response) + self.assertEqual(response[0], 'p') + self.assertEqual(len(response[1]), 2) + self.assertIn('package', response[1]) + self.assertIn('pseudo-package', response[1]) # No packages given when there are no matching packages response = self.client.get(reverse('dtracker-api-package-autocomplete'), { 'q': '-', }) response = json.loads(response.content.decode('utf-8')) - self.assertEqual(len(response), 0) + self.assertEqual(len(response), 2) + self.assertEqual(response[0], '-') + self.assertEqual(len(response[1]), 0) def test_no_query_given(self): """ diff --git a/distro_tracker/core/views.py b/distro_tracker/core/views.py index 1b54f82e40dd..0622ce34259e 100644 --- a/distro_tracker/core/views.py +++ b/distro_tracker/core/views.py @@ -147,7 +147,9 @@ class PackageAutocompleteView(View): # Limit the number of packages returned from the autocomplete AUTOCOMPLETE_ITEMS_LIMIT = 10 filtered = filtered[:AUTOCOMPLETE_ITEMS_LIMIT] - return render_to_json_response([package['name'] for package in filtered]) + return render_to_json_response([query_string, + [package['name'] + for package in filtered]]) def news_page(request, news_id): -- 2.0.1 -- To UNSUBSCRIBE, email to debian-qa-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org Archive: https://lists.debian.org/1405604299-11862-3-git-send-email-ber...@debian.org