From 3820090a19409fd445bf00bea2ced65c711bc1f7 Mon Sep 17 00:00:00 2001 From: Rebecca Law Date: Mon, 4 Apr 2016 18:08:37 +0100 Subject: [PATCH] WIP: building the mmg delivery receipt endpoint. --- app/notifications/rest.py | 42 ++++++++++++++++++---------- tests/app/notifications/test_rest.py | 36 ++++++++++++++++++++++++ 2 files changed, 64 insertions(+), 14 deletions(-) diff --git a/app/notifications/rest.py b/app/notifications/rest.py index 0e5c499a3..ddccbae0b 100644 --- a/app/notifications/rest.py +++ b/app/notifications/rest.py @@ -148,24 +148,38 @@ def process_mmg_response(): print('here') current_app.logger.info('MMG client callback json{}'.format(request.json)) current_app.logger.info('MMG client callback form{}'.format(request.form)) + status, error1 = _get_from_response(form=request.form, field='status', client_name='MMG') + reference, error2 = _get_from_response(form=request.form, field='reference', client_name='MMG') + errors = [error1, error2] + errors.remove(None) + if len(errors) > 0: + return jsonify(result='error', message=errors), 400 + + if reference == 'send-sms-code': + return jsonify(result="success", message="MMG callback succeeded: send-sms-code"), 200 + + +def _get_from_response(form, field, client_name): + error = None + form_field = None + if len(form.get(field, '')) <= 0: + print( + "{} callback failed: {} missing".format(client_name, field) + ) + error="{} callback failed: {} missing".format(client_name, field) + else: + form_field = form[field] + return form_field, error @notifications.route('/notifications/sms/firetext', methods=['POST']) def process_firetext_response(): - if 'status' not in request.form: - current_app.logger.info( - "Firetext callback failed: status missing" - ) - return jsonify(result="error", message="Firetext callback failed: status missing"), 400 - - if len(request.form.get('reference', '')) <= 0: - current_app.logger.info( - "Firetext callback with no reference" - ) - return jsonify(result="error", message="Firetext callback failed: reference missing"), 400 - - reference = request.form['reference'] - status = request.form['status'] + status, error1 = _get_from_response(form=request.form, field='status', client_name='Firetext') + reference, error2 = _get_from_response(form=request.form, field='reference', client_name='Firetext') + errors = [error1, error2] + errors = errors.filter(None) + if len(errors) > 0: + return jsonify(result='error', message=errors), 400 if reference == 'send-sms-code': return jsonify(result="success", message="Firetext callback succeeded: send-sms-code"), 200 diff --git a/tests/app/notifications/test_rest.py b/tests/app/notifications/test_rest.py index ba89ed108..10bb2daa7 100644 --- a/tests/app/notifications/test_rest.py +++ b/tests/app/notifications/test_rest.py @@ -15,6 +15,42 @@ from app.dao.notifications_dao import get_notification_by_id, dao_get_notificati from freezegun import freeze_time +def test_get_status_name_from_response_return_status(): + from app.notifications.rest import _get_from_response + form = {'status': 'good'} + client_name = 'sms client' + status, error = _get_from_response(form, 'status', client_name) + expected = 'good' + assert expected == status + assert error is None + + +def test_get_status_name_returns_error(): + from app.notifications.rest import _get_from_response + form = {'status': '', + 'another': 'some'} + client_name = 'sms client' + errors = [] + status, error1 = _get_from_response(form, 'reference', client_name) + expected = "{} callback failed: reference missing".format(client_name) + assert expected == error1 + assert status is None + errors.append(error1) + status, error2 = _get_from_response(form, 'status', client_name) + errors.append(error2) + another, error3 = _get_from_response(form, 'another', client_name) + if error3: + errors.append(error3) + assert "sms client callback failed: status missing" == error2 + assert len(errors) == 2 + assert error1 in errors + assert error2 in errors + assert error3 not in errors + err = [error1, error2, error3] + err = filter(None, err) + assert len(list(err)) == 2 + + def test_get_notification_by_id(notify_api, sample_notification): with notify_api.test_request_context(): with notify_api.test_client() as client: