fix pdf download link trying to request a page count

It doesn't make sense to get a pdf for only one page - the template
preview app just returns a 400 if you try. So we shouldn't try!
This commit is contained in:
Leo Hemsted
2018-10-15 14:02:13 +01:00
parent 6154495c1b
commit c898284c3b
3 changed files with 35 additions and 5 deletions

View File

@@ -266,7 +266,7 @@ def platform_admin_letter_validation_preview():
if response.status_code == 200: if response.status_code == 200:
pages, message, result = response.json()["pages"], response.json()["message"], response.json()["result"] pages, message, result = response.json()["pages"], response.json()["message"], response.json()["result"]
except RequestException as error: except RequestException as error:
if 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', 'views/platform-admin/letter-validation-preview.html',

View File

@@ -656,13 +656,17 @@ def check_messages(service_id, template_id, upload_id, row_index=2):
@login_required @login_required
@user_has_permissions('send_messages') @user_has_permissions('send_messages')
def check_messages_preview(service_id, template_id, upload_id, filetype, row_index=2): def check_messages_preview(service_id, template_id, upload_id, filetype, row_index=2):
if filetype not in ('pdf', 'png'): if filetype == 'pdf':
page = None
elif filetype == 'png':
page = request.args.get('page', 1)
else:
abort(404) abort(404)
template = _check_messages( template = _check_messages(
service_id, template_id, upload_id, row_index, letters_as_pdf=True service_id, template_id, upload_id, row_index, letters_as_pdf=True
)['template'] )['template']
return TemplatePreview.from_utils_template(template, filetype, page=request.args.get('page', 1)) return TemplatePreview.from_utils_template(template, filetype, page=page)
@main.route("/services/<service_id>/start-job/<upload_id>", methods=['POST']) @main.route("/services/<service_id>/start-job/<upload_id>", methods=['POST'])

View File

@@ -2060,19 +2060,43 @@ def test_can_start_letters_job(
assert 'just_sent=yes' in response.location assert 'just_sent=yes' in response.location
@pytest.mark.parametrize('filetype', ['pdf', 'png']) @pytest.mark.parametrize('filetype, extra_args, expected_values, expected_page', [
@pytest.mark.parametrize('extra_args, expected_values', [
( (
'png',
{}, {},
{'postcode': 'abc123', 'addressline1': '123 street'}, {'postcode': 'abc123', 'addressline1': '123 street'},
1
), ),
( (
'pdf',
{},
{'postcode': 'abc123', 'addressline1': '123 street'},
None
),
(
'png',
{'row_index': 2}, {'row_index': 2},
{'postcode': 'abc123', 'addressline1': '123 street'}, {'postcode': 'abc123', 'addressline1': '123 street'},
1
), ),
( (
'png',
{'row_index': 3}, {'row_index': 3},
{'postcode': 'cba321', 'addressline1': '321 avenue'}, {'postcode': 'cba321', 'addressline1': '321 avenue'},
1
),
(
'png',
{'row_index': 3, 'page': 2},
{'postcode': 'cba321', 'addressline1': '321 avenue'},
'2'
),
(
# pdf expected page is always None
'pdf',
{'row_index': 3, 'page': 2},
{'postcode': 'cba321', 'addressline1': '321 avenue'},
None
), ),
]) ])
def test_should_show_preview_letter_message( def test_should_show_preview_letter_message(
@@ -2087,6 +2111,7 @@ def test_should_show_preview_letter_message(
mocker, mocker,
extra_args, extra_args,
expected_values, expected_values,
expected_page
): ):
service_one['permissions'] = ['letter'] service_one['permissions'] = ['letter']
mocker.patch('app.service_api_client.get_service', return_value={"data": service_one}) mocker.patch('app.service_api_client.get_service', return_value={"data": service_one})
@@ -2135,6 +2160,7 @@ def test_should_show_preview_letter_message(
assert type(mocked_preview.call_args[0][0]) == LetterPreviewTemplate assert type(mocked_preview.call_args[0][0]) == LetterPreviewTemplate
assert mocked_preview.call_args[0][1] == filetype assert mocked_preview.call_args[0][1] == filetype
assert mocked_preview.call_args[0][0].values == expected_values assert mocked_preview.call_args[0][0].values == expected_values
assert mocked_preview.call_args[1] == {'page': expected_page}
def test_dont_show_preview_letter_templates_for_bad_filetype( def test_dont_show_preview_letter_templates_for_bad_filetype(