mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-07-25 10:29:14 -04:00
Merge pull request #2773 from alphagov/letter-branding-preview
Add preview pane for letter branding
This commit is contained in:
@@ -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'
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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}
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user