diff --git a/app/delivery/send_to_providers.py b/app/delivery/send_to_providers.py index df4c664f9..371804204 100644 --- a/app/delivery/send_to_providers.py +++ b/app/delivery/send_to_providers.py @@ -23,7 +23,7 @@ from app.celery.statistics_tasks import record_initial_job_statistics, create_in def send_sms_to_provider(notification): service = notification.service - + print('send') if not service.active: technical_failure(notification=notification) return diff --git a/app/notifications/rest.py b/app/notifications/rest.py index a215ec4d8..5c7fba5d3 100644 --- a/app/notifications/rest.py +++ b/app/notifications/rest.py @@ -16,7 +16,7 @@ from app.errors import ( InvalidRequest ) from app.models import KEY_TYPE_TEAM, PRIORITY -from app.models import SMS_TYPE +from app.models import INTERNATIONAL_SMS_TYPE, SMS_TYPE from app.notifications.process_notifications import ( persist_notification, send_notification_to_queue, @@ -165,7 +165,8 @@ def get_notification_return_data(notification_id, notification, template): def _service_can_send_internationally(service, number): international_phone_info = get_international_phone_info(number) - if international_phone_info.international and 'international_sms' not in service.permissions: + if international_phone_info.international and \ + INTERNATIONAL_SMS_TYPE not in [p.permission for p in service.permissions]: raise InvalidRequest( {'to': ["Cannot send to international mobile numbers"]}, status_code=400 diff --git a/app/notifications/validators.py b/app/notifications/validators.py index 4e1d8826e..1af0ce024 100644 --- a/app/notifications/validators.py +++ b/app/notifications/validators.py @@ -8,7 +8,7 @@ from notifications_utils.recipients import ( from notifications_utils.clients.redis import rate_limit_cache_key, daily_limit_cache_key from app.dao import services_dao, templates_dao -from app.models import KEY_TYPE_TEST, KEY_TYPE_TEAM, SMS_TYPE, SCHEDULE_NOTIFICATIONS +from app.models import INTERNATIONAL_SMS_TYPE, KEY_TYPE_TEST, KEY_TYPE_TEAM, SMS_TYPE, SCHEDULE_NOTIFICATIONS from app.service.utils import service_allowed_to_send_to from app.v2.errors import TooManyRequestsError, BadRequestError, RateLimitError from app import redis_store @@ -76,7 +76,8 @@ def validate_and_format_recipient(send_to, key_type, service, notification_type) if notification_type == SMS_TYPE: international_phone_info = get_international_phone_info(send_to) - if international_phone_info.international and 'international_sms' not in service.permissions: + if international_phone_info.international and \ + INTERNATIONAL_SMS_TYPE not in [p.permission for p in service.permissions]: raise BadRequestError(message="Cannot send to international mobile numbers") return validate_and_format_phone_number( diff --git a/app/service/rest.py b/app/service/rest.py index e9c72884e..ae57f5390 100644 --- a/app/service/rest.py +++ b/app/service/rest.py @@ -142,7 +142,6 @@ def update_service(service_id): service_going_live = fetched_service.restricted and not request.get_json().get('restricted', True) current_data = dict(service_schema.dump(fetched_service).data.items()) - service_schema.set_override_flag(request.get_json().get('permissions') is not None) current_data.update(request.get_json()) update_dict = service_schema.load(current_data).data dao_update_service(update_dict) diff --git a/tests/app/dao/test_services_dao.py b/tests/app/dao/test_services_dao.py index b9d8b98d7..aa0b0f76d 100644 --- a/tests/app/dao/test_services_dao.py +++ b/tests/app/dao/test_services_dao.py @@ -297,14 +297,13 @@ def test_create_service_by_id_adding_and_removing_letter_returns_service_without service = dao_fetch_service_by_id(service.id) assert len(service.permissions) == 3 - assert set([SMS_TYPE, EMAIL_TYPE, LETTER_TYPE]) == set(service.permissions) + assert set([SMS_TYPE, EMAIL_TYPE, LETTER_TYPE]) == set([p.permission for p in service.permissions]) dao_remove_service_permission(service_id=service.id, permission=LETTER_TYPE) - service.set_permissions() service = dao_fetch_service_by_id(service.id) assert len(service.permissions) == 2 - assert set([SMS_TYPE, EMAIL_TYPE]) == set(service.permissions) + assert set([SMS_TYPE, EMAIL_TYPE]) == set([p.permission for p in service.permissions]) def test_create_service_creates_a_history_record_with_current_data(sample_user): diff --git a/tests/app/notifications/rest/test_send_notification.py b/tests/app/notifications/rest/test_send_notification.py index 706a59898..89df8c76b 100644 --- a/tests/app/notifications/rest/test_send_notification.py +++ b/tests/app/notifications/rest/test_send_notification.py @@ -9,7 +9,8 @@ from notifications_python_client.authentication import create_jwt_token import app from app.dao import notifications_dao -from app.models import ApiKey, KEY_TYPE_NORMAL, KEY_TYPE_TEAM, KEY_TYPE_TEST, Notification, NotificationHistory +from app.models import ( + ApiKey, INTERNATIONAL_SMS_TYPE, KEY_TYPE_NORMAL, KEY_TYPE_TEAM, KEY_TYPE_TEST, Notification, NotificationHistory) from app.dao.templates_dao import dao_get_all_templates_for_service, dao_update_template from app.dao.services_dao import dao_update_service from app.dao.api_key_dao import save_model_api_key @@ -1147,7 +1148,7 @@ def test_should_not_allow_international_number_on_sms_notification(client, sampl def test_should_allow_international_number_on_sms_notification(client, notify_db, notify_db_session, mocker): mocker.patch('app.celery.provider_tasks.deliver_sms.apply_async') - service = sample_service(notify_db, notify_db_session, permissions=['international_sms']) + service = sample_service(notify_db, notify_db_session, permissions=[INTERNATIONAL_SMS_TYPE, 'sms']) template = create_sample_template(notify_db, notify_db_session, service=service) data = { diff --git a/tests/app/notifications/test_validators.py b/tests/app/notifications/test_validators.py index 9bc667c9a..db651532f 100644 --- a/tests/app/notifications/test_validators.py +++ b/tests/app/notifications/test_validators.py @@ -316,7 +316,8 @@ def test_rejects_api_calls_with_international_numbers_if_service_does_not_allow_ @pytest.mark.parametrize('key_type', ['test', 'normal']) -def test_allows_api_calls_with_international_numbers_if_service_does_allow_int_sms(sample_service, key_type): - sample_service.permissions = ['international_sms'] - result = validate_and_format_recipient('20-12-1234-1234', key_type, sample_service, 'sms') +def test_allows_api_calls_with_international_numbers_if_service_does_allow_int_sms( + key_type, notify_db, notify_db_session): + service = create_service(notify_db, notify_db_session, permissions=['sms', 'international_sms']) + result = validate_and_format_recipient('20-12-1234-1234', key_type, service, 'sms') assert result == '201212341234'