Просмотр исходного кода

Add a test for dynamic table prefetching

Jeremy Stretch 13 часов назад
Родитель
Сommit
38c3e73dd2
1 измененных файлов с 44 добавлено и 3 удалено
  1. 44 3
      netbox/netbox/tests/test_tables.py

+ 44 - 3
netbox/netbox/tests/test_tables.py

@@ -1,9 +1,50 @@
 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 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):