test(ui): Add test coverage for NestedObjectAttr

Adds comprehensive test cases for NestedObjectAttr including ancestor
traversal, max_depth limiting, null value handling, and linkify/colored
options. Uses Region model with MPTT hierarchy for testing nested
object rendering.

Closes #22956
This commit is contained in:
Martin Hauser 2026-08-18 14:49:59 +02:00
parent 93f16a536d
commit f35702728b
No known key found for this signature in database
1 changed files with 36 additions and 1 deletions

View File

@ -15,7 +15,7 @@ from circuits.models import (
)
from core.models import ObjectType
from dcim.choices import InterfaceTypeChoices
from dcim.models import Interface, Site
from dcim.models import Interface, Region, Site
from netbox.ui import attrs
from netbox.ui.panels import ObjectsTablePanel
from netbox.ui.utils import build_coords_url
@ -366,6 +366,41 @@ class RelatedObjectAttrTestCase(TestCase):
self.assertTrue(context['linkify'])
class NestedObjectAttrTestCase(TestCase):
@classmethod
def setUpTestData(cls):
cls.root = Region.objects.create(name='Root', slug='root')
cls.parent = Region.objects.create(name='Parent', slug='parent', parent=cls.root)
cls.child = Region.objects.create(name='Child', slug='child', parent=cls.parent)
def test_get_context_includes_ancestors_and_self(self):
attr = attrs.NestedObjectAttr('region')
context = attr.get_context(SimpleNamespace(region=self.child), 'region', self.child, {})
# Without max_depth the MPTT queryset is passed through unmodified
self.assertEqual(list(context['nodes']), [self.root, self.parent, self.child])
def test_get_context_max_depth_keeps_closest_ancestors(self):
attr = attrs.NestedObjectAttr('region', max_depth=2)
context = attr.get_context(SimpleNamespace(region=self.child), 'region', self.child, {})
self.assertEqual(context['nodes'], [self.parent, self.child])
def test_get_context_null_value_yields_no_nodes(self):
attr = attrs.NestedObjectAttr('region')
context = attr.get_context(SimpleNamespace(region=None), 'region', None, {})
self.assertEqual(context['nodes'], [])
def test_get_context_linkify_and_colored(self):
attr = attrs.NestedObjectAttr('region', linkify=True, colored=True)
context = attr.get_context(SimpleNamespace(region=self.root), 'region', self.root, {})
self.assertTrue(context['linkify'])
self.assertTrue(context['colored'])
class GenericForeignKeyAttrTestCase(TestCase):
class TreeNode: