from django.test import TestCase from django.urls import reverse from django.urls.exceptions import NoReverseMatch from oscar.apps.dashboard.menu import get_nodes from oscar.apps.dashboard.nav import default_access_fn from oscar.test.factories import UserFactory class DashboardAccessFunctionTestCase(TestCase): def setUp(self): self.staff_user = UserFactory(is_staff=True) self.non_staff_user = UserFactory() def test_default_access_fn_no_url_name(self): self.assertTrue(default_access_fn(self.staff_user, None)) def test_default_access_fn_staff(self): self.assertTrue(default_access_fn(self.staff_user, 'dashboard:index')) def test_default_access_fn_non_staff_user(self): self.assertFalse(default_access_fn(self.non_staff_user, 'dashboard:index')) def test_default_access_fn_invalid_url_name(self): with self.assertRaises(NoReverseMatch): default_access_fn(self.staff_user, 'invalid_module:index') def test_default_access_non_dashboard_url_name(self): assert reverse('search:search') with self.assertRaises(KeyError): default_access_fn(self.staff_user, 'search:search') class DashboardNavTestCase(TestCase): def test_staff_user_has_menu(self): menu = get_nodes(UserFactory(is_staff=True)) self.assertTrue(menu) def test_non_staff_user_has_empty_menu(self): menu = get_nodes(UserFactory()) self.assertEqual(menu, [])