|
|
@@ -427,6 +427,97 @@ class CustomFieldTest(TestCase):
|
|
|
self.assertNotIn('field1', site.custom_field_data)
|
|
|
self.assertEqual(site.custom_field_data['field2'], FIELD_DATA)
|
|
|
|
|
|
+ def test_default_value_validation(self):
|
|
|
+ choiceset = CustomFieldChoiceSet.objects.create(
|
|
|
+ name="Test Choice Set",
|
|
|
+ extra_choices=(
|
|
|
+ ('choice1', 'Choice 1'),
|
|
|
+ ('choice2', 'Choice 2'),
|
|
|
+ )
|
|
|
+ )
|
|
|
+ site = Site.objects.create(name='Site 1', slug='site-1')
|
|
|
+ object_type = ContentType.objects.get_for_model(Site)
|
|
|
+
|
|
|
+ # Text
|
|
|
+ CustomField(name='test', type='text', required=True, default="Default text").full_clean()
|
|
|
+
|
|
|
+ # Integer
|
|
|
+ CustomField(name='test', type='integer', required=True, default=1).full_clean()
|
|
|
+ with self.assertRaises(ValidationError):
|
|
|
+ CustomField(name='test', type='integer', required=True, default='xxx').full_clean()
|
|
|
+
|
|
|
+ # Boolean
|
|
|
+ CustomField(name='test', type='boolean', required=True, default=True).full_clean()
|
|
|
+ with self.assertRaises(ValidationError):
|
|
|
+ CustomField(name='test', type='boolean', required=True, default='xxx').full_clean()
|
|
|
+
|
|
|
+ # Date
|
|
|
+ CustomField(name='test', type='date', required=True, default="2023-02-25").full_clean()
|
|
|
+ with self.assertRaises(ValidationError):
|
|
|
+ CustomField(name='test', type='date', required=True, default='xxx').full_clean()
|
|
|
+
|
|
|
+ # Datetime
|
|
|
+ CustomField(name='test', type='datetime', required=True, default="2023-02-25 02:02:02").full_clean()
|
|
|
+ with self.assertRaises(ValidationError):
|
|
|
+ CustomField(name='test', type='datetime', required=True, default='xxx').full_clean()
|
|
|
+
|
|
|
+ # URL
|
|
|
+ CustomField(name='test', type='url', required=True, default="https://www.netbox.dev").full_clean()
|
|
|
+
|
|
|
+ # JSON
|
|
|
+ CustomField(name='test', type='json', required=True, default='{"test": "object"}').full_clean()
|
|
|
+
|
|
|
+ # Selection
|
|
|
+ CustomField(name='test', type='select', required=True, choice_set=choiceset, default='choice1').full_clean()
|
|
|
+ with self.assertRaises(ValidationError):
|
|
|
+ CustomField(name='test', type='select', required=True, choice_set=choiceset, default='xxx').full_clean()
|
|
|
+
|
|
|
+ # Multi-select
|
|
|
+ CustomField(
|
|
|
+ name='test',
|
|
|
+ type='multiselect',
|
|
|
+ required=True,
|
|
|
+ choice_set=choiceset,
|
|
|
+ default=['choice1'] # Single default choice
|
|
|
+ ).full_clean()
|
|
|
+ CustomField(
|
|
|
+ name='test',
|
|
|
+ type='multiselect',
|
|
|
+ required=True,
|
|
|
+ choice_set=choiceset,
|
|
|
+ default=['choice1', 'choice2'] # Multiple default choices
|
|
|
+ ).full_clean()
|
|
|
+ with self.assertRaises(ValidationError):
|
|
|
+ CustomField(
|
|
|
+ name='test',
|
|
|
+ type='multiselect',
|
|
|
+ required=True,
|
|
|
+ choice_set=choiceset,
|
|
|
+ default=['xxx']
|
|
|
+ ).full_clean()
|
|
|
+
|
|
|
+ # Object
|
|
|
+ CustomField(name='test', type='object', required=True, object_type=object_type, default=site.pk).full_clean()
|
|
|
+ with self.assertRaises(ValidationError):
|
|
|
+ CustomField(name='test', type='object', required=True, object_type=object_type, default="xxx").full_clean()
|
|
|
+
|
|
|
+ # Multi-object
|
|
|
+ CustomField(
|
|
|
+ name='test',
|
|
|
+ type='multiobject',
|
|
|
+ required=True,
|
|
|
+ object_type=object_type,
|
|
|
+ default=[site.pk]
|
|
|
+ ).full_clean()
|
|
|
+ with self.assertRaises(ValidationError):
|
|
|
+ CustomField(
|
|
|
+ name='test',
|
|
|
+ type='multiobject',
|
|
|
+ required=True,
|
|
|
+ object_type=object_type,
|
|
|
+ default=["xxx"]
|
|
|
+ ).full_clean()
|
|
|
+
|
|
|
|
|
|
class CustomFieldManagerTest(TestCase):
|
|
|
|