diff --git a/app/main/views/send.py b/app/main/views/send.py index adb6ee3fd..78791a15e 100644 --- a/app/main/views/send.py +++ b/app/main/views/send.py @@ -37,7 +37,7 @@ from app.utils import ( get_help_argument, get_template ) -from app.template_previews import TemplatePreview +from app.template_previews import TemplatePreview, get_page_count_for_letter def get_page_headings(template_type): @@ -83,15 +83,19 @@ def get_example_letter_address(key): @user_has_permissions('send_texts', 'send_emails', 'send_letters') def send_messages(service_id, template_id): + template = service_api_client.get_service_template(service_id, template_id)['data'] + template = get_template( - service_api_client.get_service_template(service_id, template_id)['data'], + template, current_service, show_recipient=True, + expand_emails=True, letter_preview_url=url_for( '.view_letter_template_preview', service_id=service_id, template_id=template_id, filetype='png', + page_count=get_page_count_for_letter(template), ), ) @@ -150,15 +154,19 @@ def send_test(service_id, template_id): file_name = current_app.config['TEST_MESSAGE_FILENAME'] + template = service_api_client.get_service_template(service_id, template_id)['data'] + template = get_template( - service_api_client.get_service_template(service_id, template_id)['data'], + template, current_service, show_recipient=True, + expand_emails=True, letter_preview_url=url_for( '.view_letter_template_preview', service_id=service_id, template_id=template_id, filetype='png', + page_count=get_page_count_for_letter(template), ), ) diff --git a/app/main/views/templates.py b/app/main/views/templates.py index 9ccf46312..71b3a7cef 100644 --- a/app/main/views/templates.py +++ b/app/main/views/templates.py @@ -19,7 +19,7 @@ from notifications_python_client.errors import HTTPError from app.main import main from app.utils import user_has_permissions, get_template -from app.template_previews import TemplatePreview +from app.template_previews import TemplatePreview, get_page_count_for_letter from app.main.forms import ( ChooseTemplateType, SMSTemplateForm, @@ -74,10 +74,6 @@ def choose_template(service_id): ) def view_template(service_id, template_id): template = service_api_client.get_service_template(service_id, template_id)['data'] - page_count = None - if template['template_type'] == 'letter': - page_count, _, _ = TemplatePreview.from_database_object(template, filetype='json') - page_count = json.loads(page_count.decode('utf-8'))['count'] return render_template( 'views/templates/template.html', template=get_template( @@ -91,7 +87,7 @@ def view_template(service_id, template_id): filetype='png', ), show_recipient=True, - page_count=page_count, + page_count=get_page_count_for_letter(template), ), ) diff --git a/app/template_previews.py b/app/template_previews.py index 323d4102a..9ff71f682 100644 --- a/app/template_previews.py +++ b/app/template_previews.py @@ -1,4 +1,4 @@ -from flask import current_app +from flask import current_app, json import requests from app import current_service @@ -32,3 +32,14 @@ class TemplatePreview: template.values, page=page, ) + + +def get_page_count_for_letter(template, values=None): + + if template['template_type'] != 'letter': + return None + + page_count, _, _ = TemplatePreview.from_database_object(template, values, filetype='json') + page_count = json.loads(page_count.decode('utf-8'))['count'] + + return page_count diff --git a/tests/app/test_template_previews.py b/tests/app/test_template_previews.py index d01fcdd92..7af5b90e8 100644 --- a/tests/app/test_template_previews.py +++ b/tests/app/test_template_previews.py @@ -4,7 +4,7 @@ from functools import partial from unittest.mock import Mock from notifications_utils.template import LetterPreviewTemplate -from app.template_previews import TemplatePreview +from app.template_previews import TemplatePreview, get_page_count_for_letter @pytest.mark.parametrize('partial_call, expected_page_argument', [ @@ -65,3 +65,32 @@ def test_from_database_object_makes_request( headers = {'Authorization': 'Token my-secret-key'} request_mock.assert_called_once_with(expected_url, json=data, headers=headers) + + +@pytest.mark.parametrize('template_type', [ + 'email', 'sms' +]) +def test_page_count_returns_none_for_non_letter_templates(template_type): + assert get_page_count_for_letter({'template_type': template_type}) is None + + +@pytest.mark.parametrize('partial_call, expected_template_preview_args', [ + ( + partial(get_page_count_for_letter), + ({'template_type': 'letter'}, None) + ), + ( + partial(get_page_count_for_letter, values={'foo': 'bar'}), + ({'template_type': 'letter'}, {'foo': 'bar'}) + ), +]) +def test_page_count_unpacks_from_json_response( + mocker, + partial_call, + expected_template_preview_args, +): + mock_template_preview = mocker.patch('app.template_previews.TemplatePreview.from_database_object') + mock_template_preview.return_value = (b'{"count": 99}', 200, {}) + + assert partial_call({'template_type': 'letter'}) == 99 + mock_template_preview.assert_called_once_with(*expected_template_preview_args, filetype='json')