summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorTim Graham <timograham@gmail.com>2017-12-01 14:00:00 -0500
committerTim Graham <timograham@gmail.com>2017-12-01 22:14:32 -0500
commit81057645f61fe545f4f11737dbd3040043ed2436 (patch)
tree3ab66278054967fc51614e063732be2ff30c12c8 /tests
parent095c1aaa898bed40568009db836aa8434f1b983d (diff)
Fixed #28871 -- Fixed initialization of autocomplete widgets in "Add another" inlines.
Also allowed autocomplete widgets to work on AdminSites with a name other than 'admin'.
Diffstat (limited to 'tests')
-rw-r--r--tests/admin_views/test_autocomplete_view.py21
-rw-r--r--tests/admin_widgets/test_autocomplete_widget.py11
2 files changed, 28 insertions, 4 deletions
diff --git a/tests/admin_views/test_autocomplete_view.py b/tests/admin_views/test_autocomplete_view.py
index b8c12448e1..8db18d2468 100644
--- a/tests/admin_views/test_autocomplete_view.py
+++ b/tests/admin_views/test_autocomplete_view.py
@@ -17,6 +17,7 @@ PAGINATOR_SIZE = AutocompleteJsonView.paginate_by
class AuthorAdmin(admin.ModelAdmin):
+ ordering = ['id']
search_fields = ['id']
@@ -229,3 +230,23 @@ class SeleniumTests(AdminSeleniumTestCase):
search.send_keys(Keys.RETURN)
select = Select(self.selenium.find_element_by_id('id_related_questions'))
self.assertEqual(len(select.all_selected_options), 2)
+
+ def test_inline_add_another_widgets(self):
+ def assertNoResults(row):
+ elem = row.find_element_by_css_selector('.select2-selection')
+ elem.click() # Open the autocomplete dropdown.
+ results = self.selenium.find_element_by_css_selector('.select2-results')
+ self.assertTrue(results.is_displayed())
+ option = self.selenium.find_element_by_css_selector('.select2-results__option')
+ self.assertEqual(option.text, 'No results found')
+
+ # Autocomplete works in rows present when the page loads.
+ self.selenium.get(self.live_server_url + reverse('autocomplete_admin:admin_views_book_add'))
+ rows = self.selenium.find_elements_by_css_selector('.dynamic-authorship_set')
+ self.assertEqual(len(rows), 3)
+ assertNoResults(rows[0])
+ # Autocomplete works in rows added using the "Add another" button.
+ self.selenium.find_element_by_link_text('Add another Authorship').click()
+ rows = self.selenium.find_elements_by_css_selector('.dynamic-authorship_set')
+ self.assertEqual(len(rows), 4)
+ assertNoResults(rows[-1])
diff --git a/tests/admin_widgets/test_autocomplete_widget.py b/tests/admin_widgets/test_autocomplete_widget.py
index fd79ef9369..28167dfe1c 100644
--- a/tests/admin_widgets/test_autocomplete_widget.py
+++ b/tests/admin_widgets/test_autocomplete_widget.py
@@ -1,4 +1,5 @@
from django import forms
+from django.contrib import admin
from django.contrib.admin.widgets import AutocompleteSelect
from django.forms import ModelChoiceField
from django.test import TestCase, override_settings
@@ -14,10 +15,12 @@ class AlbumForm(forms.ModelForm):
widgets = {
'band': AutocompleteSelect(
Album._meta.get_field('band').remote_field,
+ admin.site,
attrs={'class': 'my-class'},
),
'featuring': AutocompleteSelect(
Album._meta.get_field('featuring').remote_field,
+ admin.site,
)
}
@@ -25,7 +28,7 @@ class AlbumForm(forms.ModelForm):
class NotRequiredBandForm(forms.Form):
band = ModelChoiceField(
queryset=Album.objects.all(),
- widget=AutocompleteSelect(Album._meta.get_field('band').remote_field),
+ widget=AutocompleteSelect(Album._meta.get_field('band').remote_field, admin.site),
required=False,
)
@@ -33,7 +36,7 @@ class NotRequiredBandForm(forms.Form):
class RequiredBandForm(forms.Form):
band = ModelChoiceField(
queryset=Album.objects.all(),
- widget=AutocompleteSelect(Album._meta.get_field('band').remote_field),
+ widget=AutocompleteSelect(Album._meta.get_field('band').remote_field, admin.site),
required=True,
)
@@ -68,7 +71,7 @@ class AutocompleteMixinTests(TestCase):
def test_get_url(self):
rel = Album._meta.get_field('band').remote_field
- w = AutocompleteSelect(rel)
+ w = AutocompleteSelect(rel, admin.site)
url = w.get_url()
self.assertEqual(url, '/admin_widgets/band/autocomplete/')
@@ -130,4 +133,4 @@ class AutocompleteMixinTests(TestCase):
else:
expected_files = base_files
with translation.override(lang):
- self.assertEqual(AutocompleteSelect(rel).media._js, expected_files)
+ self.assertEqual(AutocompleteSelect(rel, admin.site).media._js, expected_files)