Cache letter page count on send yourself test

Calculating the number of pages in a letter is quite slow. And the send
yourself a test pages need to load _fast_. Since filling in placeholders
is very unlikely to change the number of pages in the resultant letter,
it’s pretty safe to cache that count, and makes the subsequent pages
load a lot faster.
This commit is contained in:
Chris Hill-Scott
2017-05-16 17:52:19 +01:00
parent 16c7d17329
commit e7896f283a
2 changed files with 53 additions and 2 deletions

View File

@@ -162,6 +162,7 @@ def get_example_csv(service_id, template_id):
@user_has_permissions('send_texts', 'send_emails', 'send_letters')
def send_test(service_id, template_id):
session['send_test_values'] = dict()
session['send_test_letter_page_count'] = None
return redirect(url_for(
'.send_test_step',
service_id=service_id,
@@ -178,6 +179,9 @@ def send_test_step(service_id, template_id, step_index):
template = service_api_client.get_service_template(service_id, template_id)['data']
if not session.get('send_test_letter_page_count'):
session['send_test_letter_page_count'] = get_page_count_for_letter(template)
template = get_template(
template,
current_service,
@@ -189,7 +193,7 @@ def send_test_step(service_id, template_id, step_index):
template_id=template_id,
filetype='png',
),
page_count=get_page_count_for_letter(template),
page_count=session['send_test_letter_page_count']
)
placeholders = fields_to_fill_in(template)
@@ -271,7 +275,6 @@ def send_test_preview(service_id, template_id, filetype):
template_id=template_id,
filetype='png',
),
page_count=get_page_count_for_letter(template),
)
template.values = get_normalised_send_test_values_from_session()

View File

@@ -421,6 +421,30 @@ def test_send_test_sms_message_with_placeholders_shows_first_field(
assert session['send_test_values']['phone number'] == '07700 900762'
def test_send_test_letter_clears_previous_page_cache(
logged_in_platform_admin_client,
mocker,
service_one,
mock_login,
mock_get_service,
mock_get_service_letter_template,
fake_uuid,
):
with logged_in_platform_admin_client.session_transaction() as session:
session['send_test_letter_page_count'] = 'WRONG'
response = logged_in_platform_admin_client.get(url_for(
'main.send_test',
service_id=service_one['id'],
template_id=fake_uuid,
))
assert response.status_code == 302
with logged_in_platform_admin_client.session_transaction() as session:
assert session['send_test_letter_page_count'] is None
def test_send_test_populates_field_from_session(
logged_in_client,
mocker,
@@ -447,6 +471,30 @@ def test_send_test_populates_field_from_session(
assert page.select('input')[0]['value'] == 'Jo'
def test_send_test_caches_page_count(
logged_in_client,
mocker,
service_one,
mock_login,
mock_get_service,
mock_get_service_letter_template,
fake_uuid,
):
mocker.patch('app.main.views.send.get_page_count_for_letter', return_value=99)
response = logged_in_client.get(
url_for(
'main.send_test',
service_id=service_one['id'],
template_id=fake_uuid,
),
follow_redirects=True,
)
with logged_in_client.session_transaction() as session:
assert session['send_test_letter_page_count'] == 99
def test_send_test_indicates_optional_address_columns(
logged_in_client,
mocker,