From 5e2bf4cd32c520eb6978f3f367767a7907e539d0 Mon Sep 17 00:00:00 2001 From: venusbb Date: Wed, 4 Oct 2017 15:35:41 +0100 Subject: [PATCH] Add new POST //letter-contact/ end point --- app/service/rest.py | 13 ++++++++++++ tests/app/service/test_rest.py | 37 ++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/app/service/rest.py b/app/service/rest.py index 0b7ea5591..e06d66dc9 100644 --- a/app/service/rest.py +++ b/app/service/rest.py @@ -58,6 +58,7 @@ from app.dao.service_letter_contact_dao import ( create_or_update_letter_contact, dao_get_letter_contact_by_id, add_letter_contact_for_service, + update_letter_contact ) from app.dao.provider_statistics_dao import get_fragment_count from app.dao.users_dao import get_user_by_id @@ -602,6 +603,18 @@ def add_service_letter_contact(service_id): return jsonify(data=new_letter_contact.serialize()), 201 +@service_blueprint.route('//letter-contact/', methods=['POST']) +def update_service_letter_contact(service_id, letter_contact_id): + # validate the service exists, throws ResultNotFound exception. + dao_fetch_service_by_id(service_id) + form = validate(request.get_json(), add_service_letter_contact_block_request) + new_reply_to = update_letter_contact(service_id=service_id, + letter_contact_id=letter_contact_id, + contact_block=form['contact_block'], + is_default=form.get('is_default', True)) + return jsonify(data=new_reply_to.serialize()), 200 + + @service_blueprint.route('/unique', methods=["GET"]) def is_service_name_unique(): name, email_from = check_request_args(request) diff --git a/tests/app/service/test_rest.py b/tests/app/service/test_rest.py index b972d68c7..ba0465958 100644 --- a/tests/app/service/test_rest.py +++ b/tests/app/service/test_rest.py @@ -2451,3 +2451,40 @@ def test_add_service_letter_contact_block_404s_when_invalid_service_id(client, n result = json.loads(response.get_data(as_text=True)) assert result['result'] == 'error' assert result['message'] == 'No result found' + + +def test_update_service_letter_contact(client, sample_service): + original_letter_contact = create_letter_contact(service=sample_service, contact_block="Aberdeen, AB23 1XH") + data = json.dumps({"contact_block": "London, E1 8QS", "is_default": True}) + response = client.post('/service/{}/letter-contact/{}'.format(sample_service.id, original_letter_contact.id), + data=data, + headers=[('Content-Type', 'application/json'), create_authorization_header()]) + + assert response.status_code == 200 + json_resp = json.loads(response.get_data(as_text=True)) + results = ServiceLetterContact.query.all() + assert len(results) == 1 + assert json_resp['data'] == results[0].serialize() + + +def test_update_service_letter_contact_returns_400_when_no_default(client, sample_service): + original_reply_to = create_letter_contact(service=sample_service, contact_block="Aberdeen, AB23 1XH") + data = json.dumps({"contact_block": "London, E1 8QS", "is_default": False}) + response = client.post('/service/{}/letter-contact/{}'.format(sample_service.id, original_reply_to.id), + data=data, + headers=[('Content-Type', 'application/json'), create_authorization_header()]) + + assert response.status_code == 400 + json_resp = json.loads(response.get_data(as_text=True)) + assert json_resp['message'] == 'You must have at least one letter contact as the default.' + + +def test_update_service_letter_contact_returns_404_when_invalid_service_id(client, notify_db, notify_db_session): + response = client.post('/service/{}/letter-contact/{}'.format(uuid.uuid4(), uuid.uuid4()), + data={}, + headers=[('Content-Type', 'application/json'), create_authorization_header()]) + + assert response.status_code == 404 + result = json.loads(response.get_data(as_text=True)) + assert result['result'] == 'error' + assert result['message'] == 'No result found'