|
|
@@ -0,0 +1,53 @@
|
|
|
+from django.contrib.contenttypes.models import ContentType
|
|
|
+from django.test import TestCase
|
|
|
+
|
|
|
+from dcim.forms import SiteForm
|
|
|
+from dcim.models import Site
|
|
|
+from extras.choices import CustomFieldTypeChoices
|
|
|
+from extras.models import CustomField
|
|
|
+
|
|
|
+
|
|
|
+class CustomFieldModelFormTest(TestCase):
|
|
|
+
|
|
|
+ @classmethod
|
|
|
+ def setUpTestData(cls):
|
|
|
+ obj_type = ContentType.objects.get_for_model(Site)
|
|
|
+ CHOICES = ('A', 'B', 'C')
|
|
|
+
|
|
|
+ cf_text = CustomField.objects.create(name='text', type=CustomFieldTypeChoices.TYPE_TEXT)
|
|
|
+ cf_text.content_types.set([obj_type])
|
|
|
+
|
|
|
+ cf_integer = CustomField.objects.create(name='integer', type=CustomFieldTypeChoices.TYPE_INTEGER)
|
|
|
+ cf_integer.content_types.set([obj_type])
|
|
|
+
|
|
|
+ cf_boolean = CustomField.objects.create(name='boolean', type=CustomFieldTypeChoices.TYPE_BOOLEAN)
|
|
|
+ cf_boolean.content_types.set([obj_type])
|
|
|
+
|
|
|
+ cf_date = CustomField.objects.create(name='date', type=CustomFieldTypeChoices.TYPE_DATE)
|
|
|
+ cf_date.content_types.set([obj_type])
|
|
|
+
|
|
|
+ cf_url = CustomField.objects.create(name='url', type=CustomFieldTypeChoices.TYPE_URL)
|
|
|
+ cf_url.content_types.set([obj_type])
|
|
|
+
|
|
|
+ cf_select = CustomField.objects.create(name='select', type=CustomFieldTypeChoices.TYPE_SELECT, choices=CHOICES)
|
|
|
+ cf_select.content_types.set([obj_type])
|
|
|
+
|
|
|
+ cf_multiselect = CustomField.objects.create(name='multiselect', type=CustomFieldTypeChoices.TYPE_MULTISELECT,
|
|
|
+ choices=CHOICES)
|
|
|
+ cf_multiselect.content_types.set([obj_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])
|