test_forms.py 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. from django.contrib.contenttypes.models import ContentType
  2. from django.test import TestCase
  3. from dcim.forms import SiteForm
  4. from dcim.models import Site
  5. from extras.choices import CustomFieldTypeChoices
  6. from extras.models import CustomField
  7. class CustomFieldModelFormTest(TestCase):
  8. @classmethod
  9. def setUpTestData(cls):
  10. obj_type = ContentType.objects.get_for_model(Site)
  11. CHOICES = ('A', 'B', 'C')
  12. cf_text = CustomField.objects.create(name='text', type=CustomFieldTypeChoices.TYPE_TEXT)
  13. cf_text.content_types.set([obj_type])
  14. cf_integer = CustomField.objects.create(name='integer', type=CustomFieldTypeChoices.TYPE_INTEGER)
  15. cf_integer.content_types.set([obj_type])
  16. cf_boolean = CustomField.objects.create(name='boolean', type=CustomFieldTypeChoices.TYPE_BOOLEAN)
  17. cf_boolean.content_types.set([obj_type])
  18. cf_date = CustomField.objects.create(name='date', type=CustomFieldTypeChoices.TYPE_DATE)
  19. cf_date.content_types.set([obj_type])
  20. cf_url = CustomField.objects.create(name='url', type=CustomFieldTypeChoices.TYPE_URL)
  21. cf_url.content_types.set([obj_type])
  22. cf_select = CustomField.objects.create(name='select', type=CustomFieldTypeChoices.TYPE_SELECT, choices=CHOICES)
  23. cf_select.content_types.set([obj_type])
  24. cf_multiselect = CustomField.objects.create(name='multiselect', type=CustomFieldTypeChoices.TYPE_MULTISELECT,
  25. choices=CHOICES)
  26. cf_multiselect.content_types.set([obj_type])
  27. def test_empty_values(self):
  28. """
  29. Test that empty custom field values are stored as null
  30. """
  31. form = SiteForm({
  32. 'name': 'Site 1',
  33. 'slug': 'site-1',
  34. 'status': 'active',
  35. })
  36. self.assertTrue(form.is_valid())
  37. instance = form.save()
  38. for field_type, _ in CustomFieldTypeChoices.CHOICES:
  39. self.assertIn(field_type, instance.custom_field_data)
  40. self.assertIsNone(instance.custom_field_data[field_type])