diff --git a/app/main/views/send.py b/app/main/views/send.py index 36a43b9c0..f2a7748cb 100644 --- a/app/main/views/send.py +++ b/app/main/views/send.py @@ -581,6 +581,7 @@ def check_messages(service_id, template_type, upload_id, row_index=2): data['recipients'].too_many_rows or not data['count_of_recipients'] or not data['recipients'].has_recipient_columns or + data['recipients'].duplicate_recipient_column_headers or data['recipients'].missing_column_headers ): return render_template('views/check/column-errors.html', **data) diff --git a/app/templates/views/check/column-errors.html b/app/templates/views/check/column-errors.html index 4fec14c21..cdfe988b1 100644 --- a/app/templates/views/check/column-errors.html +++ b/app/templates/views/check/column-errors.html @@ -69,6 +69,21 @@ ) }}.

+ {% elif recipients.duplicate_recipient_column_headers %} + +

+ Your file has more than one column called {{ ( + recipients.duplicate_recipient_column_headers + ) | formatted_list( + conjunction='or', + prefix='', + prefix_plural='' + ) }} +

+

+ Delete or rename one of these columns and try again. +

+ {% elif recipients.missing_column_headers %}

@@ -128,6 +143,8 @@ {% if not request.args.from_test %} + {% set column_headers = recipients._raw_column_headers if recipients.duplicate_recipient_column_headers else recipients.column_headers %} +

{{ original_file_name }}

@@ -137,14 +154,14 @@ caption_visible=False, field_headings=[ 'Row in file'|safe - ] + recipients.column_headers + ] + column_headers ) %} {% call index_field() %} {{ item.index + 2 }} {% endcall %} - {% for column in recipients.column_headers %} + {% for column in column_headers %} {% if item['columns'][column].error and not recipients.missing_column_headers %} {% call field() %} diff --git a/requirements.txt b/requirements.txt index 31dba0fc9..3cb8d632a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -18,4 +18,4 @@ notifications-python-client==4.7.2 # PaaS awscli-cwlogs>=1.4,<1.5 -git+https://github.com/alphagov/notifications-utils.git@23.8.0#egg=notifications-utils==23.8.0 +git+https://github.com/alphagov/notifications-utils.git@23.8.1#egg=notifications-utils==23.8.1 diff --git a/tests/app/main/views/test_send.py b/tests/app/main/views/test_send.py index 3554a115d..c349c6d8d 100644 --- a/tests/app/main/views/test_send.py +++ b/tests/app/main/views/test_send.py @@ -421,6 +421,17 @@ def test_upload_csvfile_with_errors_shows_check_page_with_errors( 'Skip to file contents' ) ), + ( + """ + phone number, phone number, PHONE_NUMBER + +447700900111,+447700900222,+447700900333, + """, + ( + 'Your file has more than one column called ‘phone number’ or ‘PHONE_NUMBER’ ' + 'Delete or rename one of these columns and try again. ' + 'Skip to file contents' + ) + ), ( """ phone number, name @@ -614,6 +625,40 @@ def test_upload_valid_csv_shows_preview_and_table( assert normalize_spaces(str(page.select('table tbody td')[index + 1])) == cell +def test_show_all_columns_if_there_are_duplicate_recipient_columns( + client_request, + mocker, + mock_get_live_service, + mock_get_service_template_with_placeholders, + mock_get_users_by_service, + mock_get_detailed_service_for_today, + fake_uuid, +): + + with client_request.session_transaction() as session: + session['upload_data'] = {'template_id': fake_uuid} + + mocker.patch('app.main.views.send.s3download', return_value=""" + phone number, phone_number, PHONENUMBER + 07700900001, 07700900002, 07700900003 + """) + + page = client_request.get( + 'main.check_messages', + service_id=SERVICE_ONE_ID, + template_type='sms', + upload_id=fake_uuid, + _test_page_title=False, + ) + + assert normalize_spaces(page.select_one('thead').text) == ( + 'Row in file1 phone number phone_number PHONENUMBER' + ) + assert normalize_spaces(page.select_one('tbody').text) == ( + '2 07700900003 07700900003 07700900003' + ) + + @pytest.mark.parametrize('row_index, expected_status', [ (0, 404), (1, 404),