diff --git a/netbox/utilities/testing/base.py b/netbox/utilities/testing/base.py index aa2093a9a..52e5d66ca 100644 --- a/netbox/utilities/testing/base.py +++ b/netbox/utilities/testing/base.py @@ -10,10 +10,11 @@ from django.test import Client, TestCase as _TestCase from netaddr import IPNetwork from taggit.managers import TaggableManager +from netbox.models.features import CustomFieldsMixin from users.models import ObjectPermission from utilities.permissions import resolve_permission_ct from utilities.utils import content_type_identifier -from .utils import extract_form_failures +from .utils import DUMMY_CF_DATA, extract_form_failures __all__ = ( 'ModelTestCase', @@ -166,8 +167,12 @@ class ModelTestCase(TestCase): model_dict = self.model_to_dict(instance, fields=fields, api=api) # Omit any dictionary keys which are not instance attributes or have been excluded - relevant_data = { + model_data = { k: v for k, v in data.items() if hasattr(instance, k) and k not in exclude } - self.assertDictEqual(model_dict, relevant_data) + self.assertDictEqual(model_dict, model_data) + + # Validate any custom field data, if present + if getattr(instance, 'custom_field_data', None): + self.assertDictEqual(instance.custom_field_data, DUMMY_CF_DATA) diff --git a/netbox/utilities/testing/utils.py b/netbox/utilities/testing/utils.py index 2ded8ea45..238f8170e 100644 --- a/netbox/utilities/testing/utils.py +++ b/netbox/utilities/testing/utils.py @@ -144,7 +144,3 @@ def add_custom_field_data(form_data, model): f'cf_{k}': v if type(v) is str else json.dumps(v) for k, v in DUMMY_CF_DATA.items() }) - - -def validate_custom_field_data(test_case, instance): - test_case.assertDictEqual(instance.cf, DUMMY_CF_DATA) diff --git a/netbox/utilities/testing/views.py b/netbox/utilities/testing/views.py index 37b303ecb..22371db3c 100644 --- a/netbox/utilities/testing/views.py +++ b/netbox/utilities/testing/views.py @@ -14,7 +14,7 @@ from netbox.models.features import ChangeLoggingMixin, CustomFieldsMixin from users.models import ObjectPermission from utilities.choices import CSVDelimiterChoices, ImportFormatChoices from .base import ModelTestCase -from .utils import add_custom_field_data, disable_warnings, post_data, validate_custom_field_data +from .utils import add_custom_field_data, disable_warnings, post_data __all__ = ( 'ModelViewTestCase', @@ -179,8 +179,6 @@ class ViewTestCases: self.assertEqual(initial_count + 1, self._get_queryset().count()) instance = self._get_queryset().order_by('pk').last() self.assertInstanceEqual(instance, self.form_data, exclude=self.validation_excluded_fields) - if issubclass(self.model, CustomFieldsMixin): - validate_custom_field_data(self, instance) # Verify ObjectChange creation if issubclass(instance.__class__, ChangeLoggingMixin): @@ -282,8 +280,6 @@ class ViewTestCases: self.assertHttpStatus(self.client.post(**request), 302) instance = self._get_queryset().get(pk=instance.pk) self.assertInstanceEqual(instance, self.form_data, exclude=self.validation_excluded_fields) - if issubclass(self.model, CustomFieldsMixin): - validate_custom_field_data(self, instance) # Verify ObjectChange creation if issubclass(instance.__class__, ChangeLoggingMixin):