diff --git a/app/main/views/send.py b/app/main/views/send.py index 757f8cbe0..e5fafd3b2 100644 --- a/app/main/views/send.py +++ b/app/main/views/send.py @@ -1,6 +1,7 @@ import itertools from string import ascii_uppercase +from orderedset import OrderedSet from contextlib import suppress from zipfile import BadZipFile from xlrd.biffh import XLRDError @@ -445,6 +446,7 @@ def _check_messages(service_id, template_type, upload_id, letters_as_pdf=False): template.template_type == 'letter', not request.args.get('from_test'), )), + required_recipient_columns=OrderedSet(recipients.recipient_column_headers) - optional_address_columns ) diff --git a/app/templates/views/check/column-errors.html b/app/templates/views/check/column-errors.html index 7e718b50d..4b3d788ae 100644 --- a/app/templates/views/check/column-errors.html +++ b/app/templates/views/check/column-errors.html @@ -48,7 +48,7 @@ {% elif not recipients.has_recipient_columns %}

- Your file needs {{ recipients.recipient_column_headers | formatted_list( + Your file needs {{ required_recipient_columns | formatted_list( prefix='a column called', prefix_plural='columns called' ) }} diff --git a/tests/app/main/views/test_send.py b/tests/app/main/views/test_send.py index 45e6b4b44..5cd50a5d2 100644 --- a/tests/app/main/views/test_send.py +++ b/tests/app/main/views/test_send.py @@ -1663,6 +1663,38 @@ def test_check_messages_shows_data_errors_before_trial_mode_errors_for_letters( ) +def test_check_messages_column_error_doesnt_show_optional_columns( + mocker, + client_request, + mock_get_service_letter_template, + mock_has_permissions, + mock_get_users_by_service, + mock_get_detailed_service_for_today, +): + + mocker.patch('app.main.views.send.s3download', return_value='\n'.join( + ['address_line_1,address_line_2,foo'] + + ['First Lastname,1 Example Road,SW1 1AA'] + )) + + with client_request.session_transaction() as session: + session['upload_data'] = {'template_id': '', 'original_file_name': ''} + + page = client_request.get( + 'main.check_messages', + service_id=SERVICE_ONE_ID, + template_type='letter', + upload_id=uuid.uuid4(), + _test_page_title=False, + ) + + assert normalize_spaces(page.select_one('.banner-dangerous').text) == ( + 'Your file needs columns called ‘address line 1’, ‘address line 2’ and ‘postcode’ ' + 'Right now it has columns called ‘address_line_1’, ‘address_line_2’ and ‘foo’. ' + 'Skip to file contents' + ) + + def test_generate_test_letter_doesnt_block_in_trial_mode( client_request, mocker,