summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorTom Carrick <knyght@knyg.ht>2020-05-06 10:29:51 +0200
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2020-05-11 18:16:38 +0200
commitd24ba1be7a53a113d19e2860c03aff9922efec24 (patch)
tree50549f65e023c3ab94db2bc3b902405a58051f40 /tests
parentd6aff369ad33457ae2355b5b210faf1c4890ff35 (diff)
Fixed #31034 -- Added a navigation sidebar to the admin.
Co-authored-by: elky <elky@users.noreply.github.com> Co-authored-by: Goetz <goetz.buerkle@gmail.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/admin_inlines/tests.py4
-rw-r--r--tests/admin_views/test_nav_sidebar.py103
-rw-r--r--tests/admin_views/tests.py6
3 files changed, 109 insertions, 4 deletions
diff --git a/tests/admin_inlines/tests.py b/tests/admin_inlines/tests.py
index 79bd77fef1..91bb9465a8 100644
--- a/tests/admin_inlines/tests.py
+++ b/tests/admin_inlines/tests.py
@@ -1331,7 +1331,9 @@ class SeleniumTests(AdminSeleniumTestCase):
hide_links = self.selenium.find_elements_by_link_text('HIDE')
self.assertEqual(len(hide_links), 2)
for hide_index, field_name in enumerate(test_fields):
- hide_links[hide_index].click()
+ hide_link = hide_links[hide_index]
+ self.selenium.execute_script('window.scrollTo(0, %s);' % hide_link.location['y'])
+ hide_link.click()
self.wait_until_invisible(field_name)
self.selenium.find_element_by_xpath('//input[@value="Save"]').click()
self.assertEqual(
diff --git a/tests/admin_views/test_nav_sidebar.py b/tests/admin_views/test_nav_sidebar.py
new file mode 100644
index 0000000000..2225376cd5
--- /dev/null
+++ b/tests/admin_views/test_nav_sidebar.py
@@ -0,0 +1,103 @@
+from django.contrib import admin
+from django.contrib.admin.tests import AdminSeleniumTestCase
+from django.contrib.auth.models import User
+from django.test import TestCase, override_settings
+from django.urls import path, reverse
+
+
+class AdminSiteWithSidebar(admin.AdminSite):
+ pass
+
+
+class AdminSiteWithoutSidebar(admin.AdminSite):
+ enable_nav_sidebar = False
+
+
+site_with_sidebar = AdminSiteWithSidebar(name='test_with_sidebar')
+site_without_sidebar = AdminSiteWithoutSidebar(name='test_without_sidebar')
+
+site_with_sidebar.register(User)
+
+urlpatterns = [
+ path('test_sidebar/admin/', site_with_sidebar.urls),
+ path('test_wihout_sidebar/admin/', site_without_sidebar.urls),
+]
+
+
+@override_settings(ROOT_URLCONF='admin_views.test_nav_sidebar')
+class AdminSidebarTests(TestCase):
+ @classmethod
+ def setUpTestData(cls):
+ cls.superuser = User.objects.create_superuser(
+ username='super',
+ password='secret',
+ email='super@example.com',
+ )
+
+ def setUp(self):
+ self.client.force_login(self.superuser)
+
+ def test_sidebar_not_on_index(self):
+ response = self.client.get(reverse('test_with_sidebar:index'))
+ self.assertNotContains(response, '<nav class="sticky" id="nav-sidebar">')
+
+ def test_sidebar_disabled(self):
+ response = self.client.get(reverse('test_without_sidebar:index'))
+ self.assertNotContains(response, '<nav class="sticky" id="nav-sidebar">')
+
+ def test_sidebar_unauthenticated(self):
+ self.client.logout()
+ response = self.client.get(reverse('test_with_sidebar:login'))
+ self.assertNotContains(response, '<nav class="sticky" id="nav-sidebar">')
+
+ def test_sidebar_aria_current_page(self):
+ response = self.client.get(reverse('test_with_sidebar:auth_user_changelist'))
+ self.assertContains(response, '<nav class="sticky" id="nav-sidebar">')
+ self.assertContains(response, 'aria-current="page">Users</a>')
+
+
+@override_settings(ROOT_URLCONF='admin_views.test_nav_sidebar')
+class SeleniumTests(AdminSeleniumTestCase):
+ def setUp(self):
+ self.superuser = User.objects.create_superuser(
+ username='super',
+ password='secret',
+ email='super@example.com',
+ )
+ self.admin_login(username='super', password='secret', login_url=reverse('test_with_sidebar:index'))
+ self.selenium.execute_script("localStorage.removeItem('django.admin.navSidebarIsOpen')")
+
+ def test_sidebar_starts_open(self):
+ self.selenium.get(self.live_server_url + reverse('test_with_sidebar:auth_user_changelist'))
+ main_element = self.selenium.find_element_by_css_selector('#main')
+ self.assertIn('shifted', main_element.get_attribute('class').split())
+
+ def test_sidebar_can_be_closed(self):
+ self.selenium.get(self.live_server_url + reverse('test_with_sidebar:auth_user_changelist'))
+ toggle_button = self.selenium.find_element_by_css_selector('#toggle-nav-sidebar')
+ toggle_button.click()
+ main_element = self.selenium.find_element_by_css_selector('#main')
+ self.assertNotIn('shifted', main_element.get_attribute('class').split())
+
+ def test_sidebar_state_persists(self):
+ self.selenium.get(self.live_server_url + reverse('test_with_sidebar:auth_user_changelist'))
+ self.assertIsNone(self.selenium.execute_script("return localStorage.getItem('django.admin.navSidebarIsOpen')"))
+ toggle_button = self.selenium.find_element_by_css_selector('#toggle-nav-sidebar')
+ toggle_button.click()
+ self.assertEqual(
+ self.selenium.execute_script("return localStorage.getItem('django.admin.navSidebarIsOpen')"),
+ 'false',
+ )
+ self.selenium.get(self.live_server_url + reverse('test_with_sidebar:auth_user_changelist'))
+ main_element = self.selenium.find_element_by_css_selector('#main')
+ self.assertNotIn('shifted', main_element.get_attribute('class').split())
+
+ toggle_button = self.selenium.find_element_by_css_selector('#toggle-nav-sidebar')
+ toggle_button.click()
+ self.assertEqual(
+ self.selenium.execute_script("return localStorage.getItem('django.admin.navSidebarIsOpen')"),
+ 'true',
+ )
+ self.selenium.get(self.live_server_url + reverse('test_with_sidebar:auth_user_changelist'))
+ main_element = self.selenium.find_element_by_css_selector('#main')
+ self.assertIn('shifted', main_element.get_attribute('class').split())
diff --git a/tests/admin_views/tests.py b/tests/admin_views/tests.py
index db96fbebef..03ec445eeb 100644
--- a/tests/admin_views/tests.py
+++ b/tests/admin_views/tests.py
@@ -5340,13 +5340,13 @@ class CSSTest(TestCase):
"""
# General index page
response = self.client.get(reverse('admin:index'))
- self.assertContains(response, '<div class="app-admin_views module">')
+ self.assertContains(response, '<div class="app-admin_views module')
self.assertContains(response, '<tr class="model-actor">')
self.assertContains(response, '<tr class="model-album">')
# App index page
response = self.client.get(reverse('admin:app_list', args=('admin_views',)))
- self.assertContains(response, '<div class="app-admin_views module">')
+ self.assertContains(response, '<div class="app-admin_views module')
self.assertContains(response, '<tr class="model-actor">')
self.assertContains(response, '<tr class="model-album">')
@@ -6147,7 +6147,7 @@ class AdminViewOnSiteTests(TestCase):
response, 'inline_admin_formset', 0, None,
['Children must share a family name with their parents in this contrived test case']
)
- msg = "The formset 'inline_admin_formset' in context 10 does not contain any non-form errors."
+ msg = "The formset 'inline_admin_formset' in context 12 does not contain any non-form errors."
with self.assertRaisesMessage(AssertionError, msg):
self.assertFormsetError(response, 'inline_admin_formset', None, None, ['Error'])