summaryrefslogtreecommitdiff
path: root/tests/admin_changelist
diff options
context:
space:
mode:
authorJon Dufresne <jon.dufresne@gmail.com>2020-04-25 17:15:16 -0700
committerCarlton Gibson <carlton@noumenal.es>2020-05-14 15:32:36 +0200
commit129193328e459daf2ae6fa978454a92202503ab2 (patch)
tree57ec242388333920f0a7af52e917b2ae30ade540 /tests/admin_changelist
parent3a941230c85b2702a5e1cd97e17251ce21057efa (diff)
downloaddjango-129193328e459daf2ae6fa978454a92202503ab2.tar.gz
Added Selenium test coverage for actions.js.
Diffstat (limited to 'tests/admin_changelist')
-rw-r--r--tests/admin_changelist/tests.py87
1 files changed, 84 insertions, 3 deletions
diff --git a/tests/admin_changelist/tests.py b/tests/admin_changelist/tests.py
index f424e8a737..4643757744 100644
--- a/tests/admin_changelist/tests.py
+++ b/tests/admin_changelist/tests.py
@@ -1295,17 +1295,98 @@ class SeleniumTests(AdminSeleniumTestCase):
rows = self.selenium.find_elements_by_css_selector(
'%s #result_list tbody tr' % form_id)
self.assertEqual(len(rows), 1)
+ row = rows[0]
- # Test current selection
selection_indicator = self.selenium.find_element_by_css_selector(
'%s .action-counter' % form_id)
+ all_selector = self.selenium.find_element_by_id('action-toggle')
+ row_selector = self.selenium.find_element_by_css_selector(
+ '%s #result_list tbody tr:first-child .action-select' % form_id
+ )
+
+ # Test current selection
self.assertEqual(selection_indicator.text, "0 of 1 selected")
+ self.assertIs(all_selector.get_property('checked'), False)
+ self.assertEqual(row.get_attribute('class'), '')
# Select a row and check again
- row_selector = self.selenium.find_element_by_css_selector(
- '%s #result_list tbody tr:first-child .action-select' % form_id)
row_selector.click()
self.assertEqual(selection_indicator.text, "1 of 1 selected")
+ self.assertIs(all_selector.get_property('checked'), True)
+ self.assertEqual(row.get_attribute('class'), 'selected')
+
+ # Deselect a row and check again
+ row_selector.click()
+ self.assertEqual(selection_indicator.text, "0 of 1 selected")
+ self.assertIs(all_selector.get_property('checked'), False)
+ self.assertEqual(row.get_attribute('class'), '')
+
+ def test_select_all_across_pages(self):
+ Parent.objects.bulk_create([Parent(name='parent%d' % i) for i in range(101)])
+ self.admin_login(username='super', password='secret')
+ self.selenium.get(self.live_server_url + reverse('admin:admin_changelist_parent_changelist'))
+
+ selection_indicator = self.selenium.find_element_by_css_selector('.action-counter')
+ select_all_indicator = self.selenium.find_element_by_css_selector('.actions .all')
+ question = self.selenium.find_element_by_css_selector('.actions > .question')
+ clear = self.selenium.find_element_by_css_selector('.actions > .clear')
+ select_all = self.selenium.find_element_by_id('action-toggle')
+ select_across = self.selenium.find_element_by_name('select_across')
+
+ self.assertIs(question.is_displayed(), False)
+ self.assertIs(clear.is_displayed(), False)
+ self.assertIs(select_all.get_property('checked'), False)
+ self.assertEqual(select_across.get_property('value'), '0')
+ self.assertIs(selection_indicator.is_displayed(), True)
+ self.assertEqual(selection_indicator.text, '0 of 100 selected')
+ self.assertIs(select_all_indicator.is_displayed(), False)
+
+ select_all.click()
+ self.assertIs(question.is_displayed(), True)
+ self.assertIs(clear.is_displayed(), False)
+ self.assertIs(select_all.get_property('checked'), True)
+ self.assertEqual(select_across.get_property('value'), '0')
+ self.assertIs(selection_indicator.is_displayed(), True)
+ self.assertEqual(selection_indicator.text, '100 of 100 selected')
+ self.assertIs(select_all_indicator.is_displayed(), False)
+
+ question.click()
+ self.assertIs(question.is_displayed(), False)
+ self.assertIs(clear.is_displayed(), True)
+ self.assertIs(select_all.get_property('checked'), True)
+ self.assertEqual(select_across.get_property('value'), '1')
+ self.assertIs(selection_indicator.is_displayed(), False)
+ self.assertIs(select_all_indicator.is_displayed(), True)
+
+ clear.click()
+ self.assertIs(question.is_displayed(), False)
+ self.assertIs(clear.is_displayed(), False)
+ self.assertIs(select_all.get_property('checked'), False)
+ self.assertEqual(select_across.get_property('value'), '0')
+ self.assertIs(selection_indicator.is_displayed(), True)
+ self.assertEqual(selection_indicator.text, '0 of 100 selected')
+ self.assertIs(select_all_indicator.is_displayed(), False)
+
+ def test_actions_warn_on_pending_edits(self):
+ Parent.objects.create(name='foo')
+
+ self.admin_login(username='super', password='secret')
+ self.selenium.get(self.live_server_url + reverse('admin:admin_changelist_parent_changelist'))
+
+ name_input = self.selenium.find_element_by_id('id_form-0-name')
+ name_input.clear()
+ name_input.send_keys('bar')
+ self.selenium.find_element_by_id('action-toggle').click()
+ self.selenium.find_element_by_name('index').click() # Go
+ alert = self.selenium.switch_to.alert
+ try:
+ self.assertEqual(
+ alert.text,
+ 'You have unsaved changes on individual editable fields. If you '
+ 'run an action, your unsaved changes will be lost.'
+ )
+ finally:
+ alert.dismiss()
def test_save_with_changes_warns_on_pending_action(self):
from selenium.webdriver.support.ui import Select