22from django .core .exceptions import ValidationError
33from django .test import SimpleTestCase , TestCase
44
5+ from django_mongodb import forms
56from django_mongodb .fields import ObjectIdField
67
78from .models import NullableObjectIdModel , ObjectIdModel , PrimaryKeyObjectIdModel
@@ -15,6 +16,10 @@ def test_deconstruct(self):
1516 self .assertEqual (args , [])
1617 self .assertEqual (kwargs , {})
1718
19+ def test_formfield (self ):
20+ f = ObjectIdField ().formfield ()
21+ self .assertIsInstance (f , forms .ObjectIdField )
22+
1823 def test_get_internal_type (self ):
1924 f = ObjectIdField ()
2025 self .assertEqual (f .get_internal_type (), "ObjectIdField" )
@@ -32,9 +37,9 @@ def test_to_python_null(self):
3237
3338 def test_to_python_invalid_value (self ):
3439 f = ObjectIdField ()
35- for invalid_value in ["None" , {}, [], 123 ]:
40+ for invalid_value in ["None" , "" , {}, [], 123 ]:
3641 with self .subTest (invalid_value = invalid_value ):
37- msg = f"['“{ invalid_value } ” value must be an Object Id.']"
42+ msg = f"['“{ invalid_value } ” is not a valid Object Id.']"
3843 with self .assertRaisesMessage (ValidationError , msg ):
3944 f .to_python (invalid_value )
4045
@@ -46,22 +51,16 @@ def test_get_prep_value_objectid(self):
4651 value = ObjectId ("1" * 24 )
4752 self .assertEqual (ObjectIdField ().get_prep_value (value ), value )
4853
49- def test_get_prep_value_empty (self ):
50- # This is necessary to allow an empty ObjectIdField to be saved in
51- # forms, unless we add an ObjectId form field to do the conversion (see
52- # UUIDField for an example).
53- self .assertIsNone (ObjectIdField ().get_prep_value ("" ))
54-
5554 def test_get_prep_value_null (self ):
5655 self .assertIsNone (ObjectIdField ().get_prep_value (None ))
5756
5857 def test_get_prep_value_invalid_values (self ):
5958 f = ObjectIdField ()
6059 f .name = "test"
61- for invalid_value in ["None" , {}, [], 123 ]:
60+ for invalid_value in ["None" , "" , {}, [], 123 ]:
6261 with self .subTest (invalid_value = invalid_value ):
63- msg = f"Field 'test' expected an ObjectId but got { invalid_value !r } . "
64- with self .assertRaisesMessage (ValueError , msg ):
62+ msg = f"['“ { invalid_value } ” is not a valid Object Id.'] "
63+ with self .assertRaisesMessage (ValidationError , msg ):
6564 f .get_prep_value (invalid_value )
6665
6766
@@ -82,17 +81,16 @@ def test_null_handling(self):
8281 self .assertIsNone (loaded .field )
8382
8483 def test_pk_validated (self ):
85- # See https://code.djangoproject.com/ticket/24859
86- with self .assertRaisesMessage (TypeError , "must be an Object Id." ):
84+ with self .assertRaisesMessage (ValidationError , "is not a valid Object Id." ):
8785 PrimaryKeyObjectIdModel .objects .get (pk = {})
8886
89- with self .assertRaisesMessage (TypeError , "must be an Object Id." ):
87+ with self .assertRaisesMessage (ValidationError , "is not a valid Object Id." ):
9088 PrimaryKeyObjectIdModel .objects .get (pk = [])
9189
9290 def test_wrong_value (self ):
9391 # Copied from UUID tests. Raises ValueError, might be okay.
94- with self .assertRaisesMessage (ValidationError , "must be an Object Id." ):
92+ with self .assertRaisesMessage (ValidationError , "is not a valid Object Id." ):
9593 ObjectIdModel .objects .get (field = "not-a-objectid" )
9694
97- with self .assertRaisesMessage (ValidationError , "must be an Object Id." ):
95+ with self .assertRaisesMessage (ValidationError , "is not a valid Object Id." ):
9896 ObjectIdModel .objects .create (field = "not-a-objectid" )
0 commit comments