mirror of
https://github.com/GSA/notifications-api.git
synced 2026-02-02 09:26:08 -05:00
Merge pull request #2803 from alphagov/firetext-response-codes
Use firetext response code to see if temporary or permanent failure if available
This commit is contained in:
@@ -147,7 +147,23 @@ def test_firetext_callback_should_return_200_and_call_task_with_valid_data(clien
|
||||
assert json_resp['result'] == 'success'
|
||||
|
||||
mock_celery.assert_called_once_with(
|
||||
['0', 'notification_id', 'Firetext'],
|
||||
['0', 'notification_id', 'Firetext', None],
|
||||
queue='sms-callbacks',
|
||||
)
|
||||
|
||||
|
||||
def test_firetext_callback_including_a_code_should_return_200_and_call_task_with_valid_data(client, mocker):
|
||||
mock_celery = mocker.patch(
|
||||
'app.notifications.notifications_sms_callback.process_sms_client_response.apply_async')
|
||||
|
||||
data = 'mobile=441234123123&status=1&code=101&time=2016-03-10 14:17:00&reference=notification_id'
|
||||
response = firetext_post(client, data)
|
||||
json_resp = json.loads(response.get_data(as_text=True))
|
||||
assert response.status_code == 200
|
||||
assert json_resp['result'] == 'success'
|
||||
|
||||
mock_celery.assert_called_once_with(
|
||||
['1', 'notification_id', 'Firetext', '101'],
|
||||
queue='sms-callbacks',
|
||||
)
|
||||
|
||||
|
||||
@@ -57,6 +57,45 @@ def test_process_sms_client_response_updates_notification_status(
|
||||
assert sample_notification.status == expected_notification_status
|
||||
|
||||
|
||||
@pytest.mark.parametrize('code, expected_notification_status, reason', [
|
||||
('101', 'permanent-failure', 'Unknown Subscriber'),
|
||||
('102', 'temporary-failure', 'Absent Subscriber'),
|
||||
(None, 'temporary-failure', None),
|
||||
])
|
||||
def test_process_sms_client_response_updates_notification_status_when_called_second_time(
|
||||
sample_notification,
|
||||
mocker,
|
||||
code,
|
||||
expected_notification_status,
|
||||
reason
|
||||
):
|
||||
mock_logger = mocker.patch('app.celery.tasks.current_app.logger.info')
|
||||
sample_notification.status = 'sending'
|
||||
process_sms_client_response('2', str(sample_notification.id), 'Firetext')
|
||||
|
||||
process_sms_client_response('1', str(sample_notification.id), 'Firetext', code)
|
||||
|
||||
if code:
|
||||
message = f'Updating notification id {sample_notification.id} to status {expected_notification_status}, reason: {reason}' # noqa
|
||||
mock_logger.assert_called_with(message)
|
||||
|
||||
assert sample_notification.status == expected_notification_status
|
||||
|
||||
|
||||
def test_process_sms_client_response_updates_notification_status_when_code_unknown(
|
||||
sample_notification,
|
||||
mocker,
|
||||
):
|
||||
mock_logger = mocker.patch('app.celery.tasks.current_app.logger.error')
|
||||
sample_notification.status = 'sending'
|
||||
process_sms_client_response('2', str(sample_notification.id), 'Firetext')
|
||||
|
||||
process_sms_client_response('1', str(sample_notification.id), 'Firetext', '789')
|
||||
|
||||
mock_logger.assert_called_once_with('Failure code 789 from Firetext not recognised')
|
||||
assert sample_notification.status == 'temporary-failure'
|
||||
|
||||
|
||||
def test_sms_response_does_not_send_callback_if_notification_is_not_in_the_db(sample_service, mocker):
|
||||
mocker.patch(
|
||||
'app.celery.process_sms_client_response_tasks.get_service_delivery_status_callback_api_for_service',
|
||||
|
||||
Reference in New Issue
Block a user