@@ -427,6 +427,97 @@ def test_rename_customfield(self):
427427 self .assertNotIn ('field1' , site .custom_field_data )
428428 self .assertEqual (site .custom_field_data ['field2' ], FIELD_DATA )
429429
430+ def test_default_value_validation (self ):
431+ choiceset = CustomFieldChoiceSet .objects .create (
432+ name = "Test Choice Set" ,
433+ extra_choices = (
434+ ('choice1' , 'Choice 1' ),
435+ ('choice2' , 'Choice 2' ),
436+ )
437+ )
438+ site = Site .objects .create (name = 'Site 1' , slug = 'site-1' )
439+ object_type = ContentType .objects .get_for_model (Site )
440+
441+ # Text
442+ CustomField (name = 'test' , type = 'text' , required = True , default = "Default text" ).full_clean ()
443+
444+ # Integer
445+ CustomField (name = 'test' , type = 'integer' , required = True , default = 1 ).full_clean ()
446+ with self .assertRaises (ValidationError ):
447+ CustomField (name = 'test' , type = 'integer' , required = True , default = 'xxx' ).full_clean ()
448+
449+ # Boolean
450+ CustomField (name = 'test' , type = 'boolean' , required = True , default = True ).full_clean ()
451+ with self .assertRaises (ValidationError ):
452+ CustomField (name = 'test' , type = 'boolean' , required = True , default = 'xxx' ).full_clean ()
453+
454+ # Date
455+ CustomField (name = 'test' , type = 'date' , required = True , default = "2023-02-25" ).full_clean ()
456+ with self .assertRaises (ValidationError ):
457+ CustomField (name = 'test' , type = 'date' , required = True , default = 'xxx' ).full_clean ()
458+
459+ # Datetime
460+ CustomField (name = 'test' , type = 'datetime' , required = True , default = "2023-02-25 02:02:02" ).full_clean ()
461+ with self .assertRaises (ValidationError ):
462+ CustomField (name = 'test' , type = 'datetime' , required = True , default = 'xxx' ).full_clean ()
463+
464+ # URL
465+ CustomField (name = 'test' , type = 'url' , required = True , default = "https://www.netbox.dev" ).full_clean ()
466+
467+ # JSON
468+ CustomField (name = 'test' , type = 'json' , required = True , default = '{"test": "object"}' ).full_clean ()
469+
470+ # Selection
471+ CustomField (name = 'test' , type = 'select' , required = True , choice_set = choiceset , default = 'choice1' ).full_clean ()
472+ with self .assertRaises (ValidationError ):
473+ CustomField (name = 'test' , type = 'select' , required = True , choice_set = choiceset , default = 'xxx' ).full_clean ()
474+
475+ # Multi-select
476+ CustomField (
477+ name = 'test' ,
478+ type = 'multiselect' ,
479+ required = True ,
480+ choice_set = choiceset ,
481+ default = ['choice1' ] # Single default choice
482+ ).full_clean ()
483+ CustomField (
484+ name = 'test' ,
485+ type = 'multiselect' ,
486+ required = True ,
487+ choice_set = choiceset ,
488+ default = ['choice1' , 'choice2' ] # Multiple default choices
489+ ).full_clean ()
490+ with self .assertRaises (ValidationError ):
491+ CustomField (
492+ name = 'test' ,
493+ type = 'multiselect' ,
494+ required = True ,
495+ choice_set = choiceset ,
496+ default = ['xxx' ]
497+ ).full_clean ()
498+
499+ # Object
500+ CustomField (name = 'test' , type = 'object' , required = True , object_type = object_type , default = site .pk ).full_clean ()
501+ with self .assertRaises (ValidationError ):
502+ CustomField (name = 'test' , type = 'object' , required = True , object_type = object_type , default = "xxx" ).full_clean ()
503+
504+ # Multi-object
505+ CustomField (
506+ name = 'test' ,
507+ type = 'multiobject' ,
508+ required = True ,
509+ object_type = object_type ,
510+ default = [site .pk ]
511+ ).full_clean ()
512+ with self .assertRaises (ValidationError ):
513+ CustomField (
514+ name = 'test' ,
515+ type = 'multiobject' ,
516+ required = True ,
517+ object_type = object_type ,
518+ default = ["xxx" ]
519+ ).full_clean ()
520+
430521
431522class CustomFieldManagerTest (TestCase ):
432523
0 commit comments