mirror of
https://github.com/netbox-community/netbox.git
synced 2026-04-23 01:08:45 +02: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.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):
|
||||||
|
|||||||
Reference in New Issue
Block a user