diff --git a/app/service/rest.py b/app/service/rest.py index ca818aa46..98058774f 100644 --- a/app/service/rest.py +++ b/app/service/rest.py @@ -1,5 +1,4 @@ import itertools -import json from datetime import datetime from flask import ( @@ -11,7 +10,7 @@ from flask import ( from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.orm.exc import NoResultFound -from app.dao import notification_usage_dao, notifications_dao +from app.dao import notifications_dao from app.dao.dao_utils import dao_rollback from app.dao.api_key_dao import ( save_model_api_key, @@ -46,6 +45,7 @@ from app.dao.service_whitelist_dao import ( dao_add_and_commit_whitelisted_contacts, dao_remove_service_whitelist ) +from app.dao.service_email_reply_to_dao import create_or_update_email_reply_to from app.dao.provider_statistics_dao import get_fragment_count from app.dao.users_dao import get_user_by_id from app.errors import ( @@ -132,9 +132,13 @@ def create_service(): @service_blueprint.route('/', methods=['POST']) def update_service(service_id): + req_json = request.get_json() fetched_service = dao_fetch_service_by_id(service_id) # Capture the status change here as Marshmallow changes this later - service_going_live = fetched_service.restricted and not request.get_json().get('restricted', True) + service_going_live = fetched_service.restricted and not req_json.get('restricted', True) + + if 'reply_to_email_address' in req_json: + create_or_update_email_reply_to(fetched_service.id, req_json['reply_to_email_address']) current_data = dict(service_schema.dump(fetched_service).data.items()) current_data.update(request.get_json()) diff --git a/tests/app/service/test_rest.py b/tests/app/service/test_rest.py index eaf34219a..0d8e3fea2 100644 --- a/tests/app/service/test_rest.py +++ b/tests/app/service/test_rest.py @@ -2123,3 +2123,18 @@ def test_is_service_name_unique_returns_400_when_name_does_not_exist(client): json_resp = json.loads(response.get_data(as_text=True)) assert json_resp["message"][0]["name"] == ["Can't be empty"] assert json_resp["message"][1]["email_from"] == ["Can't be empty"] + + +def test_update_service_reply_to_email_address_upserts_email_reply_to(mocker, admin_request, sample_service): + update_mock = mocker.patch('app.service.rest.create_or_update_email_reply_to') + + admin_request.post( + 'service.update_service', + service_id=sample_service.id, + _data={ + 'reply_to_email_address': 'new@mail.com' + }, + _expected_status=200 + ) + + assert update_mock.called