|
@@ -1,9 +1,50 @@
|
|
|
from django.template import Context, Template
|
|
from django.template import Context, Template
|
|
|
-from django.test import TestCase
|
|
|
|
|
|
|
+from django.test import RequestFactory, TestCase
|
|
|
|
|
|
|
|
-from dcim.models import Site
|
|
|
|
|
|
|
+from dcim.models import Device, Site
|
|
|
|
|
+from dcim.tables import DeviceTable
|
|
|
from netbox.tables import NetBoxTable, columns
|
|
from netbox.tables import NetBoxTable, columns
|
|
|
-from utilities.testing import create_tags
|
|
|
|
|
|
|
+from utilities.testing import create_tags, create_test_device, create_test_user
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+class BaseTableTest(TestCase):
|
|
|
|
|
+
|
|
|
|
|
+ @classmethod
|
|
|
|
|
+ def setUpTestData(cls):
|
|
|
|
|
+ create_test_device('Test Device 1')
|
|
|
|
|
+ cls.user = create_test_user('testuser')
|
|
|
|
|
+
|
|
|
|
|
+ def test_prefetch_visible_columns(self):
|
|
|
|
|
+ """
|
|
|
|
|
+ Verify that the table queryset's prefetch_related lookups correspond to the user's
|
|
|
|
|
+ visible column preferences. Columns referencing related fields should only be
|
|
|
|
|
+ prefetched when those columns are visible.
|
|
|
|
|
+ """
|
|
|
|
|
+ request = RequestFactory().get('/')
|
|
|
|
|
+ request.user = self.user
|
|
|
|
|
+
|
|
|
|
|
+ # Scenario 1: 'rack' (simple FK) and 'region' (nested accessor: site__region) are visible
|
|
|
|
|
+ self.user.config.set(
|
|
|
|
|
+ 'tables.DeviceTable.columns',
|
|
|
|
|
+ ['name', 'status', 'site', 'rack', 'region'],
|
|
|
|
|
+ commit=True,
|
|
|
|
|
+ )
|
|
|
|
|
+ table = DeviceTable(Device.objects.all())
|
|
|
|
|
+ table.configure(request)
|
|
|
|
|
+ prefetch_lookups = table.data.data._prefetch_related_lookups
|
|
|
|
|
+ self.assertIn('rack', prefetch_lookups)
|
|
|
|
|
+ self.assertIn('site__region', prefetch_lookups)
|
|
|
|
|
+
|
|
|
|
|
+ # Scenario 2: Local fields only; no prefetching
|
|
|
|
|
+ self.user.config.set(
|
|
|
|
|
+ 'tables.DeviceTable.columns',
|
|
|
|
|
+ ['name', 'status', 'description'],
|
|
|
|
|
+ commit=True,
|
|
|
|
|
+ )
|
|
|
|
|
+ table = DeviceTable(Device.objects.all())
|
|
|
|
|
+ table.configure(request)
|
|
|
|
|
+ prefetch_lookups = table.data.data._prefetch_related_lookups
|
|
|
|
|
+ self.assertEqual(prefetch_lookups, tuple())
|
|
|
|
|
|
|
|
|
|
|
|
|
class TagColumnTable(NetBoxTable):
|
|
class TagColumnTable(NetBoxTable):
|