From e7896f283a0d34d433d032987ec90ef430dd0ba9 Mon Sep 17 00:00:00 2001 From: Chris Hill-Scott Date: Tue, 16 May 2017 17:52:19 +0100 Subject: [PATCH] Cache letter page count on send yourself test MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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. --- app/main/views/send.py | 7 +++-- tests/app/main/views/test_send.py | 48 +++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 2 deletions(-) diff --git a/app/main/views/send.py b/app/main/views/send.py index 5f1274dab..64fb70eb1 100644 --- a/app/main/views/send.py +++ b/app/main/views/send.py @@ -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() diff --git a/tests/app/main/views/test_send.py b/tests/app/main/views/test_send.py index b36fbec15..7e7eb1fee 100644 --- a/tests/app/main/views/test_send.py +++ b/tests/app/main/views/test_send.py @@ -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,