mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-09-06 18:08:25 -04:00
Merge pull request #2859 from alphagov/make-letter-validation-preview-public
Make the letter-validation-preview URL public.
This commit is contained in:
@@ -253,20 +253,41 @@ def platform_admin_returned_letters():
|
|||||||
@login_required
|
@login_required
|
||||||
@user_is_platform_admin
|
@user_is_platform_admin
|
||||||
def platform_admin_letter_validation_preview():
|
def platform_admin_letter_validation_preview():
|
||||||
|
return letter_validation_preview(from_platform_admin=True)
|
||||||
|
|
||||||
|
|
||||||
|
@main.route("/services/<service_id>/letter-validation-preview", methods=["GET", "POST"])
|
||||||
|
@login_required
|
||||||
|
def service_letter_validation_preview(service_id):
|
||||||
|
return letter_validation_preview(from_platform_admin=False)
|
||||||
|
|
||||||
|
|
||||||
|
def letter_validation_preview(from_platform_admin):
|
||||||
message, pages, result = None, [], None
|
message, pages, result = None, [], None
|
||||||
form = PDFUploadForm()
|
form = PDFUploadForm()
|
||||||
|
|
||||||
|
view_location = 'views/platform-admin/letter-validation-preview.html' \
|
||||||
|
if from_platform_admin else'views/letter-validation-preview.html'
|
||||||
|
|
||||||
if form.validate_on_submit():
|
if form.validate_on_submit():
|
||||||
pdf_file = form.file.data
|
pdf_file = form.file.data
|
||||||
virus_free = antivirus_client.scan(pdf_file)
|
virus_free = antivirus_client.scan(pdf_file)
|
||||||
|
|
||||||
if not virus_free:
|
if not virus_free:
|
||||||
return render_template(
|
return render_template(
|
||||||
'views/platform-admin/letter-validation-preview.html',
|
view_location,
|
||||||
form=form, message="Document didn't pass the virus scan", pages=pages, result=result
|
form=form, message="Document didn't pass the virus scan", pages=pages, result=result
|
||||||
), 400
|
), 400
|
||||||
|
|
||||||
try:
|
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 = validate_letter(pdf_file)
|
||||||
response.raise_for_status()
|
response.raise_for_status()
|
||||||
if response.status_code == 200:
|
if response.status_code == 200:
|
||||||
@@ -275,14 +296,14 @@ def platform_admin_letter_validation_preview():
|
|||||||
if error.response and error.response.status_code == 400:
|
if error.response and error.response.status_code == 400:
|
||||||
message = "Something was wrong with the file you tried to upload. Please upload a valid PDF file."
|
message = "Something was wrong with the file you tried to upload. Please upload a valid PDF file."
|
||||||
return render_template(
|
return render_template(
|
||||||
'views/platform-admin/letter-validation-preview.html',
|
view_location,
|
||||||
form=form, message=message, pages=pages, result=result
|
form=form, message=message, pages=pages, result=result
|
||||||
), 400
|
), 400
|
||||||
else:
|
else:
|
||||||
raise error
|
raise error
|
||||||
|
|
||||||
return render_template(
|
return render_template(
|
||||||
'views/platform-admin/letter-validation-preview.html',
|
view_location,
|
||||||
form=form, message=message, pages=pages, result=result
|
form=form, message=message, pages=pages, result=result
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -233,6 +233,7 @@ class HeaderNavigation(Navigation):
|
|||||||
'service_edit_sms_sender',
|
'service_edit_sms_sender',
|
||||||
'service_email_reply_to',
|
'service_email_reply_to',
|
||||||
'service_letter_contact_details',
|
'service_letter_contact_details',
|
||||||
|
'service_letter_validation_preview',
|
||||||
'service_name_change',
|
'service_name_change',
|
||||||
'service_name_change_confirm',
|
'service_name_change_confirm',
|
||||||
'service_preview_email_branding',
|
'service_preview_email_branding',
|
||||||
@@ -487,6 +488,7 @@ class MainNavigation(Navigation):
|
|||||||
'service_dashboard_updates',
|
'service_dashboard_updates',
|
||||||
'service_delete_email_reply_to',
|
'service_delete_email_reply_to',
|
||||||
'service_delete_sms_sender',
|
'service_delete_sms_sender',
|
||||||
|
'service_letter_validation_preview',
|
||||||
'service_switch_can_upload_document',
|
'service_switch_can_upload_document',
|
||||||
'service_switch_live',
|
'service_switch_live',
|
||||||
'service_set_permission',
|
'service_set_permission',
|
||||||
@@ -701,6 +703,7 @@ class CaseworkNavigation(Navigation):
|
|||||||
'service_edit_sms_sender',
|
'service_edit_sms_sender',
|
||||||
'service_email_reply_to',
|
'service_email_reply_to',
|
||||||
'service_letter_contact_details',
|
'service_letter_contact_details',
|
||||||
|
'service_letter_validation_preview',
|
||||||
'service_name_change',
|
'service_name_change',
|
||||||
'service_name_change_confirm',
|
'service_name_change_confirm',
|
||||||
'service_preview_email_branding',
|
'service_preview_email_branding',
|
||||||
@@ -940,6 +943,7 @@ class OrgNavigation(Navigation):
|
|||||||
'service_edit_sms_sender',
|
'service_edit_sms_sender',
|
||||||
'service_email_reply_to',
|
'service_email_reply_to',
|
||||||
'service_letter_contact_details',
|
'service_letter_contact_details',
|
||||||
|
'service_letter_validation_preview',
|
||||||
'service_name_change',
|
'service_name_change',
|
||||||
'service_name_change_confirm',
|
'service_name_change_confirm',
|
||||||
'service_preview_email_branding',
|
'service_preview_email_branding',
|
||||||
|
|||||||
57
app/templates/views/letter-validation-preview.html
Normal file
57
app/templates/views/letter-validation-preview.html
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
{% extends "withnav_template.html" %}
|
||||||
|
{% from "components/banner.html" import banner %}
|
||||||
|
{% from "components/textbox.html" import textbox %}
|
||||||
|
{% from "components/file-upload.html" import file_upload %}
|
||||||
|
{% 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 %}
|
||||||
|
|
||||||
|
<div class="grid-row">
|
||||||
|
<div class="column-whole">
|
||||||
|
{% if result %}
|
||||||
|
{{ banner(message, with_tick=True) }}
|
||||||
|
{% elif message %}
|
||||||
|
{{ banner(message, 'dangerous')}}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
<h1 class="heading-large">Letter validation preview</h1>
|
||||||
|
<div class="bottom-gutter">
|
||||||
|
{{ file_upload(
|
||||||
|
form.file,
|
||||||
|
action = url_for('main.service_letter_validation_preview', service_id=current_service.id),
|
||||||
|
button_text='Choose a file',
|
||||||
|
)}}
|
||||||
|
</div>
|
||||||
|
{%if not pages %}
|
||||||
|
<div>
|
||||||
|
<h1 class="heading-medium">Check your file meets the letter specification </h1>
|
||||||
|
<p>Your file must be:
|
||||||
|
<li>a PDF</li>
|
||||||
|
<li>no more than 10 pages long</li>
|
||||||
|
<li>less than 2 MB</li>
|
||||||
|
</p>
|
||||||
|
<p>The content of your letter mut appear inside the printable area.</p>
|
||||||
|
<p>
|
||||||
|
<a href="https://docs.notifications.service.gov.uk/documentation/images/notify-pdf-letter-spec-v2.3.pdf">
|
||||||
|
Download the letter specification</a> for more information.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
{% endif%}
|
||||||
|
</div>
|
||||||
|
<div class="column-whole template-container" >
|
||||||
|
|
||||||
|
{% for page in pages %}
|
||||||
|
<div class="letter">
|
||||||
|
<img src="data:image/png;base64,{{ page }}">
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% endblock %}
|
||||||
@@ -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)
|
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):
|
def test_letter_validation_preview_renders_correctly(mocker, client, platform_admin_user):
|
||||||
mock_get_user(mocker, user=platform_admin_user)
|
mock_get_user(mocker, user=platform_admin_user)
|
||||||
client.login(platform_admin_user)
|
client.login(platform_admin_user)
|
||||||
|
|||||||
BIN
tests/test_pdf_files/big.pdf
Normal file
BIN
tests/test_pdf_files/big.pdf
Normal file
Binary file not shown.
Reference in New Issue
Block a user