Merge pull request #2859 from alphagov/make-letter-validation-preview-public

Make the letter-validation-preview URL public.
This commit is contained in:
Rebecca Law
2019-03-20 12:15:10 +00:00
committed by GitHub
5 changed files with 115 additions and 3 deletions

View File

@@ -253,20 +253,41 @@ def platform_admin_returned_letters():
@login_required
@user_is_platform_admin
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
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():
pdf_file = form.file.data
virus_free = antivirus_client.scan(pdf_file)
if not virus_free:
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
), 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:
@@ -275,14 +296,14 @@ def platform_admin_letter_validation_preview():
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."
return render_template(
'views/platform-admin/letter-validation-preview.html',
view_location,
form=form, message=message, pages=pages, result=result
), 400
else:
raise error
return render_template(
'views/platform-admin/letter-validation-preview.html',
view_location,
form=form, message=message, pages=pages, result=result
)

View File

@@ -233,6 +233,7 @@ class HeaderNavigation(Navigation):
'service_edit_sms_sender',
'service_email_reply_to',
'service_letter_contact_details',
'service_letter_validation_preview',
'service_name_change',
'service_name_change_confirm',
'service_preview_email_branding',
@@ -487,6 +488,7 @@ class MainNavigation(Navigation):
'service_dashboard_updates',
'service_delete_email_reply_to',
'service_delete_sms_sender',
'service_letter_validation_preview',
'service_switch_can_upload_document',
'service_switch_live',
'service_set_permission',
@@ -701,6 +703,7 @@ class CaseworkNavigation(Navigation):
'service_edit_sms_sender',
'service_email_reply_to',
'service_letter_contact_details',
'service_letter_validation_preview',
'service_name_change',
'service_name_change_confirm',
'service_preview_email_branding',
@@ -940,6 +943,7 @@ class OrgNavigation(Navigation):
'service_edit_sms_sender',
'service_email_reply_to',
'service_letter_contact_details',
'service_letter_validation_preview',
'service_name_change',
'service_name_change_confirm',
'service_preview_email_branding',

View 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 %}

View File

@@ -761,6 +761,36 @@ def test_platform_admin_submit_empty_returned_letters(mocker, client, platform_a
assert "Cant 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)

Binary file not shown.