summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFederico Jaramillo Martínez <federicojaramillom@gmail.com>2019-08-22 09:20:30 -0500
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2019-08-27 13:47:36 +0200
commit8f6860863e34cb1cbe24161f1c4e7c79007e93dc (patch)
tree0f0e479afe6380af580b10c776e15d7d15dfe23d
parent691def10a0197d83d2d108bd9043b0916d0f09b4 (diff)
Fixed #30722 -- Added default rate-limiting requests to admin's Select2 widget.
-rw-r--r--django/contrib/admin/widgets.py1
-rw-r--r--tests/admin_views/test_autocomplete_view.py13
-rw-r--r--tests/admin_widgets/test_autocomplete_widget.py1
3 files changed, 15 insertions, 0 deletions
diff --git a/django/contrib/admin/widgets.py b/django/contrib/admin/widgets.py
index aa4b613894..7db57f4098 100644
--- a/django/contrib/admin/widgets.py
+++ b/django/contrib/admin/widgets.py
@@ -410,6 +410,7 @@ class AutocompleteMixin:
attrs.setdefault('class', '')
attrs.update({
'data-ajax--cache': 'true',
+ 'data-ajax--delay': 250,
'data-ajax--type': 'GET',
'data-ajax--url': self.get_url(),
'data-theme': 'admin-autocomplete',
diff --git a/tests/admin_views/test_autocomplete_view.py b/tests/admin_views/test_autocomplete_view.py
index 5855aa71d4..2734a45606 100644
--- a/tests/admin_views/test_autocomplete_view.py
+++ b/tests/admin_views/test_autocomplete_view.py
@@ -1,4 +1,5 @@
import json
+import time
from django.contrib import admin
from django.contrib.admin.tests import AdminSeleniumTestCase
@@ -189,6 +190,12 @@ class SeleniumTests(AdminSeleniumTestCase):
self.assertEqual(len(results), PAGINATOR_SIZE + 11)
# Limit the results with the search field.
search.send_keys('Who')
+ # Ajax request is delayed.
+ self.assertTrue(result_container.is_displayed())
+ results = result_container.find_elements_by_css_selector('.select2-results__option')
+ self.assertEqual(len(results), PAGINATOR_SIZE + 12)
+ # Wait for ajax delay.
+ time.sleep(0.25)
self.assertTrue(result_container.is_displayed())
results = result_container.find_elements_by_css_selector('.select2-results__option')
self.assertEqual(len(results), 1)
@@ -223,6 +230,12 @@ class SeleniumTests(AdminSeleniumTestCase):
self.assertEqual(len(results), 31)
# Limit the results with the search field.
search.send_keys('Who')
+ # Ajax request is delayed.
+ self.assertTrue(result_container.is_displayed())
+ results = result_container.find_elements_by_css_selector('.select2-results__option')
+ self.assertEqual(len(results), 32)
+ # Wait for ajax delay.
+ time.sleep(0.25)
self.assertTrue(result_container.is_displayed())
results = result_container.find_elements_by_css_selector('.select2-results__option')
self.assertEqual(len(results), 1)
diff --git a/tests/admin_widgets/test_autocomplete_widget.py b/tests/admin_widgets/test_autocomplete_widget.py
index 601929fd37..2cb2e8fbf5 100644
--- a/tests/admin_widgets/test_autocomplete_widget.py
+++ b/tests/admin_widgets/test_autocomplete_widget.py
@@ -52,6 +52,7 @@ class AutocompleteMixinTests(TestCase):
self.assertEqual(attrs, {
'class': 'my-class admin-autocomplete',
'data-ajax--cache': 'true',
+ 'data-ajax--delay': 250,
'data-ajax--type': 'GET',
'data-ajax--url': '/admin_widgets/band/autocomplete/',
'data-theme': 'admin-autocomplete',