Merge pull request #1224 from alphagov/letters-from-a-service

Letters from template-preview service
This commit is contained in:
Leo Hemsted
2017-04-18 15:56:24 +01:00
committed by GitHub
12 changed files with 190 additions and 126 deletions

View File

@@ -2,14 +2,13 @@ import uuid
from io import BytesIO
from os import path
from glob import glob
import re
from itertools import repeat
from functools import partial
from unittest.mock import patch
import pytest
from bs4 import BeautifulSoup
from flask import url_for
from notifications_utils.template import LetterPreviewTemplate
from app.main.views.send import get_check_messages_back_url
@@ -524,18 +523,9 @@ def test_can_start_letters_job(
assert response.status_code == 302
@pytest.mark.parametrize(
'view, expected_content_type',
[
('.check_messages_as_pdf', 'application/pdf'),
('.check_messages_as_png', 'image/png'),
]
)
@patch('app.utils.LetterPreviewTemplate.jinja_template.render', return_value='')
@pytest.mark.parametrize('filetype', ['pdf', 'png'])
def test_should_show_preview_letter_message(
mock_letter_preview,
view,
expected_content_type,
filetype,
logged_in_platform_admin_client,
mock_get_service_letter_template,
mock_get_users_by_service,
@@ -554,6 +544,10 @@ def test_should_show_preview_letter_message(
['123 street, abc123']
)
)
mocked_preview = mocker.patch(
'app.main.views.send.TemplatePreview.from_utils_template',
return_value='foo'
)
service_id = service_one['id']
template_id = fake_uuid
@@ -565,18 +559,41 @@ def test_should_show_preview_letter_message(
'valid': True
}
response = logged_in_platform_admin_client.get(
url_for(view, service_id=service_id, template_type='letter', upload_id=fake_uuid)
url_for(
'main.check_messages_preview',
service_id=service_id,
template_type='letter',
upload_id=fake_uuid,
filetype=filetype
)
)
assert response.status_code == 200
assert response.content_type == expected_content_type
mock_get_service_letter_template.assert_called_with(service_id, template_id)
assert mock_letter_preview.call_args[0][0]['subject'] == (
'Subject'
)
assert mock_letter_preview.call_args[0][0]['message'] == (
'<p>Template &lt;em&gt;content&lt;/em&gt; with &amp; entity</p>'
assert response.status_code == 200
assert response.get_data(as_text=True) == 'foo'
assert mocked_preview.call_args[0][0].id == template_id
assert type(mocked_preview.call_args[0][0]) == LetterPreviewTemplate
assert mocked_preview.call_args[0][1] == filetype
def test_dont_show_preview_letter_templates_for_bad_filetype(
logged_in_client,
mock_get_service_template,
service_one,
fake_uuid
):
resp = logged_in_client.get(
url_for(
'main.check_messages_preview',
service_id=service_one['id'],
template_type='letter',
upload_id=fake_uuid,
filetype='blah'
)
)
assert resp.status_code == 404
assert mock_get_service_template.called is False
def test_check_messages_should_revalidate_file_when_uploading_file(

View File

@@ -1,6 +1,5 @@
from itertools import repeat
from datetime import datetime
from unittest.mock import Mock, patch, ANY
from unittest.mock import Mock, ANY
import pytest
from bs4 import BeautifulSoup
@@ -148,44 +147,60 @@ def test_should_show_page_template_with_priority_select_if_platform_admin(
mock_get_service_template.assert_called_with('1234', template_id)
@pytest.mark.parametrize('view_suffix, expected_content_type', [
('as_pdf', 'application/pdf'),
('as_png', 'image/png'),
])
@pytest.mark.parametrize('filetype', ['pdf', 'png'])
@pytest.mark.parametrize('view, extra_view_args', [
('.view_letter_template', {}),
('.view_template_version', {'version': 1}),
('.view_letter_template_preview', {}),
('.view_template_version_preview', {'version': 1}),
])
@patch('app.main.views.templates.LetterPreviewTemplate.jinja_template.render', return_value='foo')
def test_should_show_preview_letter_templates(
mock_letter_preview,
view,
extra_view_args,
view_suffix,
expected_content_type,
filetype,
logged_in_client,
mock_get_service_email_template,
mock_get_user_by_email,
service_one,
fake_uuid
fake_uuid,
mocker
):
mocked_preview = mocker.patch(
'app.main.views.templates.TemplatePreview.from_database_object',
return_value='foo'
)
service_id, template_id = service_one['id'], fake_uuid
response = logged_in_client.get(url_for(
'{}_{}'.format(view, view_suffix),
view,
service_id=service_id,
template_id=template_id,
filetype=filetype,
**extra_view_args
))
assert response.status_code == 200
assert response.content_type == expected_content_type
assert response.get_data(as_text=True) == 'foo'
mock_get_service_email_template.assert_called_with(service_id, template_id, **extra_view_args)
assert mock_letter_preview.call_args[0][0]['subject'] == (
"Your <span class='placeholder'>((thing))</span> is due soon"
)
assert mock_letter_preview.call_args[0][0]['message'] == (
"<p>Your vehicle tax expires on <span class='placeholder'>((date))</span></p>"
assert mocked_preview.call_args[0][0]['id'] == template_id
assert mocked_preview.call_args[0][0]['service'] == service_id
assert mocked_preview.call_args[0][1] == filetype
def test_dont_show_preview_letter_templates_for_bad_filetype(
logged_in_client,
mock_get_service_template,
service_one,
fake_uuid
):
resp = logged_in_client.get(
url_for(
'.view_letter_template_preview',
service_id=service_one['id'],
template_id=fake_uuid,
filetype='blah'
)
)
assert resp.status_code == 404
assert mock_get_service_template.called is False
def test_should_redirect_when_saving_a_template(