Show the first line of the address from the to field.

Now persisting the address to the "to" field of the Notification, after the notification has been validated.
If the letter is pending validation, then "Checking..." will appear as the identifier for the letter.
If the letter has passed validation, then the first line of the address (now persisted in the "to" field) will be displayed, with the client reference underneath.
If the letter has failed validation the "Provided as PDF" will show be displayed, which is now the initial value of the "to" field.
This commit is contained in:
Rebecca Law
2020-01-02 16:35:54 +00:00
parent 47ec4912db
commit f8e7635a1d
9 changed files with 69 additions and 51 deletions

View File

@@ -265,15 +265,19 @@ def test_download_not_available_to_users_without_dashboard(
def test_letters_with_status_virus_scan_failed_shows_a_failure_description(
mocker,
active_user_with_permissions,
client_request,
service_one,
mock_get_service_statistics,
mock_get_service_data_retention,
mock_get_api_keys,
):
notifications = create_notifications(template_type='letter', status='virus-scan-failed', is_precompiled_letter=True)
mocker.patch('app.notification_api_client.get_notifications_for_service', return_value=notifications)
mock_get_notifications(
mocker,
active_user_with_permissions,
is_precompiled_letter=True,
noti_status='virus-scan-failed'
)
page = client_request.get(
'main.view_notifications',
service_id=service_one['id'],
@@ -563,6 +567,7 @@ def test_html_contains_notification_id(
def test_html_contains_links_for_failed_notifications(
client_request,
active_user_with_permissions,
mock_get_service_statistics,
mock_get_service_data_retention,
mock_get_no_api_keys,

View File

@@ -1,9 +1,11 @@
import urllib
from unittest.mock import Mock
import pytest
from flask import make_response, url_for
from requests import RequestException
from app.main.views.uploads import format_recipient
from app.utils import normalize_spaces
from tests.conftest import SERVICE_ONE_ID
@@ -350,8 +352,11 @@ def test_uploaded_letter_preview(
fake_uuid,
):
mocker.patch('app.main.views.uploads.service_api_client')
recipient = 'Bugs Bunny\n123 Big Hole\rLooney Town'
mocker.patch('app.main.views.uploads.get_letter_metadata', return_value={
'filename': 'my_letter.pdf', 'page_count': '1', 'status': 'valid'})
'filename': 'my_letter.pdf', 'page_count': '1', 'status': 'valid',
'recipient': urllib.parse.quote(recipient)
})
service_one['restricted'] = False
client_request.login(active_user_with_permissions, service=service_one)
@@ -455,7 +460,7 @@ def test_uploaded_letter_preview_image_does_not_show_overlay_if_no_content_outsi
def test_send_uploaded_letter_sends_letter_and_redirects_to_notification_page(mocker, service_one, client_request):
metadata = {'filename': 'my_file.pdf', 'page_count': '1', 'status': 'valid'}
metadata = {'filename': 'my_file.pdf', 'page_count': '1', 'status': 'valid', 'recipient': 'address'}
mocker.patch('app.main.views.uploads.get_letter_pdf_and_metadata', return_value=('file', metadata))
mock_send = mocker.patch('app.main.views.uploads.notification_api_client.send_precompiled_letter')
@@ -475,7 +480,7 @@ def test_send_uploaded_letter_sends_letter_and_redirects_to_notification_page(mo
_external=True
)
)
mock_send.assert_called_once_with(SERVICE_ONE_ID, 'my_file.pdf', file_id, 'first')
mock_send.assert_called_once_with(SERVICE_ONE_ID, 'my_file.pdf', file_id, 'first', 'address')
@pytest.mark.parametrize('permissions', [
@@ -522,3 +527,14 @@ def test_send_uploaded_letter_when_metadata_states_pdf_is_invalid(mocker, servic
_expected_status=403
)
assert not mock_send.called
@pytest.mark.parametrize('original_address,expected_address', [
('The Queen, Buckingham Palace, SW1 1AA', 'The Queen, Buckingham Palace, SW1 1AA'),
('The Queen Buckingham Palace SW1 1AA', 'The Queen Buckingham Palace SW1 1AA'),
('The Queen,\nBuckingham Palace,\r\nSW1 1AA', 'The Queen, Buckingham Palace, SW1 1AA'),
('The Queen ,,\nBuckingham Palace,\rSW1 1AA,', 'The Queen, Buckingham Palace, SW1 1AA'),
(' The Queen\n Buckingham Palace\n SW1 1AA', 'The Queen, Buckingham Palace, SW1 1AA'),
])
def test_format_recipient(original_address, expected_address):
assert format_recipient(urllib.parse.quote(original_address)) == expected_address

View File

@@ -65,7 +65,8 @@ def test_send_precompiled_letter(mocker, logged_in_client, active_user_with_perm
'abcd-1234',
'my_file.pdf',
'file-ID',
'second'
'second',
'Bugs Bunny, 12 Hole Avenue, Looney Town'
)
mock_post.assert_called_once_with(
url='/service/abcd-1234/send-pdf-letter',
@@ -74,6 +75,7 @@ def test_send_precompiled_letter(mocker, logged_in_client, active_user_with_perm
'file_id': 'file-ID',
'created_by': active_user_with_permissions['id'],
'postage': 'second',
'recipient_address': 'Bugs Bunny, 12 Hole Avenue, Looney Town',
}
)

View File

@@ -1,27 +1,29 @@
import pytest
import urllib
from flask import current_app
from app.s3_client.s3_letter_upload_client import (
format_recipient,
upload_letter_to_s3,
)
from app.s3_client.s3_letter_upload_client import upload_letter_to_s3
def test_upload_letter_to_s3(mocker):
s3_mock = mocker.patch('app.s3_client.s3_letter_upload_client.utils_s3upload')
recipient = 'Bugs Bunny\n123 Big Hole\nLooney Town'
upload_letter_to_s3(
'pdf_data',
file_location='service_id/upload_id.pdf',
status='valid',
page_count=3,
filename='my_doc')
filename='my_doc',
recipient=recipient
)
s3_mock.assert_called_once_with(
bucket_name=current_app.config['TRANSIENT_UPLOADED_LETTERS'],
file_location='service_id/upload_id.pdf',
filedata='pdf_data',
metadata={'status': 'valid', 'page_count': '3', 'filename': 'my_doc'},
metadata={'status': 'valid', 'page_count': '3', 'filename': 'my_doc',
'recipient': urllib.parse.quote(recipient)},
region=current_app.config['AWS_REGION']
)
@@ -51,15 +53,3 @@ def test_upload_letter_to_s3_with_message_and_invalid_pages(mocker):
},
region=current_app.config['AWS_REGION']
)
@pytest.mark.parametrize('original_address,expected_address', [
('The Queen, Buckingham Palace, SW1 1AA', 'The Queen, Buckingham Palace, SW1 1AA'),
('The Queen Buckingham Palace SW1 1AA', 'The Queen Buckingham Palace SW1 1AA'),
('The Queen,\nBuckingham Palace,\r\nSW1 1AA', 'The Queen, Buckingham Palace, SW1 1AA'),
('The Queen ,,\nBuckingham Palace,\rSW1 1AA,', 'The Queen, Buckingham Palace, SW1 1AA'),
(' The Queen\n Buckingham Palace\n SW1 1AA', 'The Queen, Buckingham Palace, SW1 1AA'),
("The Queen\n Buckingham Palace\n SW1 1AA", "The 'Queen, Buckingham Palace, SW1 1AA"),
])
def test_format_recipient(original_address, expected_address):
assert format_recipient(original_address) == expected_address