mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-09-10 18:22:37 -04:00
Do not allow to send job of letters if letters longer than 10 pages
This commit is contained in:
+12
-10
@@ -522,6 +522,7 @@ def _check_messages(service_id, template_id, upload_id, preview_row, letters_as_
|
|||||||
email_reply_to = get_email_reply_to_address_from_session()
|
email_reply_to = get_email_reply_to_address_from_session()
|
||||||
elif db_template['template_type'] == 'sms':
|
elif db_template['template_type'] == 'sms':
|
||||||
sms_sender = get_sms_sender_from_session()
|
sms_sender = get_sms_sender_from_session()
|
||||||
|
page_count = get_page_count_for_letter(db_template)
|
||||||
template = get_template(
|
template = get_template(
|
||||||
db_template,
|
db_template,
|
||||||
current_service,
|
current_service,
|
||||||
@@ -536,7 +537,7 @@ def _check_messages(service_id, template_id, upload_id, preview_row, letters_as_
|
|||||||
) if not letters_as_pdf else None,
|
) if not letters_as_pdf else None,
|
||||||
email_reply_to=email_reply_to,
|
email_reply_to=email_reply_to,
|
||||||
sms_sender=sms_sender,
|
sms_sender=sms_sender,
|
||||||
page_count=get_page_count_for_letter(db_template),
|
page_count=page_count,
|
||||||
)
|
)
|
||||||
recipients = RecipientCSV(
|
recipients = RecipientCSV(
|
||||||
contents,
|
contents,
|
||||||
@@ -589,7 +590,8 @@ def _check_messages(service_id, template_id, upload_id, preview_row, letters_as_
|
|||||||
preview_row=preview_row,
|
preview_row=preview_row,
|
||||||
sent_previously=job_api_client.has_sent_previously(
|
sent_previously=job_api_client.has_sent_previously(
|
||||||
service_id, template.id, db_template['version'], request.args.get('original_file_name', '')
|
service_id, template.id, db_template['version'], request.args.get('original_file_name', '')
|
||||||
)
|
),
|
||||||
|
page_count=page_count
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@@ -601,12 +603,12 @@ def check_messages(service_id, template_id, upload_id, row_index=2):
|
|||||||
data = _check_messages(service_id, template_id, upload_id, row_index)
|
data = _check_messages(service_id, template_id, upload_id, row_index)
|
||||||
|
|
||||||
if (
|
if (
|
||||||
data['recipients'].too_many_rows or
|
data['recipients'].too_many_rows
|
||||||
not data['count_of_recipients'] or
|
or not data['count_of_recipients']
|
||||||
not data['recipients'].has_recipient_columns or
|
or not data['recipients'].has_recipient_columns
|
||||||
data['recipients'].duplicate_recipient_column_headers or
|
or data['recipients'].duplicate_recipient_column_headers
|
||||||
data['recipients'].missing_column_headers or
|
or data['recipients'].missing_column_headers
|
||||||
data['sent_previously']
|
or data['sent_previously']
|
||||||
):
|
):
|
||||||
return render_template('views/check/column-errors.html', **data)
|
return render_template('views/check/column-errors.html', **data)
|
||||||
|
|
||||||
@@ -614,8 +616,8 @@ def check_messages(service_id, template_id, upload_id, row_index=2):
|
|||||||
return render_template('views/check/row-errors.html', **data)
|
return render_template('views/check/row-errors.html', **data)
|
||||||
|
|
||||||
if (
|
if (
|
||||||
data['errors'] or
|
data['errors']
|
||||||
data['trying_to_send_letters_in_trial_mode']
|
or data['trying_to_send_letters_in_trial_mode']
|
||||||
):
|
):
|
||||||
return render_template('views/check/column-errors.html', **data)
|
return render_template('views/check/column-errors.html', **data)
|
||||||
|
|
||||||
|
|||||||
@@ -39,7 +39,7 @@
|
|||||||
wrapping_class='bottom-gutter-2-3'
|
wrapping_class='bottom-gutter-2-3'
|
||||||
) }}
|
) }}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if template.template_type != 'letter' or not request.args.from_test %}
|
{% if (template.template_type != 'letter' or not request.args.from_test) and page_count < 11 %}
|
||||||
<button type="submit" class="button">Send {{ count_of_recipients }} {{ message_count_label(count_of_recipients, template.template_type, suffix='') }}</button>
|
<button type="submit" class="button">Send {{ count_of_recipients }} {{ message_count_label(count_of_recipients, template.template_type, suffix='') }}</button>
|
||||||
{% else %}
|
{% else %}
|
||||||
<a href="{{ url_for('main.check_messages_preview', service_id=current_service.id, template_id=template.id, upload_id=upload_id, filetype='pdf') }}" download class="button">Download as a PDF</a>
|
<a href="{{ url_for('main.check_messages_preview', service_id=current_service.id, template_id=template.id, upload_id=upload_id, filetype='pdf') }}" download class="button">Download as a PDF</a>
|
||||||
|
|||||||
@@ -2735,6 +2735,58 @@ def test_check_messages_shows_trial_mode_error_for_letters(
|
|||||||
assert page.select_one('.table-field-index a').text == '3'
|
assert page.select_one('.table-field-index a').text == '3'
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize('number_of_rows, expected_error_message', [
|
||||||
|
(1, 'This letter is'),
|
||||||
|
(11, 'These letters are'), # TODO: Pluralise too many pages error message for multiple letters
|
||||||
|
])
|
||||||
|
def test_check_messages_does_not_allow_to_send_letter_longer_than_10_pages(
|
||||||
|
client_request,
|
||||||
|
api_user_active,
|
||||||
|
mock_get_service_letter_template,
|
||||||
|
mock_has_permissions,
|
||||||
|
mock_get_users_by_service,
|
||||||
|
mock_get_service_statistics,
|
||||||
|
mock_get_job_doesnt_exist,
|
||||||
|
mock_get_jobs,
|
||||||
|
mock_s3_set_metadata,
|
||||||
|
fake_uuid,
|
||||||
|
mocker,
|
||||||
|
mock_get_live_service,
|
||||||
|
number_of_rows,
|
||||||
|
expected_error_message,
|
||||||
|
):
|
||||||
|
mocker.patch('app.main.views.send.s3download', return_value='\n'.join(
|
||||||
|
['address_line_1,address_line_2,postcode,'] +
|
||||||
|
['First Last, 123 Street, SW1 1AA'] * number_of_rows
|
||||||
|
))
|
||||||
|
mocker.patch(
|
||||||
|
'app.main.views.send.get_page_count_for_letter',
|
||||||
|
return_value=11,
|
||||||
|
)
|
||||||
|
|
||||||
|
with client_request.session_transaction() as session:
|
||||||
|
session['file_uploads'] = {
|
||||||
|
fake_uuid: {
|
||||||
|
'template_id': '',
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
page = client_request.get(
|
||||||
|
'main.check_messages',
|
||||||
|
service_id=SERVICE_ONE_ID,
|
||||||
|
template_id=fake_uuid,
|
||||||
|
upload_id=fake_uuid,
|
||||||
|
_test_page_title=False,
|
||||||
|
)
|
||||||
|
|
||||||
|
error = page.select('.banner-dangerous')
|
||||||
|
|
||||||
|
assert normalize_spaces(error[0].text) == 'This letter is too long Letters must be 10 pages or less'
|
||||||
|
|
||||||
|
assert len(page.select('.letter img')) == 10 # if letter longer than 10 pages, only 10 first pages are displayed
|
||||||
|
assert not page.select('[type=submit]')
|
||||||
|
|
||||||
|
|
||||||
def test_check_messages_shows_data_errors_before_trial_mode_errors_for_letters(
|
def test_check_messages_shows_data_errors_before_trial_mode_errors_for_letters(
|
||||||
mocker,
|
mocker,
|
||||||
client_request,
|
client_request,
|
||||||
|
|||||||
Reference in New Issue
Block a user