From 49c849aba070c27f84ad4ec2945b77015bebde39 Mon Sep 17 00:00:00 2001 From: Chris Hill-Scott Date: Tue, 17 Oct 2017 16:06:15 +0100 Subject: [PATCH] =?UTF-8?q?Show=20email=20reply=20to=20address=20if=20one?= =?UTF-8?q?=E2=80=99s=20been=20selected?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit If you’ve picked an email reply to address, it’s good UI design to have your choice played back to you, so you can be confident it’s worked. This commit does that by making it part of the email preview. Uses: - [ ] https://github.com/alphagov/notifications-utils/pull/227 --- app/main/views/send.py | 17 +++++++--- app/utils.py | 2 ++ requirements.txt | 2 +- tests/app/main/views/test_send.py | 52 +++++++++++++++++++++++++++++++ 4 files changed, 68 insertions(+), 5 deletions(-) diff --git a/app/main/views/send.py b/app/main/views/send.py index 8307637c9..5c8555970 100644 --- a/app/main/views/send.py +++ b/app/main/views/send.py @@ -323,7 +323,8 @@ def send_test_step(service_id, template_id, step_index): template_id=template_id, filetype='png', ), - page_count=session['send_test_letter_page_count'] + page_count=session['send_test_letter_page_count'], + email_reply_to=get_email_reply_to_address_from_session(service_id), ) placeholders = fields_to_fill_in( @@ -448,7 +449,6 @@ def _check_messages(service_id, template_type, upload_id, letters_as_pdf=False): remaining_messages = (current_service['message_limit'] - sum(stat['requested'] for stat in statistics.values())) contents = s3download(service_id, upload_id) - template = get_template( service_api_client.get_service_template( service_id, @@ -462,7 +462,8 @@ def _check_messages(service_id, template_type, upload_id, letters_as_pdf=False): template_type=template_type, upload_id=upload_id, filetype='png', - ) if not letters_as_pdf else None + ) if not letters_as_pdf else None, + email_reply_to=get_email_reply_to_address_from_session(service_id), ) recipients = RecipientCSV( contents, @@ -726,7 +727,8 @@ def _check_notification(service_id, template_id, exception=None): template = get_template( db_template, current_service, - show_recipient=True + show_recipient=True, + email_reply_to=get_email_reply_to_address_from_session(service_id), ) # go back to start of process @@ -805,3 +807,10 @@ def send_notification(service_id, template_id): notification_id=noti['id'], help=request.args.get('help') )) + + +def get_email_reply_to_address_from_session(service_id): + if session.get('sender_id'): + return service_api_client.get_reply_to_email_address( + service_id, session['sender_id'] + )['email_address'] diff --git a/app/utils.py b/app/utils.py index 16f759aeb..d21d5e643 100644 --- a/app/utils.py +++ b/app/utils.py @@ -272,6 +272,7 @@ def get_template( letter_preview_url=None, page_count=1, redact_missing_personalisation=False, + email_reply_to=None, ): if 'email' == template['template_type']: return EmailPreviewTemplate( @@ -281,6 +282,7 @@ def get_template( expanded=expand_emails, show_recipient=show_recipient, redact_missing_personalisation=redact_missing_personalisation, + reply_to=email_reply_to, ) if 'sms' == template['template_type']: return SMSPreviewTemplate( diff --git a/requirements.txt b/requirements.txt index b0f20d81c..232b584b3 100644 --- a/requirements.txt +++ b/requirements.txt @@ -22,4 +22,4 @@ notifications-python-client==4.4.0 awscli>=1.11,<1.12 awscli-cwlogs>=1.4,<1.5 -git+https://github.com/alphagov/notifications-utils.git@21.2.0#egg=notifications-utils==21.2.0 +git+https://github.com/alphagov/notifications-utils.git@21.5.0#egg=notifications-utils==21.5.0 diff --git a/tests/app/main/views/test_send.py b/tests/app/main/views/test_send.py index f91473141..2dfe09243 100644 --- a/tests/app/main/views/test_send.py +++ b/tests/app/main/views/test_send.py @@ -16,6 +16,7 @@ from notifications_utils.recipients import RecipientCSV from tests import validate_route_permission, validate_route_permission_with_client from tests.conftest import ( + fake_uuid, mock_get_service_template, mock_get_service_template_with_placeholders, mock_get_service_letter_template, @@ -2233,3 +2234,54 @@ def test_send_notification_shows_email_error_in_trial_mode( assert normalize_spaces(page.select('.banner-dangerous p')[0].text) == ( 'In trial mode you can only send to yourself and members of your team' ) + + +@pytest.mark.parametrize('endpoint, extra_args', [ + ('main.check_messages', {'template_type': 'email', 'upload_id': fake_uuid()}), + ('main.send_one_off_step', {'template_id': fake_uuid(), 'step_index': 0}), +]) +@pytest.mark.parametrize('reply_to_address', [ + None, + fake_uuid(), +]) +def test_reply_to_is_previewed_if_chosen( + client_request, + mocker, + mock_get_service_email_template, + mock_s3_download, + mock_get_users_by_service, + mock_get_detailed_service_for_today, + get_default_reply_to_email_address, + endpoint, + extra_args, + reply_to_address, +): + + mocker.patch('app.main.views.send.s3download', return_value=""" + email_address,date,thing + notify@digital.cabinet-office.gov.uk,foo,bar + """) + + with client_request.session_transaction() as session: + session['recipient'] = 'notify@digital.cabinet-office.gov.uk' + session['placeholders'] = {} + session['upload_data'] = { + 'original_file_name': 'example.csv', + 'template_id': fake_uuid(), + 'notification_count': 1, + 'valid': True + } + session['sender_id'] = reply_to_address + + page = client_request.get( + endpoint, + service_id=SERVICE_ONE_ID, + **extra_args + ) + + email_meta = page.select_one('.email-message-meta').text + + if reply_to_address: + assert 'test@example.com' in email_meta + else: + assert 'test@example.com' not in email_meta