Skip to content

Commit 5fb8a86

Browse files
committed
🎨 [#235] improve the way we validate phonenumbers
1 parent 8d7f179 commit 5fb8a86

File tree

8 files changed

+59
-27
lines changed

8 files changed

+59
-27
lines changed

requirements/base.in

+2
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
11
open-api-framework
2+
3+
phonenumbers

requirements/base.txt

+4
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ asgiref==3.8.1
1515
# django-cors-headers
1616
asn1crypto==1.5.1
1717
# via webauthn
18+
async-timeout==5.0.1
19+
# via redis
1820
attrs==23.2.0
1921
# via
2022
# glom
@@ -245,6 +247,8 @@ oyaml==1.0
245247
# via commonground-api-common
246248
packaging==24.1
247249
# via drf-yasg
250+
phonenumbers==8.13.50
251+
# via -r requirements/base.in
248252
phonenumberslite==8.13.42
249253
# via django-two-factor-auth
250254
prometheus-client==0.20.0

requirements/ci.txt

+6
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,10 @@ asn1crypto==1.5.1
2626
# webauthn
2727
astroid==3.2.4
2828
# via pylint
29+
async-timeout==5.0.1
30+
# via
31+
# -r requirements/base.txt
32+
# redis
2933
attrs==23.2.0
3034
# via
3135
# -r requirements/base.txt
@@ -454,6 +458,8 @@ pathspec==0.12.1
454458
# via black
455459
pep8==1.7.1
456460
# via -r requirements/test-tools.in
461+
phonenumbers==8.13.50
462+
# via -r requirements/base.txt
457463
phonenumberslite==8.13.42
458464
# via
459465
# -r requirements/base.txt

requirements/dev.txt

+6
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,10 @@ asn1crypto==1.5.1
2626
# webauthn
2727
astroid==3.2.4
2828
# via pylint
29+
async-timeout==5.0.1
30+
# via
31+
# -r requirements/base.txt
32+
# redis
2933
attrs==23.2.0
3034
# via
3135
# -r requirements/base.txt
@@ -461,6 +465,8 @@ pathspec==0.12.1
461465
# via black
462466
pep8==1.7.1
463467
# via -r requirements/test-tools.in
468+
phonenumbers==8.13.50
469+
# via -r requirements/base.txt
464470
phonenumberslite==8.13.42
465471
# via
466472
# -r requirements/base.txt

src/openklant/components/klantinteracties/api/tests/test_actoren.py

+17-17
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ def test_create_actor_medewerker(self):
6060
"actorIdentificatie": {
6161
"functie": "functie",
6262
"emailadres": "phil@bozeman.com",
63-
"telefoonnummer": "3168234723",
63+
"telefoonnummer": "+31618234723",
6464
},
6565
}
6666

@@ -87,7 +87,7 @@ def test_create_actor_medewerker(self):
8787
{
8888
"functie": "functie",
8989
"emailadres": "phil@bozeman.com",
90-
"telefoonnummer": "3168234723",
90+
"telefoonnummer": "+31618234723",
9191
},
9292
)
9393

@@ -107,7 +107,7 @@ def test_create_actor_organisatorische_eenheid(self):
107107
"omschrijving": "omschrijving",
108108
"emailadres": "phil@bozeman.com",
109109
"faxnummer": "316893487573",
110-
"telefoonnummer": "3168234723",
110+
"telefoonnummer": "+31618234723",
111111
},
112112
}
113113

@@ -135,7 +135,7 @@ def test_create_actor_organisatorische_eenheid(self):
135135
"omschrijving": "omschrijving",
136136
"emailadres": "phil@bozeman.com",
137137
"faxnummer": "316893487573",
138-
"telefoonnummer": "3168234723",
138+
"telefoonnummer": "+31618234723",
139139
},
140140
)
141141

@@ -197,7 +197,7 @@ def test_update_actor_medewerker(self):
197197
actor=actor,
198198
functie="functie",
199199
emailadres="phil@bozeman.com",
200-
telefoonnummer="3168234723",
200+
telefoonnummer="+31618234723",
201201
)
202202

