diff --git a/app/main/views/platform_admin.py b/app/main/views/platform_admin.py index c51ff7572..e40e33f15 100644 --- a/app/main/views/platform_admin.py +++ b/app/main/views/platform_admin.py @@ -280,6 +280,14 @@ def letter_validation_preview(from_platform_admin): ), 400 try: + if len(pdf_file.read()) > (2 * 1024 * 1024): + return render_template( + view_location, + form=form, + message="File must be less than 2MB", + pages=pages, result=result + ), 400 + pdf_file.seek(0) response = validate_letter(pdf_file) response.raise_for_status() if response.status_code == 200: diff --git a/app/templates/views/letter-validation-preview.html b/app/templates/views/letter-validation-preview.html index e10499cea..dd9e50740 100644 --- a/app/templates/views/letter-validation-preview.html +++ b/app/templates/views/letter-validation-preview.html @@ -5,6 +5,11 @@ {% from "components/page-footer.html" import page_footer %} {% from "components/form.html" import form_wrapper %} + +{% block service_page_title %} + Letter validation preview +{% endblock %} + {% block maincolumn_content %}
@@ -15,14 +20,29 @@ {{ banner(message, 'dangerous')}} {% endif %} -

Letter Validation Preview

+

Letter validation preview

{{ file_upload( form.file, - action = url_for('main.services_letter_validation_preview', service_id=current_service.id), - button_text='Upload a PDF document', + action = url_for('main.service_letter_validation_preview', service_id=current_service.id), + button_text='Choose a file', )}}
+ {%if not pages %} +
+

Check your file meets the letter specification

+

Your file must be: +

  • a PDF
  • +
  • no more than 10 pages long
  • +
  • less than 2 MB
  • +

    +

    The content of your letter mut appear inside the printable area.

    +

    + + Download the letter specification for more information. +

    +
    + {% endif%}
    diff --git a/tests/app/main/views/test_platform_admin.py b/tests/app/main/views/test_platform_admin.py index 7fba52400..87a0f90b9 100644 --- a/tests/app/main/views/test_platform_admin.py +++ b/tests/app/main/views/test_platform_admin.py @@ -761,6 +761,36 @@ def test_platform_admin_submit_empty_returned_letters(mocker, client, platform_a assert "Can’t be empty" in response.get_data(as_text=True) +def test_service_letter_validation_preview_renders_correctly( + client_request, + mock_has_no_jobs + +): + page = client_request.get('main.service_letter_validation_preview', service_id="service_1") + + assert page.find('h1').text.strip() == "Letter validation preview" + assert page.find_all('input', class_='file-upload-field') + + +def test_service_letter_validation_preview_returns_400_if_file_is_too_big( + client_request, + mock_has_no_jobs, + mocker + +): + with open('tests/test_pdf_files/big.pdf', 'rb') as file: + page = client_request.post('main.service_letter_validation_preview', service_id="service_1", + _data=dict( + pdf_file=file, + ), + content_type='multipart/form-data', + _follow_redirects=True) + + assert page.find('h1').text.strip() == "Letter validation preview" + assert page.find_all('input', class_='file-upload-field') + page.find('span', class_='error-message').text.strip() == "File must be less than 2MB" + + def test_letter_validation_preview_renders_correctly(mocker, client, platform_admin_user): mock_get_user(mocker, user=platform_admin_user) client.login(platform_admin_user) diff --git a/tests/test_pdf_files/big.pdf b/tests/test_pdf_files/big.pdf new file mode 100644 index 000000000..b617f9a98 Binary files /dev/null and b/tests/test_pdf_files/big.pdf differ