diff options
| author | Tom Carrick <knyght@knyg.ht> | 2020-05-06 10:29:51 +0200 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2020-05-11 18:16:38 +0200 |
| commit | d24ba1be7a53a113d19e2860c03aff9922efec24 (patch) | |
| tree | 50549f65e023c3ab94db2bc3b902405a58051f40 /tests/admin_views/test_nav_sidebar.py | |
| parent | d6aff369ad33457ae2355b5b210faf1c4890ff35 (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.py | 103 |
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()) |
