From 795bd4271ce66d1cdd9e38979f7ba506a23135cb Mon Sep 17 00:00:00 2001 From: Rebecca Law Date: Thu, 21 Sep 2017 17:02:58 +0100 Subject: [PATCH] New endpoint to fetch a single reply-to email address by id --- app/dao/service_email_reply_to_dao.py | 10 +++++++++ app/service/rest.py | 8 ++++++- .../dao/test_service_email_reply_to_dao.py | 22 ++++++++++++++++++- tests/app/service/test_rest.py | 11 ++++++++++ 4 files changed, 49 insertions(+), 2 deletions(-) diff --git a/app/dao/service_email_reply_to_dao.py b/app/dao/service_email_reply_to_dao.py index ef94a7130..d63395ab8 100644 --- a/app/dao/service_email_reply_to_dao.py +++ b/app/dao/service_email_reply_to_dao.py @@ -13,6 +13,16 @@ def dao_get_reply_to_by_service_id(service_id): return reply_to +def dao_get_reply_to_by_id(service_id, reply_to_id): + reply_to = db.session.query( + ServiceEmailReplyTo + ).filter( + ServiceEmailReplyTo.service_id == service_id, + ServiceEmailReplyTo.id == reply_to_id + ).order_by(ServiceEmailReplyTo.created_at).one() + return reply_to + + def create_or_update_email_reply_to(service_id, email_address): reply_to = dao_get_reply_to_by_service_id(service_id) if len(reply_to) == 0: diff --git a/app/service/rest.py b/app/service/rest.py index 61527ce1c..48f1e6f44 100644 --- a/app/service/rest.py +++ b/app/service/rest.py @@ -47,7 +47,7 @@ from app.dao.service_whitelist_dao import ( dao_remove_service_whitelist ) from app.dao.service_email_reply_to_dao import create_or_update_email_reply_to, dao_get_reply_to_by_service_id, \ - add_reply_to_email_address_for_service, update_reply_to_email_address + add_reply_to_email_address_for_service, update_reply_to_email_address, dao_get_reply_to_by_id from app.dao.provider_statistics_dao import get_fragment_count from app.dao.users_dao import get_user_by_id from app.errors import ( @@ -531,6 +531,12 @@ def get_email_reply_to_addresses(service_id): return jsonify([i.serialize() for i in result]), 200 +@service_blueprint.route('//email-reply-to/', methods=["GET"]) +def get_email_reply_to_address(service_id, reply_to_id): + result = dao_get_reply_to_by_id(service_id=service_id, reply_to_id=reply_to_id) + return jsonify(result.serialize()), 200 + + @service_blueprint.route('//email-reply-to', methods=['POST']) def add_service_reply_to_email_address(service_id): # validate the service exists, throws ResultNotFound exception. diff --git a/tests/app/dao/test_service_email_reply_to_dao.py b/tests/app/dao/test_service_email_reply_to_dao.py index 1761b44eb..f95badf80 100644 --- a/tests/app/dao/test_service_email_reply_to_dao.py +++ b/tests/app/dao/test_service_email_reply_to_dao.py @@ -1,9 +1,12 @@ +import uuid + import pytest +from sqlalchemy.exc import SQLAlchemyError from app.dao.service_email_reply_to_dao import ( create_or_update_email_reply_to, dao_get_reply_to_by_service_id, - add_reply_to_email_address_for_service, update_reply_to_email_address) + add_reply_to_email_address_for_service, update_reply_to_email_address, dao_get_reply_to_by_id) from app.errors import InvalidRequest from app.models import ServiceEmailReplyTo from tests.app.db import create_reply_to_email, create_service @@ -191,3 +194,20 @@ def test_update_reply_to_email_address_raises_exception_if_single_reply_to_and_s reply_to_id=first_reply_to.id, email_address='should@fail.com', is_default=False) + + +def test_dao_get_reply_to_by_id(sample_service): + reply_to = create_reply_to_email(service=sample_service, email_address='email@address.com') + result = dao_get_reply_to_by_id(service_id=sample_service.id, reply_to_id=reply_to.id) + assert result == reply_to + + +def test_dao_get_reply_to_by_id_raises_sqlalchemy_error_when_reply_to_does_not_exist(sample_service): + with pytest.raises(SQLAlchemyError): + dao_get_reply_to_by_id(service_id=sample_service.id, reply_to_id=uuid.uuid4()) + + +def test_dao_get_reply_to_by_id_raises_sqlalchemy_error_when_service_does_not_exist(sample_service): + reply_to = create_reply_to_email(service=sample_service, email_address='email@address.com') + with pytest.raises(SQLAlchemyError): + dao_get_reply_to_by_id(service_id=uuid.uuid4(), reply_to_id=reply_to.id) diff --git a/tests/app/service/test_rest.py b/tests/app/service/test_rest.py index 5b267be2c..0551ec7c5 100644 --- a/tests/app/service/test_rest.py +++ b/tests/app/service/test_rest.py @@ -2290,3 +2290,14 @@ def test_update_service_reply_to_email_address_404s_when_invalid_service_id(clie result = json.loads(response.get_data(as_text=True)) assert result['result'] == 'error' assert result['message'] == 'No result found' + + +def test_get_email_reply_to_address(client, notify_db, notify_db_session): + service = create_service(notify_db=notify_db, notify_db_session=notify_db_session) + reply_to = create_reply_to_email(service, 'test_a@mail.com') + + response = client.get('/service/{}/email-reply-to/{}'.format(service.id, reply_to.id), + headers=[('Content-Type', 'application/json'), create_authorization_header()]) + + assert response.status_code == 200 + assert json.loads(response.get_data(as_text=True)) == reply_to.serialize()