[PATCH 4/5] autocomplete: add possibility to complete binary packages too
---
distro_tracker/core/static/js/main.js | 10 ++++++++++
distro_tracker/core/tests/tests_views.py | 31 ++++++++++++++++++++++++++++++-
distro_tracker/core/views.py | 3 ++-
3 files changed, 42 insertions(+), 2 deletions(-)
diff --git a/distro_tracker/core/static/js/main.js b/distro_tracker/core/static/js/main.js
index 3eee6aa17eb4..454b2b73ac8e 100644
--- a/distro_tracker/core/static/js/main.js
+++ b/distro_tracker/core/static/js/main.js
@@ -24,6 +24,16 @@ $(function() {
rateLimitWait: 500
},
{
+ name: 'binary-packages',
+ remote: {
+ url: '/api/package/search/autocomplete?q=%QUERY&package_type=binary',
+ filter: function(r) { return r[1]; }
+ },
+ header: '<h5 class="text-center typeahead-package-title">Binary packages</h5>',
+ // Use a slightly larger delay between requests than the default
+ rateLimitWait: 500
+ },
+ {
name: 'pseudo-packages',
remote: {
url: '/api/package/search/autocomplete?q=%QUERY&package_type=pseudo',
diff --git a/distro_tracker/core/tests/tests_views.py b/distro_tracker/core/tests/tests_views.py
index 9d8db7c92d1c..5a1447caf43e 100644
--- a/distro_tracker/core/tests/tests_views.py
+++ b/distro_tracker/core/tests/tests_views.py
@@ -265,6 +265,8 @@ class PackageAutocompleteViewTest(TestCase):
SourcePackageName.objects.create(name='package')
PseudoPackageName.objects.create(name='pseudo-package')
PseudoPackageName.objects.create(name='zzz')
+ BinaryPackageName.objects.create(name='package-dev')
+ BinaryPackageName.objects.create(name='libpackage')
PackageName.objects.create(name='ppp')
def test_source_package_autocomplete(self):
@@ -294,6 +296,32 @@ class PackageAutocompleteViewTest(TestCase):
self.assertEqual(response[0], 'z')
self.assertEqual(len(response[1]), 0)
+ def test_binary_package_autocomplete(self):
+ """
+ Tests the autocomplete functionality when the client asks for binary
+ packages.
+ """
+ response = self.client.get(reverse('dtracker-api-package-autocomplete'), {
+ 'package_type': 'binary',
+ 'q': 'p',
+ })
+
+ response = json.loads(response.content.decode('utf-8'))
+ self.assertEqual(len(response), 2)
+ self.assertEqual(response[0], 'p')
+ self.assertEqual(len(response[1]), 1)
+ self.assertIn('package-dev', response[1])
+
+ # No packages given when there are no matching source packages
+ response = self.client.get(reverse('dtracker-api-package-autocomplete'), {
+ 'package_type': 'binary',
+ 'q': 'z',
+ })
+ response = json.loads(response.content.decode('utf-8'))
+ self.assertEqual(len(response), 2)
+ self.assertEqual(response[0], 'z')
+ self.assertEqual(len(response[1]), 0)
+
def test_pseudo_package_autocomplete(self):
"""
Tests the autocomplete functionality when the client asks for pseudo
@@ -332,8 +360,9 @@ class PackageAutocompleteViewTest(TestCase):
response = json.loads(response.content.decode('utf-8'))
self.assertEqual(len(response), 2)
self.assertEqual(response[0], 'p')
- self.assertEqual(len(response[1]), 2)
+ self.assertEqual(len(response[1]), 3)
self.assertIn('package', response[1])
+ self.assertIn('package-dev', response[1])
self.assertIn('pseudo-package', response[1])
# No packages given when there are no matching packages
diff --git a/distro_tracker/core/views.py b/distro_tracker/core/views.py
index 5b8ae84a3245..4876575792f0 100644
--- a/distro_tracker/core/views.py
+++ b/distro_tracker/core/views.py
@@ -29,7 +29,7 @@ from distro_tracker.core.models import get_web_package
from distro_tracker.core.forms import CreateTeamForm
from distro_tracker.core.forms import AddTeamMemberForm
from distro_tracker.core.utils import render_to_json_response
-from distro_tracker.core.models import SourcePackageName, PackageName, PseudoPackageName
+from distro_tracker.core.models import SourcePackageName, PackageName, PseudoPackageName, BinaryPackageName
from distro_tracker.core.models import ActionItem
from distro_tracker.core.models import EmailSettings
from distro_tracker.core.models import News, NewsRenderer
@@ -136,6 +136,7 @@ class PackageAutocompleteView(View):
MANAGERS = {
'pseudo': PseudoPackageName.objects,
'source': SourcePackageName.objects,
+ 'binary': BinaryPackageName.objects,
}
# When no package type is given include both pseudo and source packages
filtered = MANAGERS.get(
--
2.0.1
Reply to: