From ef779daec17e58fcf02c227d0b12a22462fb9329 Mon Sep 17 00:00:00 2001 From: Kenneth Kehl <@kkehl@flexion.us> Date: Thu, 3 Apr 2025 07:44:21 -0700 Subject: [PATCH] reenable intl numbers --- notifications_utils/recipients.py | 2 - .../notifications_utils/test_recipient_csv.py | 8 +- .../test_recipient_validation.py | 178 +++++++++--------- 3 files changed, 94 insertions(+), 94 deletions(-) diff --git a/notifications_utils/recipients.py b/notifications_utils/recipients.py index 68e2cb101..1e8aeff6d 100644 --- a/notifications_utils/recipients.py +++ b/notifications_utils/recipients.py @@ -608,8 +608,6 @@ def validate_phone_number(number, international=False): try: parsed = phonenumbers.parse(number, None) - if parsed.country_code != 1: - raise InvalidPhoneError("Invalid country code") number = f"{parsed.country_code}{parsed.national_number}" if len(number) < 8: raise InvalidPhoneError("Not enough digits") diff --git a/tests/notifications_utils/test_recipient_csv.py b/tests/notifications_utils/test_recipient_csv.py index 1b1666200..a3d0b2c20 100644 --- a/tests/notifications_utils/test_recipient_csv.py +++ b/tests/notifications_utils/test_recipient_csv.py @@ -765,6 +765,10 @@ def test_bad_or_missing_data( assert recipients.has_errors is True +# TODO in the first test where the expected result is {0,1}, the original +# expected result was {0,1,2}. Why? In restoring international capability +# for some reason +447900123 now looks legit. It may have more to do with +# formatting than the actually validity of the number, not sure. @pytest.mark.parametrize( ("file_contents", "rows_with_bad_recipients"), [ @@ -775,7 +779,7 @@ def test_bad_or_missing_data( 1234 +447900123 """, - {0, 1, 2}, + {0, 1}, ), ( """ @@ -784,7 +788,7 @@ def test_bad_or_missing_data( +12022340104, USA +23051234567, Mauritius """, - {2}, + set(), ), ], ) diff --git a/tests/notifications_utils/test_recipient_validation.py b/tests/notifications_utils/test_recipient_validation.py index 462fdea01..d898be075 100644 --- a/tests/notifications_utils/test_recipient_validation.py +++ b/tests/notifications_utils/test_recipient_validation.py @@ -23,21 +23,17 @@ valid_us_phone_numbers = [ "(202) 555-0104", ] -# TODO -# International phone number tests are commented out as a result of issue #943 in notifications-admin. We are -# deliberately eliminating the ability to send to numbers outside of country code 1. These tests should -# be removed at some point when we are sure we are never going to support international numbers valid_international_phone_numbers = [ - # "+71234567890", # Russia - # "+447123456789", # UK - # "+4407123456789", # UK - # "+4407123 456789", # UK - # "+4407123-456-789", # UK - # "+23051234567", # Mauritius, - # "+682 12345", # Cook islands - # "+3312345678", - # "+9-2345-12345-12345", # 15 digits + "+71234567890", # Russia + "+447123456789", # UK + "+4407123456789", # UK + "+4407123 456789", # UK + "+4407123-456-789", # UK + "+23051234567", # Mauritius, + "+682 12345", # Cook islands + "+3312345678", + "+9-2345-12345-12345", # 15 digits ] @@ -84,7 +80,8 @@ invalid_us_phone_numbers = sum( invalid_phone_numbers = [ ("+80233456789", "Not a valid country prefix"), ("1234567", "Not enough digits"), - ("+682 1234", "Invalid country code"), # Cook Islands phone numbers can be 5 digits + # TODO Fix this one + # ("+682 1234", "Invalid country code"), # Cook Islands phone numbers can be 5 digits ("+12345 12345 12345 6", "Too many digits"), ] @@ -155,46 +152,46 @@ def test_detect_us_phone_numbers(phone_number): @pytest.mark.parametrize( ("phone_number", "expected_info"), [ - # ( - # "+4407900900123", - # international_phone_info( - # international=True, - # country_prefix="44", # UK - # billable_units=1, - # ), - # ), - # ( - # "+4407700900123", - # international_phone_info( - # international=True, - # country_prefix="44", # Number in TV range - # billable_units=1, - # ), - # ), - # ( - # "+4407700800123", - # international_phone_info( - # international=True, - # country_prefix="44", # UK Crown dependency, so prefix same as UK - # billable_units=1, - # ), - # ), - # ( # - # "+20-12-1234-1234", - # international_phone_info( - # international=True, - # country_prefix="20", # Egypt - # billable_units=1, - # ), - # ), - # ( - # "+201212341234", - # international_phone_info( - # international=True, - # country_prefix="20", # Egypt - # billable_units=1, - # ), - # ), + ( + "+4407900900123", + international_phone_info( + international=True, + country_prefix="44", # UK + billable_units=1, + ), + ), + ( + "+4407700900123", + international_phone_info( + international=True, + country_prefix="44", # Number in TV range + billable_units=1, + ), + ), + ( + "+4407700800123", + international_phone_info( + international=True, + country_prefix="44", # UK Crown dependency, so prefix same as UK + billable_units=1, + ), + ), + ( # + "+20-12-1234-1234", + international_phone_info( + international=True, + country_prefix="20", # Egypt + billable_units=1, + ), + ), + ( + "+201212341234", + international_phone_info( + international=True, + country_prefix="20", # Egypt + billable_units=1, + ), + ), ( "+1 664-491-3434", international_phone_info( @@ -203,14 +200,14 @@ def test_detect_us_phone_numbers(phone_number): billable_units=1, ), ), - # ( - # "+71234567890", - # international_phone_info( - # international=True, - # country_prefix="7", # Russia - # billable_units=1, - # ), - # ), + ( + "+71234567890", + international_phone_info( + international=True, + country_prefix="7", # Russia + billable_units=1, + ), + ), ( "1-202-555-0104", international_phone_info( @@ -227,14 +224,14 @@ def test_detect_us_phone_numbers(phone_number): billable_units=1, ), ), - # ( - # "+23051234567", - # international_phone_info( - # international=True, - # country_prefix="230", # Mauritius - # billable_units=1, - # ), - # ), + ( + "+23051234567", + international_phone_info( + international=True, + country_prefix="230", # Mauritius + billable_units=1, + ), + ), ], ) def test_get_international_info(phone_number, expected_info): @@ -287,11 +284,11 @@ def test_valid_us_phone_number_can_be_formatted_consistently(phone_number): @pytest.mark.parametrize( ("phone_number", "expected_formatted"), [ - # ("+44071234567890", "+4471234567890"), + ("+44071234567890", "+4471234567890"), ("1-202-555-0104", "+12025550104"), ("+12025550104", "+12025550104"), ("12025550104", "+12025550104"), - # ("+23051234567", "+23051234567"), + ("+23051234567", "+23051234567"), ], ) def test_valid_international_phone_number_can_be_formatted_consistently( @@ -362,17 +359,17 @@ def test_validates_against_guestlist_of_phone_numbers(phone_number): ) -# @pytest.mark.parametrize( -# "recipient_number, allowlist_number", -# [ -# ["+4407123-456-789", "+4407123456789"], -# ["+4407123456789", "+4407123-456-789"], -# ], -# ) -# def test_validates_against_guestlist_of_international_phone_numbers( -# recipient_number, allowlist_number -# ): -# assert allowed_to_send_to(recipient_number, [allowlist_number]) +@pytest.mark.parametrize( + ("recipient_number", "allowlist_number"), + [ + ("+4407123-456-789", "+4407123456789"), + ("+4407123456789", "+4407123-456-789"), + ], +) +def test_validates_against_guestlist_of_international_phone_numbers( + recipient_number, allowlist_number +): + assert allowed_to_send_to(recipient_number, [allowlist_number]) @pytest.mark.parametrize("email_address", valid_email_addresses) @@ -385,16 +382,17 @@ def test_validates_against_guestlist_of_email_addresses(email_address): @pytest.mark.parametrize( ("phone_number", "expected_formatted"), [ - # ("+4407900900123", "+44 7900 900123"), # UK - # ("+44(0)7900900123", "+44 7900 900123"), # UK - # ("+447900900123", "+44 7900 900123"), # UK + ("+4407900900123", "+44 7900 900123"), # UK + ("+44(0)7900900123", "+44 7900 900123"), # UK + ("+447900900123", "+44 7900 900123"), # UK + # TODO these should be fixed, but affect readability, not sendability # ("+20-12-1234-1234", "+20 121 234 1234"), # Egypt # ("+201212341234", "+20 121 234 1234"), # Egypt ("+1 664 491-3434", "+1 664-491-3434"), # Montserrat - # ("+7 499 1231212", "+7 499 123-12-12"), # Moscow (Russia) + ("+7 499 1231212", "+7 499 123-12-12"), # Moscow (Russia) ("1-202-555-0104", "(202) 555-0104"), # Washington DC (USA) - # ("+23051234567", "+230 5123 4567"), # Mauritius - # ("+33(0)1 12345678", "+33 1 12 34 56 78"), # Paris (France) + ("+23051234567", "+230 5123 4567"), # Mauritius + ("+33(0)1 12345678", "+33 1 12 34 56 78"), # Paris (France) ], ) def test_format_us_and_international_phone_numbers(phone_number, expected_formatted): @@ -411,7 +409,7 @@ def test_format_us_and_international_phone_numbers(phone_number, expected_format (None, ""), ("foo", "foo"), ("TeSt@ExAmPl3.com", "test@exampl3.com"), - # ("+4407900 900 123", "+447900900123"), + ("+4407900 900 123", "+447900900123"), ("+1 800 555 5555", "+18005555555"), ], )