mirror of
https://github.com/GSA/notifications-api.git
synced 2026-01-30 14:31:57 -05:00
Add boilerplate for Reach SMS callbacks
This is enough to update a notification in DB:
1. First create a notification in the UI and sent it.
2. Then reset its attributes to pretend it's for Reach.
update notifications set
sent_at = null,
sent_by = null,
notification_status='sending'
where id='some-uuid';
3. Change "notification_id" to "<some-uuid>" in the code.
4. Call the boilerplate endpoint for Reach callbacks.
curl -X POST localhost:6011/notifications/sms/reach
Interestingly there's no foreign key constraint on "sent_by" in the
DB, so this just works: the notification is updated.
This commit is contained in:
@@ -18,7 +18,7 @@ def test_process_sms_client_response_raises_error_if_reference_is_not_a_valid_uu
|
||||
status='000', provider_reference='something-bad', client_name='sms-client')
|
||||
|
||||
|
||||
@pytest.mark.parametrize('client_name', ('Firetext', 'MMG'))
|
||||
@pytest.mark.parametrize('client_name', ('Firetext', 'MMG', 'Reach'))
|
||||
def test_process_sms_response_raises_client_exception_for_unknown_status(
|
||||
sample_notification,
|
||||
mocker,
|
||||
@@ -43,6 +43,9 @@ def test_process_sms_response_raises_client_exception_for_unknown_status(
|
||||
('3', '2', 'MMG', 'delivered', "Delivered to operator"),
|
||||
('4', '27', 'MMG', 'temporary-failure', "Absent Subscriber"),
|
||||
('5', '13', 'MMG', 'permanent-failure', "Sender id blacklisted"),
|
||||
('TODO-d', None, 'Reach', 'delivered', "TODO: Delivered"),
|
||||
('TODO-tf', None, 'Reach', 'temporary-failure', "TODO: Temporary failure"),
|
||||
('TODO-pf', None, 'Reach', 'permanent-failure', "TODO: Permanent failure"),
|
||||
])
|
||||
def test_process_sms_client_response_updates_notification_status(
|
||||
sample_notification,
|
||||
|
||||
1
tests/app/clients/test_reach.py
Normal file
1
tests/app/clients/test_reach.py
Normal file
@@ -0,0 +1 @@
|
||||
# TODO: all of the tests
|
||||
@@ -17,6 +17,13 @@ def mmg_post(client, data):
|
||||
headers=[('Content-Type', 'application/json')])
|
||||
|
||||
|
||||
def reach_post(client, data):
|
||||
return client.post(
|
||||
path='/notifications/sms/reach',
|
||||
data=data,
|
||||
headers=[('Content-Type', 'application/json')])
|
||||
|
||||
|
||||
def test_firetext_callback_should_not_need_auth(client, mocker):
|
||||
mocker.patch('app.notifications.notifications_sms_callback.process_sms_client_response')
|
||||
data = 'mobile=441234123123&status=0&reference=notification_id&time=2016-03-10 14:17:00'
|
||||
@@ -135,6 +142,24 @@ def test_mmg_callback_should_return_200_and_call_task_with_valid_data(client, mo
|
||||
)
|
||||
|
||||
|
||||
# TODO: more tests about edge cases for this provider
|
||||
def test_reach_callback_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 = json.dumps({"data": "TODO"})
|
||||
|
||||
response = reach_post(client, data)
|
||||
|
||||
assert response.status_code == 200
|
||||
json_data = json.loads(response.data)
|
||||
assert json_data['result'] == 'success'
|
||||
|
||||
mock_celery.assert_called_once_with(
|
||||
['TODO-d', 'notification_id', 'Reach', 'something'],
|
||||
queue='sms-callbacks',
|
||||
)
|
||||
|
||||
|
||||
def test_validate_callback_data_returns_none_when_valid():
|
||||
form = {'status': 'good',
|
||||
'reference': 'send-sms-code'}
|
||||
|
||||
Reference in New Issue
Block a user