summaryrefslogtreecommitdiff
path: root/tests/admin_views/test_nav_sidebar.py
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/admin_views/test_nav_sidebar.py
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/admin_views/test_nav_sidebar.py')
-rw-r--r--tests/admin_views/test_nav_sidebar.py103
1 files changed, 103 insertions, 0 deletions
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())