mirror of
https://github.com/netbox-community/netbox.git
synced 2024-05-10 07:54:54 +00:00
112 lines
3.9 KiB
Python
112 lines
3.9 KiB
Python
from django.test import TestCase
|
|
|
|
from core.models import ObjectType
|
|
from dcim.forms import SiteForm
|
|
from dcim.models import Site
|
|
from extras.choices import CustomFieldTypeChoices
|
|
from extras.forms import SavedFilterForm
|
|
from extras.models import CustomField, CustomFieldChoiceSet
|
|
|
|
|
|
class CustomFieldModelFormTest(TestCase):
|
|
|
|
@classmethod
|
|
def setUpTestData(cls):
|
|
object_type = ObjectType.objects.get_for_model(Site)
|
|
choice_set = CustomFieldChoiceSet.objects.create(
|
|
name='Choice Set 1',
|
|
extra_choices=(('a', 'A'), ('b', 'B'), ('c', 'C'))
|
|
)
|
|
|
|
cf_text = CustomField.objects.create(name='text', type=CustomFieldTypeChoices.TYPE_TEXT)
|
|
cf_text.object_types.set([object_type])
|
|
|
|
cf_longtext = CustomField.objects.create(name='longtext', type=CustomFieldTypeChoices.TYPE_LONGTEXT)
|
|
cf_longtext.object_types.set([object_type])
|
|
|
|
cf_integer = CustomField.objects.create(name='integer', type=CustomFieldTypeChoices.TYPE_INTEGER)
|
|
cf_integer.object_types.set([object_type])
|
|
|
|
cf_integer = CustomField.objects.create(name='decimal', type=CustomFieldTypeChoices.TYPE_DECIMAL)
|
|
cf_integer.object_types.set([object_type])
|
|
|
|
cf_boolean = CustomField.objects.create(name='boolean', type=CustomFieldTypeChoices.TYPE_BOOLEAN)
|
|
cf_boolean.object_types.set([object_type])
|
|
|
|
cf_date = CustomField.objects.create(name='date', type=CustomFieldTypeChoices.TYPE_DATE)
|
|
cf_date.object_types.set([object_type])
|
|
|
|
cf_datetime = CustomField.objects.create(name='datetime', type=CustomFieldTypeChoices.TYPE_DATETIME)
|
|
cf_datetime.object_types.set([object_type])
|
|
|
|
cf_url = CustomField.objects.create(name='url', type=CustomFieldTypeChoices.TYPE_URL)
|
|
cf_url.object_types.set([object_type])
|
|
|
|
cf_json = CustomField.objects.create(name='json', type=CustomFieldTypeChoices.TYPE_JSON)
|
|
cf_json.object_types.set([object_type])
|
|
|
|
cf_select = CustomField.objects.create(
|
|
name='select',
|
|
type=CustomFieldTypeChoices.TYPE_SELECT,
|
|
choice_set=choice_set
|
|
)
|
|
cf_select.object_types.set([object_type])
|
|
|
|
cf_multiselect = CustomField.objects.create(
|
|
name='multiselect',
|
|
type=CustomFieldTypeChoices.TYPE_MULTISELECT,
|
|
choice_set=choice_set
|
|
)
|
|
cf_multiselect.object_types.set([object_type])
|
|
|
|
cf_object = CustomField.objects.create(
|
|
name='object',
|
|
type=CustomFieldTypeChoices.TYPE_OBJECT,
|
|
related_object_type=ObjectType.objects.get_for_model(Site)
|
|
)
|
|
cf_object.object_types.set([object_type])
|
|
|
|
cf_multiobject = CustomField.objects.create(
|
|
name='multiobject',
|
|
type=CustomFieldTypeChoices.TYPE_MULTIOBJECT,
|
|
related_object_type=ObjectType.objects.get_for_model(Site)
|
|
)
|
|
cf_multiobject.object_types.set([object_type])
|
|
|
|
def test_empty_values(self):
|
|
"""
|
|
Test that empty custom field values are stored as null
|
|
"""
|
|
form = SiteForm({
|
|
'name': 'Site 1',
|
|
'slug': 'site-1',
|
|
'status': 'active',
|
|
})
|
|
self.assertTrue(form.is_valid())
|
|
instance = form.save()
|
|
|
|
for field_type, _ in CustomFieldTypeChoices.CHOICES:
|
|
self.assertIn(field_type, instance.custom_field_data)
|
|
self.assertIsNone(instance.custom_field_data[field_type])
|
|
|
|
|
|
class SavedFilterFormTest(TestCase):
|
|
|
|
def test_basic_submit(self):
|
|
"""
|
|
Test form submission and validation
|
|
"""
|
|
form = SavedFilterForm({
|
|
'name': 'test-sf',
|
|
'slug': 'test-sf',
|
|
'object_types': [ObjectType.objects.get_for_model(Site).pk],
|
|
'weight': 100,
|
|
'parameters': {
|
|
"status": [
|
|
"active"
|
|
]
|
|
}
|
|
})
|
|
self.assertTrue(form.is_valid())
|
|
form.save()
|