203203
detail_url = reverse(
@@ -223,7 +223,7 @@ def test_update_actor_medewerker(self):
223223
{
224224
"functie": "functie",
225225
"emailadres": "phil@bozeman.com",
226-
"telefoonnummer": "3168234723",
226+
"telefoonnummer": "+31618234723",
227227
},
228228
)
229229

@@ -240,7 +240,7 @@ def test_update_actor_medewerker(self):
240240
"actorIdentificatie": {
241241
"functie": "vocalist",
242242
"emailadres": "phil@whitechapel.com",
243-
"telefoonnummer": "315834573",
243+
"telefoonnummer": "+31583457312",
244244
},
245245
}
246246

@@ -267,7 +267,7 @@ def test_update_actor_medewerker(self):
267267
{
268268
"functie": "vocalist",
269269
"emailadres": "phil@whitechapel.com",
270-
"telefoonnummer": "315834573",
270+
"telefoonnummer": "+31583457312",
271271
},
272272
)
273273

@@ -286,7 +286,7 @@ def test_update_actor_organisatorische_eenheid(self):
286286
omschrijving="omschrijving",
287287
emailadres="phil@bozeman.com",
288288
faxnummer="316893487573",
289-
telefoonnummer="3168234723",
289+
telefoonnummer="+31618234723",
290290
)
291291

292292
detail_url = reverse(
@@ -313,7 +313,7 @@ def test_update_actor_organisatorische_eenheid(self):
313313
"omschrijving": "omschrijving",
314314
"emailadres": "phil@bozeman.com",
315315
"faxnummer": "316893487573",
316-
"telefoonnummer": "3168234723",
316+
"telefoonnummer": "+31618234723",
317317
},
318318
)
319319

@@ -331,7 +331,7 @@ def test_update_actor_organisatorische_eenheid(self):
331331
"omschrijving": "changed",
332332
"emailadres": "phil@whitechapel.com",
333333
"faxnummer": "316853458345",
334-
"telefoonnummer": "3169456732",
334+
"telefoonnummer": "+31619456732",
335335
},
336336
}
337337

@@ -359,7 +359,7 @@ def test_update_actor_organisatorische_eenheid(self):
359359
"omschrijving": "changed",
360360
"emailadres": "phil@whitechapel.com",
361361
"faxnummer": "316853458345",
362-
"telefoonnummer": "3169456732",
362+
"telefoonnummer": "+31619456732",
363363
},
364364
)
365365

@@ -461,7 +461,7 @@ def test_update_actor_medewerker_to_geautomatiseerde_actor(self):
461461
actor=actor,
462462
functie="functie",
463463
emailadres="phil@bozeman.com",
464-
telefoonnummer="3168234723",
464+
telefoonnummer="+31618234723",
465465
)
466466

467467
detail_url = reverse(
@@ -487,7 +487,7 @@ def test_update_actor_medewerker_to_geautomatiseerde_actor(self):
487487
{
488488
"functie": "functie",
489489
"emailadres": "phil@bozeman.com",
490-
"telefoonnummer": "3168234723",
490+
"telefoonnummer": "+31618234723",
491491
},
492492
)
493493

@@ -547,7 +547,7 @@ def test_partial_update_actor(self):
547547
actor=actor,
548548
functie="functie",
549549
emailadres="phil@bozeman.com",
550-
telefoonnummer="3168234723",
550+
telefoonnummer="+31618234723",
551551
)
552552
detail_url = reverse(
553553
"klantinteracties:actor-detail", kwargs={"uuid": str(actor.uuid)}
@@ -572,7 +572,7 @@ def test_partial_update_actor(self):
572572
{
573573
"functie": "functie",
574574
"emailadres": "phil@bozeman.com",
575-
"telefoonnummer": "3168234723",
575+
"telefoonnummer": "+31618234723",
576576
},
577577
)
578578

