mirror of
https://github.com/GSA/notifications-api.git
synced 2025-12-21 07:51:13 -05:00
added sms delivery status callback
This commit is contained in:
@@ -8,7 +8,8 @@ from app.dao import notifications_dao
|
|||||||
from app.clients.sms.firetext import get_firetext_responses
|
from app.clients.sms.firetext import get_firetext_responses
|
||||||
from app.clients.sms.mmg import get_mmg_responses
|
from app.clients.sms.mmg import get_mmg_responses
|
||||||
from app.celery.statistics_tasks import create_outcome_notification_statistic_tasks
|
from app.celery.statistics_tasks import create_outcome_notification_statistic_tasks
|
||||||
|
from app.celery.service_callback_tasks import send_delivery_status_to_service
|
||||||
|
from app.config import QueueNames
|
||||||
|
|
||||||
sms_response_mapper = {
|
sms_response_mapper = {
|
||||||
'MMG': get_mmg_responses,
|
'MMG': get_mmg_responses,
|
||||||
@@ -83,5 +84,7 @@ def process_sms_client_response(status, reference, client_name):
|
|||||||
|
|
||||||
create_outcome_notification_statistic_tasks(notification)
|
create_outcome_notification_statistic_tasks(notification)
|
||||||
|
|
||||||
|
send_delivery_status_to_service.apply_async([notification.id], queue=QueueNames.NOTIFY)
|
||||||
|
|
||||||
success = "{} callback succeeded. reference {} updated".format(client_name, reference)
|
success = "{} callback succeeded. reference {} updated".format(client_name, reference)
|
||||||
return success, errors
|
return success, errors
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ def firetext_post(client, data):
|
|||||||
data=data,
|
data=data,
|
||||||
headers=[
|
headers=[
|
||||||
('Content-Type', 'application/x-www-form-urlencoded'),
|
('Content-Type', 'application/x-www-form-urlencoded'),
|
||||||
('X-Forwarded-For', '203.0.113.195, 70.41.3.18, 150.172.238.178')
|
('X-Forwarded-For', '203.0.113.195, 70.41.3.18, 150.172.238.178') # fake IPs
|
||||||
])
|
])
|
||||||
|
|
||||||
|
|
||||||
@@ -28,7 +28,7 @@ def mmg_post(client, data):
|
|||||||
data=data,
|
data=data,
|
||||||
headers=[
|
headers=[
|
||||||
('Content-Type', 'application/json'),
|
('Content-Type', 'application/json'),
|
||||||
('X-Forwarded-For', '203.0.113.195, 70.41.3.18, 150.172.238.178')
|
('X-Forwarded-For', '203.0.113.195, 70.41.3.18, 150.172.238.178') # fake IPs
|
||||||
])
|
])
|
||||||
|
|
||||||
|
|
||||||
@@ -178,7 +178,9 @@ def test_firetext_callback_should_update_notification_status(
|
|||||||
notify_db, notify_db_session, client, sample_email_template, mocker
|
notify_db, notify_db_session, client, sample_email_template, mocker
|
||||||
):
|
):
|
||||||
mocker.patch('app.statsd_client.incr')
|
mocker.patch('app.statsd_client.incr')
|
||||||
|
send_mock = mocker.patch(
|
||||||
|
'app.celery.service_callback_tasks.send_delivery_status_to_service.apply_async'
|
||||||
|
)
|
||||||
notification = create_sample_notification(
|
notification = create_sample_notification(
|
||||||
notify_db,
|
notify_db,
|
||||||
notify_db_session,
|
notify_db_session,
|
||||||
@@ -202,13 +204,16 @@ def test_firetext_callback_should_update_notification_status(
|
|||||||
updated = get_notification_by_id(notification.id)
|
updated = get_notification_by_id(notification.id)
|
||||||
assert updated.status == 'delivered'
|
assert updated.status == 'delivered'
|
||||||
assert get_notification_by_id(notification.id).status == 'delivered'
|
assert get_notification_by_id(notification.id).status == 'delivered'
|
||||||
|
assert send_mock.called_once_with([notification.id], queue="notify-internal-tasks")
|
||||||
|
|
||||||
|
|
||||||
def test_firetext_callback_should_update_notification_status_failed(
|
def test_firetext_callback_should_update_notification_status_failed(
|
||||||
notify_db, notify_db_session, client, sample_template, mocker
|
notify_db, notify_db_session, client, sample_template, mocker
|
||||||
):
|
):
|
||||||
mocker.patch('app.statsd_client.incr')
|
mocker.patch('app.statsd_client.incr')
|
||||||
|
mocker.patch(
|
||||||
|
'app.celery.service_callback_tasks.send_delivery_status_to_service.apply_async'
|
||||||
|
)
|
||||||
notification = create_sample_notification(
|
notification = create_sample_notification(
|
||||||
notify_db,
|
notify_db,
|
||||||
notify_db_session,
|
notify_db_session,
|
||||||
@@ -235,6 +240,9 @@ def test_firetext_callback_should_update_notification_status_failed(
|
|||||||
|
|
||||||
def test_firetext_callback_should_update_notification_status_pending(client, notify_db, notify_db_session, mocker):
|
def test_firetext_callback_should_update_notification_status_pending(client, notify_db, notify_db_session, mocker):
|
||||||
mocker.patch('app.statsd_client.incr')
|
mocker.patch('app.statsd_client.incr')
|
||||||
|
mocker.patch(
|
||||||
|
'app.celery.service_callback_tasks.send_delivery_status_to_service.apply_async'
|
||||||
|
)
|
||||||
notification = create_sample_notification(
|
notification = create_sample_notification(
|
||||||
notify_db, notify_db_session, status='sending', sent_at=datetime.utcnow()
|
notify_db, notify_db_session, status='sending', sent_at=datetime.utcnow()
|
||||||
)
|
)
|
||||||
@@ -265,8 +273,11 @@ def test_process_mmg_response_return_200_when_cid_is_send_sms_code(client):
|
|||||||
|
|
||||||
|
|
||||||
def test_process_mmg_response_returns_200_when_cid_is_valid_notification_id(
|
def test_process_mmg_response_returns_200_when_cid_is_valid_notification_id(
|
||||||
notify_db, notify_db_session, client
|
notify_db, notify_db_session, client, mocker
|
||||||
):
|
):
|
||||||
|
mocker.patch(
|
||||||
|
'app.celery.service_callback_tasks.send_delivery_status_to_service.apply_async'
|
||||||
|
)
|
||||||
notification = create_sample_notification(
|
notification = create_sample_notification(
|
||||||
notify_db, notify_db_session, status='sending', sent_at=datetime.utcnow()
|
notify_db, notify_db_session, status='sending', sent_at=datetime.utcnow()
|
||||||
)
|
)
|
||||||
@@ -286,8 +297,11 @@ def test_process_mmg_response_returns_200_when_cid_is_valid_notification_id(
|
|||||||
|
|
||||||
|
|
||||||
def test_process_mmg_response_status_5_updates_notification_with_permanently_failed(
|
def test_process_mmg_response_status_5_updates_notification_with_permanently_failed(
|
||||||
notify_db, notify_db_session, client
|
notify_db, notify_db_session, client, mocker
|
||||||
):
|
):
|
||||||
|
mocker.patch(
|
||||||
|
'app.celery.service_callback_tasks.send_delivery_status_to_service.apply_async'
|
||||||
|
)
|
||||||
notification = create_sample_notification(
|
notification = create_sample_notification(
|
||||||
notify_db, notify_db_session, status='sending', sent_at=datetime.utcnow()
|
notify_db, notify_db_session, status='sending', sent_at=datetime.utcnow()
|
||||||
)
|
)
|
||||||
@@ -306,8 +320,11 @@ def test_process_mmg_response_status_5_updates_notification_with_permanently_fai
|
|||||||
|
|
||||||
|
|
||||||
def test_process_mmg_response_status_2_updates_notification_with_permanently_failed(
|
def test_process_mmg_response_status_2_updates_notification_with_permanently_failed(
|
||||||
notify_db, notify_db_session, client
|
notify_db, notify_db_session, client, mocker
|
||||||
):
|
):
|
||||||
|
mocker.patch(
|
||||||
|
'app.celery.service_callback_tasks.send_delivery_status_to_service.apply_async'
|
||||||
|
)
|
||||||
notification = create_sample_notification(
|
notification = create_sample_notification(
|
||||||
notify_db, notify_db_session, status='sending', sent_at=datetime.utcnow()
|
notify_db, notify_db_session, status='sending', sent_at=datetime.utcnow()
|
||||||
)
|
)
|
||||||
@@ -325,8 +342,11 @@ def test_process_mmg_response_status_2_updates_notification_with_permanently_fai
|
|||||||
|
|
||||||
|
|
||||||
def test_process_mmg_response_status_4_updates_notification_with_temporary_failed(
|
def test_process_mmg_response_status_4_updates_notification_with_temporary_failed(
|
||||||
notify_db, notify_db_session, client
|
notify_db, notify_db_session, client, mocker
|
||||||
):
|
):
|
||||||
|
mocker.patch(
|
||||||
|
'app.celery.service_callback_tasks.send_delivery_status_to_service.apply_async'
|
||||||
|
)
|
||||||
notification = create_sample_notification(
|
notification = create_sample_notification(
|
||||||
notify_db, notify_db_session, status='sending', sent_at=datetime.utcnow()
|
notify_db, notify_db_session, status='sending', sent_at=datetime.utcnow()
|
||||||
)
|
)
|
||||||
@@ -345,8 +365,11 @@ def test_process_mmg_response_status_4_updates_notification_with_temporary_faile
|
|||||||
|
|
||||||
|
|
||||||
def test_process_mmg_response_unknown_status_updates_notification_with_failed(
|
def test_process_mmg_response_unknown_status_updates_notification_with_failed(
|
||||||
notify_db, notify_db_session, client
|
notify_db, notify_db_session, client, mocker
|
||||||
):
|
):
|
||||||
|
send_mock = mocker.patch(
|
||||||
|
'app.celery.service_callback_tasks.send_delivery_status_to_service.apply_async'
|
||||||
|
)
|
||||||
notification = create_sample_notification(
|
notification = create_sample_notification(
|
||||||
notify_db, notify_db_session, status='sending', sent_at=datetime.utcnow()
|
notify_db, notify_db_session, status='sending', sent_at=datetime.utcnow()
|
||||||
)
|
)
|
||||||
@@ -392,6 +415,9 @@ def test_process_mmg_response_records_statsd(notify_db, notify_db_session, clien
|
|||||||
|
|
||||||
mocker.patch('app.statsd_client.incr')
|
mocker.patch('app.statsd_client.incr')
|
||||||
mocker.patch('app.statsd_client.timing_with_dates')
|
mocker.patch('app.statsd_client.timing_with_dates')
|
||||||
|
mocker.patch(
|
||||||
|
'app.celery.service_callback_tasks.send_delivery_status_to_service.apply_async'
|
||||||
|
)
|
||||||
notification = create_sample_notification(
|
notification = create_sample_notification(
|
||||||
notify_db, notify_db_session, status='sending', sent_at=datetime.utcnow()
|
notify_db, notify_db_session, status='sending', sent_at=datetime.utcnow()
|
||||||
)
|
)
|
||||||
@@ -415,6 +441,9 @@ def test_firetext_callback_should_record_statsd(client, notify_db, notify_db_ses
|
|||||||
|
|
||||||
mocker.patch('app.statsd_client.incr')
|
mocker.patch('app.statsd_client.incr')
|
||||||
mocker.patch('app.statsd_client.timing_with_dates')
|
mocker.patch('app.statsd_client.timing_with_dates')
|
||||||
|
mocker.patch(
|
||||||
|
'app.celery.service_callback_tasks.send_delivery_status_to_service.apply_async'
|
||||||
|
)
|
||||||
notification = create_sample_notification(
|
notification = create_sample_notification(
|
||||||
notify_db, notify_db_session, status='sending', sent_at=datetime.utcnow()
|
notify_db, notify_db_session, status='sending', sent_at=datetime.utcnow()
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -24,7 +24,9 @@ def test_ses_callback_should_update_notification_status(
|
|||||||
stats_mock = mocker.patch(
|
stats_mock = mocker.patch(
|
||||||
'app.notifications.notifications_ses_callback.create_outcome_notification_statistic_tasks'
|
'app.notifications.notifications_ses_callback.create_outcome_notification_statistic_tasks'
|
||||||
)
|
)
|
||||||
|
send_mock = mocker.patch(
|
||||||
|
'app.celery.service_callback_tasks.send_delivery_status_to_service.apply_async'
|
||||||
|
)
|
||||||
notification = create_sample_notification(
|
notification = create_sample_notification(
|
||||||
notify_db,
|
notify_db,
|
||||||
notify_db_session,
|
notify_db_session,
|
||||||
|
|||||||
@@ -51,12 +51,15 @@ def test_outcome_statistics_called_for_successful_callback(sample_notification,
|
|||||||
'app.notifications.process_client_response.notifications_dao.update_notification_status_by_id',
|
'app.notifications.process_client_response.notifications_dao.update_notification_status_by_id',
|
||||||
return_value=sample_notification
|
return_value=sample_notification
|
||||||
)
|
)
|
||||||
|
send_mock = mocker.patch(
|
||||||
|
'app.celery.service_callback_tasks.send_delivery_status_to_service.apply_async'
|
||||||
|
)
|
||||||
reference = str(uuid.uuid4())
|
reference = str(uuid.uuid4())
|
||||||
|
|
||||||
success, error = process_sms_client_response(status='3', reference=reference, client_name='MMG')
|
success, error = process_sms_client_response(status='3', reference=reference, client_name='MMG')
|
||||||
assert success == "MMG callback succeeded. reference {} updated".format(str(reference))
|
assert success == "MMG callback succeeded. reference {} updated".format(str(reference))
|
||||||
assert error is None
|
assert error is None
|
||||||
|
assert send_mock.called
|
||||||
stats_mock.assert_called_once_with(sample_notification)
|
stats_mock.assert_called_once_with(sample_notification)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user