| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- 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,
- 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,
- 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()
|