[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[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: