mirror of
https://github.com/GSA/notifications-api.git
synced 2026-08-24 00:06:16 -04:00
Refactored code to use new service permissions only
This commit is contained in:
@@ -23,7 +23,7 @@ from app.celery.statistics_tasks import record_initial_job_statistics, create_in
|
|||||||
|
|
||||||
def send_sms_to_provider(notification):
|
def send_sms_to_provider(notification):
|
||||||
service = notification.service
|
service = notification.service
|
||||||
|
print('send')
|
||||||
if not service.active:
|
if not service.active:
|
||||||
technical_failure(notification=notification)
|
technical_failure(notification=notification)
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ from app.errors import (
|
|||||||
InvalidRequest
|
InvalidRequest
|
||||||
)
|
)
|
||||||
from app.models import KEY_TYPE_TEAM, PRIORITY
|
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 (
|
from app.notifications.process_notifications import (
|
||||||
persist_notification,
|
persist_notification,
|
||||||
send_notification_to_queue,
|
send_notification_to_queue,
|
||||||
@@ -165,7 +165,8 @@ def get_notification_return_data(notification_id, notification, template):
|
|||||||
def _service_can_send_internationally(service, number):
|
def _service_can_send_internationally(service, number):
|
||||||
international_phone_info = get_international_phone_info(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(
|
raise InvalidRequest(
|
||||||
{'to': ["Cannot send to international mobile numbers"]},
|
{'to': ["Cannot send to international mobile numbers"]},
|
||||||
status_code=400
|
status_code=400
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ from notifications_utils.recipients import (
|
|||||||
from notifications_utils.clients.redis import rate_limit_cache_key, daily_limit_cache_key
|
from notifications_utils.clients.redis import rate_limit_cache_key, daily_limit_cache_key
|
||||||
|
|
||||||
from app.dao import services_dao, templates_dao
|
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.service.utils import service_allowed_to_send_to
|
||||||
from app.v2.errors import TooManyRequestsError, BadRequestError, RateLimitError
|
from app.v2.errors import TooManyRequestsError, BadRequestError, RateLimitError
|
||||||
from app import redis_store
|
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:
|
if notification_type == SMS_TYPE:
|
||||||
international_phone_info = get_international_phone_info(send_to)
|
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")
|
raise BadRequestError(message="Cannot send to international mobile numbers")
|
||||||
|
|
||||||
return validate_and_format_phone_number(
|
return validate_and_format_phone_number(
|
||||||
|
|||||||
@@ -142,7 +142,6 @@ def update_service(service_id):
|
|||||||
service_going_live = fetched_service.restricted and not request.get_json().get('restricted', True)
|
service_going_live = fetched_service.restricted and not request.get_json().get('restricted', True)
|
||||||
|
|
||||||
current_data = dict(service_schema.dump(fetched_service).data.items())
|
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())
|
current_data.update(request.get_json())
|
||||||
update_dict = service_schema.load(current_data).data
|
update_dict = service_schema.load(current_data).data
|
||||||
dao_update_service(update_dict)
|
dao_update_service(update_dict)
|
||||||
|
|||||||
@@ -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)
|
service = dao_fetch_service_by_id(service.id)
|
||||||
assert len(service.permissions) == 3
|
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)
|
dao_remove_service_permission(service_id=service.id, permission=LETTER_TYPE)
|
||||||
service.set_permissions()
|
|
||||||
service = dao_fetch_service_by_id(service.id)
|
service = dao_fetch_service_by_id(service.id)
|
||||||
|
|
||||||
assert len(service.permissions) == 2
|
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):
|
def test_create_service_creates_a_history_record_with_current_data(sample_user):
|
||||||
|
|||||||
@@ -9,7 +9,8 @@ from notifications_python_client.authentication import create_jwt_token
|
|||||||
|
|
||||||
import app
|
import app
|
||||||
from app.dao import notifications_dao
|
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.templates_dao import dao_get_all_templates_for_service, dao_update_template
|
||||||
from app.dao.services_dao import dao_update_service
|
from app.dao.services_dao import dao_update_service
|
||||||
from app.dao.api_key_dao import save_model_api_key
|
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):
|
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')
|
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)
|
template = create_sample_template(notify_db, notify_db_session, service=service)
|
||||||
|
|
||||||
data = {
|
data = {
|
||||||
|
|||||||
@@ -316,7 +316,8 @@ def test_rejects_api_calls_with_international_numbers_if_service_does_not_allow_
|
|||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize('key_type', ['test', 'normal'])
|
@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):
|
def test_allows_api_calls_with_international_numbers_if_service_does_allow_int_sms(
|
||||||
sample_service.permissions = ['international_sms']
|
key_type, notify_db, notify_db_session):
|
||||||
result = validate_and_format_recipient('20-12-1234-1234', key_type, sample_service, 'sms')
|
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'
|
assert result == '201212341234'
|
||||||
|
|||||||
Reference in New Issue
Block a user