@@ -604,7 +604,7 @@ def test_partial_update_actor(self):
604604
{
605605
"functie": "functie",
606606
"emailadres": "phil@bozeman.com",
607-
"telefoonnummer": "3168234723",
607+
"telefoonnummer": "+31618234723",
608608
},
609609
)
610610

src/openklant/components/klantinteracties/api/tests/test_klantcontacten.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ def test_read_klantcontact(self):
7474
actor=actor,
7575
functie="functie",
7676
emailadres="phil@bozeman.com",
77-
telefoonnummer="3168234723",
77+
telefoonnummer="+31618234723",
7878
)
7979
klantcontact = KlantcontactFactory.create()
8080
ActorKlantcontactFactory.create(actor=actor, klantcontact=klantcontact)
@@ -107,7 +107,7 @@ def test_read_klantcontact(self):
107107
"actorIdentificatie": {
108108
"functie": "functie",
109109
"emailadres": "phil@bozeman.com",
110-
"telefoonnummer": "3168234723",
110+
"telefoonnummer": "+31618234723",
111111
},
112112
}
113113
],

src/openklant/utils/tests/test_validators.py

+11-5
Original file line numberDiff line numberDiff line change
@@ -74,11 +74,20 @@ def test_validate_postal_code(self):
7474
self.assertIsNone(validate_postal_code("1015 cJ"))
7575

7676
def test_validate_phone_number(self):
77+
valid_phone_numbers = [
78+
"+31612345678",
79+
"+441134960000", # US test number
80+
"+1 206 555 0100", # US test number
81+
"0031612345678",
82+
]
7783
invalid_phone_numbers = [
7884
"0695azerty",
7985
"azerty0545",
8086
"@4566544++8",
8187
"onetwothreefour",
88+
"06123456789",
89+
"020 753 0523",
90+
"+311234",
8291
]
8392
for invalid_phone_number in invalid_phone_numbers:
8493
self.assertRaisesMessage(
@@ -88,11 +97,8 @@ def test_validate_phone_number(self):
8897
invalid_phone_number,
8998
)
9099

91-
self.assertEqual(validate_phone_number(" 0695959595"), " 0695959595")
92-
self.assertEqual(validate_phone_number("+33695959595"), "+33695959595")
93-
self.assertEqual(validate_phone_number("00695959595"), "00695959595")
94-
self.assertEqual(validate_phone_number("00-69-59-59-59-5"), "00-69-59-59-59-5")
95-
self.assertEqual(validate_phone_number("00 69 59 59 59 5"), "00 69 59 59 59 5")
100+
for valid_phone_number in valid_phone_numbers:
101+
self.assertIsNone(validate_phone_number(valid_phone_number))
96102

97103
def test_validate_no_space_validator(self):
98104
invalid_strings = [

src/openklant/utils/validators.py

+11-3
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
from django.utils.encoding import force_str
44
from django.utils.translation import gettext_lazy as _
55

6+
import phonenumbers
7+
68

79
def validate_charfield_entry(value, allow_apostrophe=False):
810
"""
@@ -24,12 +26,18 @@ def validate_charfield_entry(value, allow_apostrophe=False):
2426

2527

2628
def validate_phone_number(value):
29+
if value.startswith("00"):
30+
value = value.replace("00", "+", 1)
31+
2732
try:
28-
int(value.strip().lstrip("0+").replace("-", "").replace(" ", ""))
29-
except (ValueError, TypeError):
33+
phone_number = phonenumbers.parse(value, None)
34+
except phonenumbers.NumberParseException:
3035
raise ValidationError(_("Het opgegeven mobiele telefoonnummer is ongeldig."))
3136

32-
return value
37+
if not phonenumbers.is_possible_number(
38+
phone_number
39+
) or not phonenumbers.is_valid_number(phone_number):
40+
raise ValidationError(_("Het opgegeven mobiele telefoonnummer is ongeldig."))
3341

3442

3543
class CustomRegexValidator(RegexValidator):

0 commit comments

Comments
 (0)