1
- from django .test import SimpleTestCase
1
+ from django .test import SimpleTestCase , override_settings
2
2
from rest_framework import serializers
3
3
4
+ from phonenumber_field .phonenumber import PhoneNumber
4
5
from phonenumber_field .serializerfields import PhoneNumberField
5
6
6
7
from .models import OptionalPhoneNumber
@@ -25,3 +26,74 @@ class PhoneNumberSerializer(serializers.Serializer):
25
26
26
27
s = PhoneNumberSerializer (data = {"phone" : 1 })
27
28
self .assertIs (s .is_valid (), False )
29
+
30
+ def test_empty_required (self ):
31
+ class PhoneNumberSerializer (serializers .Serializer ):
32
+ phone = PhoneNumberField ()
33
+
34
+ serializer = PhoneNumberSerializer (data = {"phone" : "" })
35
+ self .assertIs (serializer .is_valid (), False )
36
+ self .assertEqual (serializer .validated_data , {})
37
+
38
+ def test_empty_optional (self ):
39
+ class PhoneNumberSerializer (serializers .Serializer ):
40
+ phone = PhoneNumberField (allow_blank = True )
41
+
42
+ serializer = PhoneNumberSerializer (data = {"phone" : "" })
43
+ self .assertIs (serializer .is_valid (), True )
44
+ self .assertEqual (serializer .validated_data , {"phone" : "" })
45
+
46
+ def test_e164_phone_number (self ):
47
+ class PhoneNumberSerializer (serializers .Serializer ):
48
+ phone = PhoneNumberField ()
49
+
50
+ serializer = PhoneNumberSerializer (data = {"phone" : "+33612345678" })
51
+ self .assertIs (serializer .is_valid (), True )
52
+ self .assertEqual (serializer .validated_data , {"phone" : "+33612345678" })
53
+ self .assertIsInstance (serializer .validated_data ["phone" ], PhoneNumber )
54
+
55
+ def test_region (self ):
56
+ class PhoneNumberSerializer (serializers .Serializer ):
57
+ phone = PhoneNumberField (region = "FR" )
58
+
59
+ serializer = PhoneNumberSerializer (data = {"phone" : "0612345678" })
60
+ self .assertIs (serializer .is_valid (), True )
61
+ self .assertEqual (serializer .validated_data , {"phone" : "+33612345678" })
62
+ self .assertIsInstance (serializer .validated_data ["phone" ], PhoneNumber )
63
+
64
+ def test_region_invalid (self ):
65
+ class PhoneNumberSerializer (serializers .Serializer ):
66
+ phone = PhoneNumberField (region = "GB" )
67
+
68
+ serializer = PhoneNumberSerializer (data = {"phone" : "0612345678" })
69
+ self .assertIs (serializer .is_valid (), False )
70
+ self .assertEqual (serializer .validated_data , {})
71
+ self .assertEqual (serializer .errors , {"phone" : ["Enter a valid phone number." ]})
72
+
73
+ @override_settings (PHONENUMBER_DEFAULT_REGION = "FR" )
74
+ def test_region_from_settings (self ):
75
+ class PhoneNumberSerializer (serializers .Serializer ):
76
+ phone = PhoneNumberField ()
77
+
78
+ serializer = PhoneNumberSerializer (data = {"phone" : "0612345678" })
79
+ self .assertIs (serializer .is_valid (), True )
80
+ self .assertEqual (serializer .validated_data , {"phone" : "+33612345678" })
81
+ self .assertIsInstance (serializer .validated_data ["phone" ], PhoneNumber )
82
+
83
+ @override_settings (PHONENUMBER_DEFAULT_REGION = "GB" )
84
+ def test_region_kwarg_precedes_setting (self ):
85
+ class PhoneNumberSerializer (serializers .Serializer ):
86
+ phone = PhoneNumberField (region = "FR" )
87
+
88
+ serializer = PhoneNumberSerializer (data = {"phone" : "0612345678" })
89
+ self .assertIs (serializer .is_valid (), True )
90
+ self .assertEqual (serializer .validated_data , {"phone" : "+33612345678" })
91
+ self .assertIsInstance (serializer .validated_data ["phone" ], PhoneNumber )
92
+
93
+ def test_invalid_region (self ):
94
+ with self .assertRaisesMessage (
95
+ ValueError , "“INVALID” is not a valid region code. Choices are"
96
+ ):
97
+
98
+ class PhoneNumberSerializer (serializers .Serializer ):
99
+ phone = PhoneNumberField (region = "INVALID" )
0 commit comments