test_preferences.py 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. from django.contrib.auth.models import User
  2. from django.test import override_settings
  3. from django.test.client import RequestFactory
  4. from django.urls import reverse
  5. from dcim.models import Site
  6. from dcim.tables import SiteTable
  7. from users.preferences import UserPreference
  8. from netbox.tables import configure_table
  9. from utilities.testing import TestCase
  10. DEFAULT_USER_PREFERENCES = {
  11. 'pagination': {
  12. 'per_page': 250,
  13. }
  14. }
  15. class UserPreferencesTest(TestCase):
  16. user_permissions = ['dcim.view_site']
  17. def test_userpreference(self):
  18. CHOICES = (
  19. ('foo', 'Foo'),
  20. ('bar', 'Bar'),
  21. )
  22. kwargs = {
  23. 'label': 'Test Preference',
  24. 'choices': CHOICES,
  25. 'default': CHOICES[0][0],
  26. 'description': 'Description',
  27. }
  28. userpref = UserPreference(**kwargs)
  29. self.assertEqual(userpref.label, kwargs['label'])
  30. self.assertEqual(userpref.choices, kwargs['choices'])
  31. self.assertEqual(userpref.default, kwargs['default'])
  32. self.assertEqual(userpref.description, kwargs['description'])
  33. @override_settings(DEFAULT_USER_PREFERENCES=DEFAULT_USER_PREFERENCES)
  34. def test_default_preferences(self):
  35. user = User.objects.create(username='User 1')
  36. userconfig = user.config
  37. self.assertEqual(userconfig.data, DEFAULT_USER_PREFERENCES)
  38. def test_table_ordering(self):
  39. url = reverse('dcim:site_list')
  40. response = self.client.get(f"{url}?sort=status")
  41. self.assertEqual(response.status_code, 200)
  42. # Check that table ordering preference has been recorded
  43. self.user.refresh_from_db()
  44. ordering = self.user.config.get(f'tables.SiteTable.ordering')
  45. self.assertEqual(ordering, ['status'])
  46. # Check that a recorded preference is honored by default
  47. self.user.config.set(f'tables.SiteTable.ordering', ['-status'], commit=True)
  48. table = SiteTable(Site.objects.all())
  49. request = RequestFactory().get(url)
  50. request.user = self.user
  51. configure_table(table, request)
  52. self.assertEqual(table.order_by, ('-status',))