mirror of
https://github.com/netbox-community/netbox.git
synced 2026-02-22 08:47:46 +01:00
Add a test for dynamic table prefetching
This commit is contained in:
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user