diff --git a/app/notifications/validators.py b/app/notifications/validators.py index d1bf7b589..93992c580 100644 --- a/app/notifications/validators.py +++ b/app/notifications/validators.py @@ -12,7 +12,8 @@ from app.dao import services_dao from app.dao.service_sms_sender_dao import dao_get_service_sms_senders_by_id from app.models import ( INTERNATIONAL_SMS_TYPE, SMS_TYPE, EMAIL_TYPE, LETTER_TYPE, - KEY_TYPE_TEST, KEY_TYPE_TEAM + KEY_TYPE_TEST, KEY_TYPE_TEAM, + ServicePermission, ) from app.service.utils import service_allowed_to_send_to from app.v2.errors import TooManyRequestsError, BadRequestError, RateLimitError @@ -128,10 +129,15 @@ def validate_and_format_recipient(send_to, key_type, service, notification_type, def check_if_service_can_send_to_number(service, number): international_phone_info = get_international_phone_info(number) + if service.permissions and isinstance(service.permissions[0], ServicePermission): + permissions = [p.permission for p in service.permissions] + else: + permissions = service.permissions + if ( # if number is international and not a crown dependency international_phone_info.international and not international_phone_info.crown_dependency - ) and INTERNATIONAL_SMS_TYPE not in service.permissions: + ) and INTERNATIONAL_SMS_TYPE not in permissions: raise BadRequestError(message="Cannot send to international mobile numbers") else: return international_phone_info diff --git a/tests/app/service/test_send_one_off_notification.py b/tests/app/service/test_send_one_off_notification.py index a40909ae8..0b8e74cd4 100644 --- a/tests/app/service/test_send_one_off_notification.py +++ b/tests/app/service/test_send_one_off_notification.py @@ -103,6 +103,29 @@ def test_send_one_off_notification_calls_persist_correctly_for_sms( ) +def test_send_one_off_notification_calls_persist_correctly_for_international_sms( + persist_mock, + celery_mock, + notify_db_session +): + service = create_service(service_permissions=['sms', 'international_sms']) + template = create_template( + service=service, + template_type=SMS_TYPE, + ) + + post_data = { + 'template_id': str(template.id), + 'to': '+1 555 0100', + 'personalisation': {'name': 'foo'}, + 'created_by': str(service.created_by_id) + } + + send_one_off_notification(service.id, post_data) + + assert persist_mock.call_args[1]['recipient'] == '+1 555 0100' + + def test_send_one_off_notification_calls_persist_correctly_for_email( persist_mock, celery_mock,