Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions netbox_lifecycle/search.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ class SupportContractAssignmentIndex(SearchIndex):
('description', 4000),
('comments', 5000),
)
display_attrs = ('vendor', 'start', 'renewal', 'end', 'description')
display_attrs = ('contract', 'sku', 'device', 'end', 'description')


@register_search
Expand All @@ -70,4 +70,4 @@ class LicenseAssignmentIndex(SearchIndex):
('description', 4000),
('comments', 5000),
)
display_attrs = ('manufacturer', 'description')
display_attrs = ('license', 'vendor', 'device', 'description')
52 changes: 52 additions & 0 deletions netbox_lifecycle/tests/test_search.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
from django.core.exceptions import FieldDoesNotExist
from django.test import TestCase

from netbox_lifecycle.search import (
SupportContractAssignmentIndex,
LicenseAssignmentIndex,
)


class SearchIndexDisplayAttrsTestCase(TestCase):
"""
Test that search index display_attrs reference valid model fields.

Regression test for GitHub issue #133:
Search error "SupportContractAssignment has no field named 'vendor'"
"""

def test_support_contract_assignment_display_attrs_are_valid_fields(self):
"""
SupportContractAssignmentIndex.display_attrs should only reference
fields that exist on the SupportContractAssignment model.
"""
index = SupportContractAssignmentIndex()
model = index.model

for attr in index.display_attrs:
# This should not raise FieldDoesNotExist
try:
model._meta.get_field(attr)
except FieldDoesNotExist:
self.fail(
f"SupportContractAssignmentIndex.display_attrs references "
f"non-existent field '{attr}' on {model.__name__}"
)

def test_license_assignment_display_attrs_are_valid_fields(self):
"""
LicenseAssignmentIndex.display_attrs should only reference
fields that exist on the LicenseAssignment model.
"""
index = LicenseAssignmentIndex()
model = index.model

for attr in index.display_attrs:
# This should not raise FieldDoesNotExist
try:
model._meta.get_field(attr)
except FieldDoesNotExist:
self.fail(
f"LicenseAssignmentIndex.display_attrs references "
f"non-existent field '{attr}' on {model.__name__}"
)