@@ -11,6 +11,7 @@ class RutFieldTest(unittest.TestCase):
1111 valid_rut_canonical : str
1212 valid_rut_instance : Rut
1313 valid_rut_canonical_with_invalid_dv : str
14+ valid_rut_canonical_instance_with_invalid_dv : Rut
1415 valid_rut_verbose_leading_zero_lowercase : str
1516 mock_model_instance : django .db .models .Model
1617
@@ -19,6 +20,10 @@ def setUpClass(cls) -> None:
1920 cls .valid_rut_canonical = '60803000-K'
2021 cls .valid_rut_instance = Rut (cls .valid_rut_canonical )
2122 cls .valid_rut_canonical_with_invalid_dv = '60803000-0'
23+ cls .valid_rut_canonical_instance_with_invalid_dv = Rut (
24+ cls .valid_rut_canonical_with_invalid_dv
25+ )
26+ assert not cls .valid_rut_canonical_instance_with_invalid_dv .validate_dv ()
2227 cls .valid_rut_verbose_leading_zero_lowercase = '060.803.000-k'
2328 cls .mock_model_instance = unittest .mock .create_autospec (
2429 django .db .models .Model , instance = True
@@ -43,6 +48,14 @@ def test_get_prep_value_of_None(self) -> None:
4348 prepared_value = RutField ().get_prep_value (None )
4449 self .assertIsNone (prepared_value )
4550
51+ def test_clean_value_with_invalid_type (self ) -> None :
52+ for value_with_invalid_type in [12345678 , 12.34 , [], {}, object ()]:
53+ with self .subTest (value = value_with_invalid_type ):
54+ rut_field = RutField ()
55+ with self .assertRaises (django .core .exceptions .ValidationError ) as cm :
56+ rut_field .clean (value_with_invalid_type , self .mock_model_instance )
57+ self .assertEqual (cm .exception .code , 'invalid' )
58+
4659 def test_clean_value_of_rut_str_with_invalid_dv_if_validated (self ) -> None :
4760 rut_field = RutField (validate_dv = True )
4861 with self .assertRaises (django .core .exceptions .ValidationError ) as cm :
@@ -57,6 +70,30 @@ def test_clean_value_of_rut_str_with_invalid_dv_if_not_validated(self) -> None:
5770 self .assertIsInstance (cleaned_value , Rut )
5871 self .assertEqual (cleaned_value .canonical , self .valid_rut_canonical_with_invalid_dv )
5972
73+ def test_clean_value_of_rut_instance_with_valid_dv (self ) -> None :
74+ for validate_dv in [True , False ]:
75+ with self .subTest (validate_dv = validate_dv ):
76+ rut_field = RutField (validate_dv = validate_dv )
77+ cleaned_value = rut_field .clean (self .valid_rut_instance , self .mock_model_instance )
78+ self .assertIsInstance (cleaned_value , Rut )
79+ self .assertEqual (cleaned_value , self .valid_rut_instance )
80+
81+ def test_clean_value_of_rut_instance_with_invalid_dv_if_validated (self ) -> None :
82+ rut_field = RutField (validate_dv = True )
83+ with self .assertRaises (django .core .exceptions .ValidationError ) as cm :
84+ rut_field .clean (
85+ self .valid_rut_canonical_instance_with_invalid_dv , self .mock_model_instance
86+ )
87+ self .assertEqual (cm .exception .code , 'invalid_dv' )
88+
89+ def test_clean_value_of_rut_instance_with_invalid_dv_if_not_validated (self ) -> None :
90+ rut_field = RutField (validate_dv = False )
91+ cleaned_value = rut_field .clean (
92+ self .valid_rut_canonical_instance_with_invalid_dv , self .mock_model_instance
93+ )
94+ self .assertIsInstance (cleaned_value , Rut )
95+ self .assertEqual (cleaned_value , self .valid_rut_canonical_instance_with_invalid_dv )
96+
6097 def test_deconstruct_without_options (self ) -> None :
6198 name , path , args , kwargs = RutField ().deconstruct ()
6299 self .assertEqual (path , 'cl_sii.extras.dj_model_fields.RutField' )
0 commit comments