Merge pull request #2909 from alphagov/fix-international-one-off

Fix sending one-off international text messages
This commit is contained in:
Chris Hill-Scott
2020-06-30 09:29:13 +01:00
committed by GitHub
2 changed files with 31 additions and 2 deletions

View File

@@ -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

View File

@@ -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,