Merge pull request #2773 from alphagov/letter-branding-preview

Add preview pane for letter branding
This commit is contained in:
Katie Smith
2019-02-19 14:05:21 +00:00
committed by GitHub
18 changed files with 308 additions and 23 deletions

View File

@@ -4,6 +4,7 @@ import pytest
from bs4 import BeautifulSoup
from flask import url_for
from app.main.forms import FieldWithNoneOption
from tests.conftest import (
active_user_with_permissions,
normalize_spaces,
@@ -288,3 +289,41 @@ def test_email_branding_preview(
**extra_args
)
assert mock_get_email_branding.called is email_branding_retrieved
@pytest.mark.parametrize('branding_style, filename', [
('hm-government', 'hm-government'),
(None, 'no-branding'),
(FieldWithNoneOption.NONE_OPTION_VALUE, 'no-branding')
])
def test_letter_template_preview_links_to_the_correct_image(
client_request,
mocker,
mock_get_letter_branding_by_id,
branding_style,
filename,
):
page = client_request.get(
'main.letter_template',
_test_page_title=False,
branding_style=branding_style
)
image_link = page.find('img')['src']
assert image_link == url_for(
'main.letter_branding_preview_image',
filename=filename,
page=1
)
def test_letter_template_preview_headers(
client,
mock_get_letter_branding_by_id,
):
response = client.get(
url_for('main.letter_template', branding_style='hm-government')
)
assert response.headers.get('X-Frame-Options') == 'SAMEORIGIN'

View File

@@ -2175,7 +2175,44 @@ def test_service_set_letter_branding_prepopulates(
(str(UUID(int=1)), str(UUID(int=1))),
('__NONE__', None),
])
def test_service_set_letter_branding_saves(
def test_service_set_letter_branding_redirects_to_preview_page_when_form_submitted(
logged_in_platform_admin_client,
service_one,
mock_get_all_letter_branding,
selected_letter_branding,
expected_post_data
):
response = logged_in_platform_admin_client.post(
url_for('main.service_set_letter_branding', service_id=service_one['id']),
data={'branding_style': selected_letter_branding},
)
assert response.status_code == 302
assert response.location == url_for(
'main.service_preview_letter_branding',
service_id=service_one['id'],
branding_style=expected_post_data,
_external=True)
def test_service_preview_letter_branding_shows_preview_letter(
logged_in_platform_admin_client,
service_one,
mock_get_all_letter_branding,
):
response = logged_in_platform_admin_client.get(
url_for('main.service_preview_letter_branding', service_id=service_one['id'], branding_style='hm-government')
)
page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
assert response.status_code == 200
assert page.find('iframe')['src'] == url_for('main.letter_template', branding_style='hm-government')
@pytest.mark.parametrize('selected_letter_branding, expected_post_data', [
(str(UUID(int=1)), str(UUID(int=1))),
('__NONE__', None),
])
def test_service_preview_letter_branding_saves(
logged_in_platform_admin_client,
service_one,
mock_update_service,
@@ -2184,7 +2221,7 @@ def test_service_set_letter_branding_saves(
expected_post_data
):
response = logged_in_platform_admin_client.post(
url_for('main.service_set_letter_branding', service_id=service_one['id']),
url_for('main.service_preview_letter_branding', service_id=service_one['id']),
data={'branding_style': selected_letter_branding}
)
assert response.status_code == 302
@@ -2276,7 +2313,7 @@ def test_should_preview_email_branding(
))
assert response.status_code == 200
page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
iframe = page.find('iframe', attrs={"class": "email-branding-preview"})
iframe = page.find('iframe', attrs={"class": "branding-preview"})
iframeURLComponents = urlparse(iframe['src'])
iframeQString = parse_qs(iframeURLComponents.query)

View File

@@ -798,6 +798,28 @@ def test_dont_show_preview_letter_templates_for_bad_filetype(
assert mock_get_service_template.called is False
@pytest.mark.parametrize('original_filename, new_filename', [
('geo', 'geo'),
('no-branding', None)
])
def test_letter_branding_preview_image(
mocker,
logged_in_platform_admin_client,
original_filename,
new_filename,
):
mocked_preview = mocker.patch(
'app.main.views.templates.TemplatePreview.from_example_template',
return_value='foo'
)
resp = logged_in_platform_admin_client.get(
url_for('.letter_branding_preview_image', filename=original_filename)
)
mocked_preview.assert_called_with(ANY, new_filename)
assert resp.get_data(as_text=True) == 'foo'
def test_choosing_to_copy_redirects(
client_request,
service_one,

View File

@@ -102,3 +102,20 @@ def test_page_count_unpacks_from_json_response(
assert partial_call({'template_type': 'letter'}) == 99
mock_template_preview.assert_called_once_with(*expected_template_preview_args)
def test_from_example_template_makes_request(mocker):
request_mock = mocker.patch('app.template_previews.requests.post')
template = {}
filename = 'geo'
TemplatePreview.from_example_template(template, filename)
request_mock.assert_called_once_with(
'http://localhost:9999/preview.png',
headers={'Authorization': 'Token my-secret-key'},
json={'values': None,
'template': template,
'filename': filename,
'letter_contact_block': None}
)