2
2
from django .core .exceptions import ValidationError
3
3
from django .test import SimpleTestCase , TestCase
4
4
5
+ from django_mongodb import forms
5
6
from django_mongodb .fields import ObjectIdField
6
7
7
8
from .models import NullableObjectIdModel , ObjectIdModel , PrimaryKeyObjectIdModel
@@ -15,6 +16,10 @@ def test_deconstruct(self):
15
16
self .assertEqual (args , [])
16
17
self .assertEqual (kwargs , {})
17
18
19
+ def test_formfield (self ):
20
+ f = ObjectIdField ().formfield ()
21
+ self .assertIsInstance (f , forms .ObjectIdField )
22
+
18
23
def test_get_internal_type (self ):
19
24
f = ObjectIdField ()
20
25
self .assertEqual (f .get_internal_type (), "ObjectIdField" )
@@ -32,9 +37,9 @@ def test_to_python_null(self):
32
37
33
38
def test_to_python_invalid_value (self ):
34
39
f = ObjectIdField ()
35
- for invalid_value in ["None" , {}, [], 123 ]:
40
+ for invalid_value in ["None" , "" , {}, [], 123 ]:
36
41
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.']"
38
43
with self .assertRaisesMessage (ValidationError , msg ):
39
44
f .to_python (invalid_value )
40
45
@@ -46,22 +51,16 @@ def test_get_prep_value_objectid(self):
46
51
value = ObjectId ("1" * 24 )
47
52
self .assertEqual (ObjectIdField ().get_prep_value (value ), value )
48
53
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
-
55
54
def test_get_prep_value_null (self ):
56
55
self .assertIsNone (ObjectIdField ().get_prep_value (None ))
57
56
58
57
def test_get_prep_value_invalid_values (self ):
59
58
f = ObjectIdField ()
60
59
f .name = "test"
61
- for invalid_value in ["None" , {}, [], 123 ]:
60
+ for invalid_value in ["None" , "" , {}, [], 123 ]:
62
61
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 ):
65
64
f .get_prep_value (invalid_value )
66
65
67
66
@@ -82,17 +81,16 @@ def test_null_handling(self):
82
81
self .assertIsNone (loaded .field )
83
82
84
83
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." ):
87
85
PrimaryKeyObjectIdModel .objects .get (pk = {})
88
86
89
- with self .assertRaisesMessage (TypeError , "must be an Object Id." ):
87
+ with self .assertRaisesMessage (ValidationError , "is not a valid Object Id." ):
90
88
PrimaryKeyObjectIdModel .objects .get (pk = [])
91
89
92
90
def test_wrong_value (self ):
93
91
# 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." ):
95
93
ObjectIdModel .objects .get (field = "not-a-objectid" )
96
94
97
- with self .assertRaisesMessage (ValidationError , "must be an Object Id." ):
95
+ with self .assertRaisesMessage (ValidationError , "is not a valid Object Id." ):
98
96
ObjectIdModel .objects .create (field = "not-a-objectid" )
0 commit comments