from django.core.exceptions import ValidationError from django.test import SimpleTestCase from pingcap_sso.forms.phone import PhoneField from pingcap_sso.validators.phone import ( PhoneNumberValidator, normalize_phone_number, ) class PhoneNumberTest(SimpleTestCase): def test_normalize_supported_phone_numbers(self): cases = { '13800138000': '13800138000', '+86 138 0013 8000': '13800138000', '0086 13800138000': '13800138000', '+852 5123 4567': '+85251234567', '00853 6123 4567': '+85361234567', } for raw_phone, expected in cases.items(): with self.subTest(raw_phone=raw_phone): self.assertEqual(normalize_phone_number(raw_phone), expected) def test_validate_supported_phone_numbers(self): validator = PhoneNumberValidator() for phone in ('13800138000', '+85251234567', '+85361234567'): with self.subTest(phone=phone): validator(phone) def test_reject_invalid_phone_numbers(self): validator = PhoneNumberValidator() for phone in ('23800138000', '+8521234567', '+853123456789', '+886912345678'): with self.subTest(phone=phone): with self.assertRaises(ValidationError): validator(phone) def test_phone_field_normalizes_before_validation(self): field = PhoneField() self.assertEqual(field.clean('+86 138 0013 8000'), '13800138000') self.assertEqual(field.clean('+852 5123 4567'), '+85251234567') self.assertEqual(field.clean('+853 6123 4567'), '+85361234567')