Use fixtures for templates in a Pytest 5 compatible way

This commit is contained in:
Katie Smith
2020-01-08 09:10:04 +00:00
parent 9e3f21cd39
commit 0ec086cd24
4 changed files with 219 additions and 137 deletions

View File

@@ -12,7 +12,7 @@ from tests.conftest import (
create_active_caseworking_user,
create_active_user_with_permissions,
create_notifications,
mock_get_service_letter_template,
create_template,
normalize_spaces,
)
@@ -768,8 +768,10 @@ def test_should_show_letter_job_with_first_class_if_no_notifications(
mock_get_service_data_retention,
mocker
):
mock_get_service_letter_template(mocker, postage="first")
mocker.patch(
'app.service_api_client.get_service_template',
return_value={'data': create_template(template_type='letter', postage='first')}
)
page = client_request.get(
'main.view_job',

View File

@@ -34,14 +34,12 @@ from tests.conftest import (
SERVICE_ONE_ID,
create_active_caseworking_user,
create_active_user_with_permissions,
create_multiple_email_reply_to_addresses,
create_multiple_sms_senders,
create_template,
mock_get_service_email_template,
mock_get_service_letter_template,
mock_get_service_template,
mock_get_service_template_with_placeholders,
multiple_reply_to_email_addresses,
multiple_sms_senders,
multiple_sms_senders_no_inbound,
multiple_sms_senders_with_diff_default,
normalize_spaces,
)
@@ -54,72 +52,85 @@ test_spreadsheet_files = glob(path.join('tests', 'spreadsheet_files', '*'))
test_non_spreadsheet_files = glob(path.join('tests', 'non_spreadsheet_files', '*'))
@pytest.mark.parametrize('template_mock, sender_data, expected_title, expected_description', [
(
mock_get_service_email_template,
multiple_reply_to_email_addresses,
'Where should replies come back to?',
'Where should replies come back to?',
),
(
mock_get_service_template,
multiple_sms_senders,
'Who should the message come from?',
'Who should the message come from?',
)
])
def test_show_correct_title_and_description_for_sender_type(
def test_show_correct_title_and_description_for_email_sender_type(
client_request,
service_one,
fake_uuid,
template_mock,
sender_data,
expected_title,
expected_description,
mocker
mock_get_service_email_template,
multiple_reply_to_email_addresses,
):
template_mock(mocker)
sender_data(mocker)
page = client_request.get(
'.set_sender',
service_id=service_one['id'],
service_id=SERVICE_ONE_ID,
template_id=fake_uuid
)
assert page.select_one('h1').text == expected_title
assert page.select_one('h1').text == 'Where should replies come back to?'
for element in ('legend', 'legend .govuk-visually-hidden'):
assert normalize_spaces(page.select_one(element).text) == expected_description
assert normalize_spaces(page.select_one(element).text) == 'Where should replies come back to?'
@pytest.mark.parametrize('template_mock, sender_data', [
(
mock_get_service_email_template,
multiple_reply_to_email_addresses,
),
(
mock_get_service_template,
multiple_sms_senders_with_diff_default
),
(
mock_get_service_template,
multiple_sms_senders_no_inbound
)
])
def test_default_sender_is_checked_and_has_hint(
def test_show_correct_title_and_description_for_sms_sender_type(
client_request,
service_one,
fake_uuid,
template_mock,
sender_data,
mocker
mock_get_service_template,
multiple_sms_senders,
):
template_mock(mocker)
sender_data(mocker)
page = client_request.get(
'.set_sender',
service_id=service_one['id'],
service_id=SERVICE_ONE_ID,
template_id=fake_uuid
)
assert page.select_one('h1').text == 'Who should the message come from?'
for element in ('legend', 'legend .govuk-visually-hidden'):
assert normalize_spaces(page.select_one(element).text) == 'Who should the message come from?'
def test_default_email_sender_is_checked_and_has_hint(
client_request,
fake_uuid,
mock_get_service_email_template,
multiple_reply_to_email_addresses,
):
page = client_request.get(
'.set_sender',
service_id=SERVICE_ONE_ID,
template_id=fake_uuid
)
assert page.select('.multiple-choice input')[0].has_attr('checked')
assert normalize_spaces(page.select_one('.multiple-choice label .block-label-hint').text) == "(Default)"
assert not page.select('.multiple-choice input')[1].has_attr('checked')
def test_default_sms_sender_is_checked_and_has_hint(
client_request,
fake_uuid,
mock_get_service_template,
multiple_sms_senders_with_diff_default,
):
page = client_request.get(
'.set_sender',
service_id=SERVICE_ONE_ID,
template_id=fake_uuid
)
assert page.select('.multiple-choice input')[0].has_attr('checked')
assert normalize_spaces(page.select_one('.multiple-choice label .block-label-hint').text) == "(Default)"
assert not page.select('.multiple-choice input')[1].has_attr('checked')
def test_default_sms_sender_is_checked_and_has_hint_when_there_are_no_inbound_numbers(
client_request,
fake_uuid,
mock_get_service_template,
multiple_sms_senders_no_inbound,
):
page = client_request.get(
'.set_sender',
service_id=SERVICE_ONE_ID,
template_id=fake_uuid
)
@@ -168,26 +179,32 @@ def test_sms_sender_has_receives_replies_hint(
assert not page.select('.multiple-choice input')[2].has_attr('checked')
@pytest.mark.parametrize('template_mock, sender_data', [
@pytest.mark.parametrize('template_type, sender_data', [
(
mock_get_service_email_template,
multiple_reply_to_email_addresses,
'email',
create_multiple_email_reply_to_addresses(),
),
(
mock_get_service_template,
multiple_sms_senders
'sms',
create_multiple_sms_senders()
)
])
def test_sender_session_is_present_after_selected(
client_request,
service_one,
fake_uuid,
template_mock,
template_type,
sender_data,
mocker
):
template_mock(mocker)
sender_data(mocker)
template_data = create_template(template_type=template_type)
mocker.patch('app.service_api_client.get_service_template', return_value={'data': template_data})
if template_type == 'email':
mocker.patch('app.service_api_client.get_reply_to_email_addresses', return_value=sender_data)
else:
mocker.patch('app.service_api_client.get_sms_senders', return_value=sender_data)
client_request.post(
'.set_sender',
service_id=service_one['id'],
@@ -989,47 +1006,54 @@ def test_send_test_doesnt_show_file_contents(
assert page.select_one('button[type=submit]').text.strip() == 'Send 1 text message'
@pytest.mark.parametrize('user, endpoint, template_mock, expected_recipient', [
@pytest.mark.parametrize('user, endpoint, template_type, content_has_placeholders, expected_recipient', [
(
create_active_user_with_permissions(),
'main.send_test_step',
mock_get_service_template_with_placeholders,
'sms',
True,
'07700 900762'
),
(
create_active_user_with_permissions(),
'main.send_test_step',
mock_get_service_email_template,
'email',
False,
'test@user.gov.uk'
),
(
create_active_caseworking_user(),
'main.send_test_step',
mock_get_service_email_template,
'email',
False,
'caseworker@example.gov.uk'
),
(
create_active_user_with_permissions(),
'main.send_test_step',
mock_get_service_letter_template,
'letter',
False,
None
),
(
create_active_user_with_permissions(),
'main.send_one_off_step',
mock_get_service_template,
'sms',
False,
None
),
(
create_active_user_with_permissions(),
'main.send_one_off_step',
mock_get_service_email_template,
'email',
False,
None
),
(
create_active_user_with_permissions(),
'main.send_one_off_step',
mock_get_service_letter_template,
'letter',
False,
None
),
])
@@ -1040,13 +1064,18 @@ def test_send_test_step_redirects_if_session_not_setup(
mock_get_users_by_service,
mock_has_no_jobs,
fake_uuid,
endpoint,
template_mock,
expected_recipient,
user,
endpoint,
template_type,
content_has_placeholders,
expected_recipient,
):
mocker.patch('app.user_api_client.get_user', return_value=user)
template_mock(mocker)
template_content = 'Hi ((name))' if content_has_placeholders else 'Hi there'
template_data = create_template(template_type=template_type, content=template_content)
mocker.patch('app.service_api_client.get_service_template', return_value={'data': template_data})
mocker.patch('app.main.views.send.get_page_count_for_letter', return_value=9)
with client_request.session_transaction() as session:
@@ -1094,51 +1123,51 @@ def test_send_one_off_does_not_send_without_the_correct_permissions(
create_active_user_with_permissions(),
create_active_caseworking_user(),
))
@pytest.mark.parametrize('template_mock, partial_url, expected_h1, tour_shown', [
@pytest.mark.parametrize('template_type, partial_url, expected_h1, tour_shown', [
(
mock_get_service_template_with_placeholders,
'sms',
partial(url_for, 'main.send_test'),
'Personalise this message',
False,
),
(
mock_get_service_template_with_placeholders,
'sms',
partial(url_for, 'main.send_one_off'),
'Send Two week reminder',
False,
),
(
mock_get_service_template_with_placeholders,
'sms',
partial(url_for, 'main.send_test', help=1),
'Example text message',
True,
),
(
mock_get_service_email_template,
'email',
partial(url_for, 'main.send_test', help=1),
'Example text message',
True,
),
(
mock_get_service_email_template,
'email',
partial(url_for, 'main.send_test'),
'Personalise this message',
False,
),
(
mock_get_service_email_template,
'email',
partial(url_for, 'main.send_one_off'),
'Send Two week reminder',
False,
),
(
mock_get_service_letter_template,
'letter',
partial(url_for, 'main.send_test'),
'Send Two week reminder',
False,
),
(
mock_get_service_letter_template,
'letter',
partial(url_for, 'main.send_one_off'),
'Send Two week reminder',
False,
@@ -1150,14 +1179,15 @@ def test_send_one_off_or_test_has_correct_page_titles(
mock_has_no_jobs,
fake_uuid,
mocker,
template_mock,
template_type,
partial_url,
expected_h1,
tour_shown,
user,
):
mocker.patch('app.user_api_client.get_user', return_value=user)
template_mock(mocker)
template_data = create_template(template_type=template_type, name='Two week reminder', content='Hi there ((name))')
mocker.patch('app.service_api_client.get_service_template', return_value={'data': template_data})
mocker.patch('app.main.views.send.get_page_count_for_letter', return_value=9)
response = logged_in_client.get(
@@ -1229,27 +1259,27 @@ def test_send_one_off_or_test_shows_placeholders_in_correct_order(
assert normalize_spaces(page.select_one('label').text) == expected_field_label
@pytest.mark.parametrize('user, template_mock, expected_link_text, expected_link_url', [
@pytest.mark.parametrize('user, template_type, expected_link_text, expected_link_url', [
(
create_active_user_with_permissions(),
mock_get_service_template,
'sms',
'Use my phone number',
partial(url_for, 'main.send_test')
),
(
create_active_user_with_permissions(),
mock_get_service_email_template,
'email',
'Use my email address',
partial(url_for, 'main.send_test')
),
(
create_active_user_with_permissions(),
mock_get_service_letter_template,
'letter',
None, None
),
(
create_active_caseworking_user(),
mock_get_service_template,
'sms',
None, None
),
])
@@ -1260,13 +1290,14 @@ def test_send_one_off_has_skip_link(
mock_get_service_email_template,
mock_has_no_jobs,
mocker,
template_mock,
template_type,
expected_link_text,
expected_link_url,
user,
):
mocker.patch('app.user_api_client.get_user', return_value=user)
template_mock(mocker)
template_data = create_template(template_id=fake_uuid, template_type=template_type)
mocker.patch('app.service_api_client.get_service_template', return_value={'data': template_data})
mocker.patch('app.main.views.send.get_page_count_for_letter', return_value=9)
page = client_request.get(
@@ -1289,20 +1320,21 @@ def test_send_one_off_has_skip_link(
assert not skip_links
@pytest.mark.parametrize('template_mock, expected_sticky', [
(mock_get_service_template, False),
(mock_get_service_email_template, True),
(mock_get_service_letter_template, True),
@pytest.mark.parametrize('template_type, expected_sticky', [
('sms', False),
('email', True),
('letter', True),
])
def test_send_one_off_has_sticky_header_for_email_and_letter(
mocker,
client_request,
fake_uuid,
mock_has_no_jobs,
template_mock,
template_type,
expected_sticky,
):
template_mock(mocker)
template_data = create_template(template_type=template_type)
mocker.patch('app.service_api_client.get_service_template', return_value={'data': template_data})
mocker.patch('app.main.views.send.get_page_count_for_letter', return_value=9)
page = client_request.get(
@@ -2534,25 +2566,29 @@ def test_route_permissions_sending(
@pytest.mark.parametrize(
'template_mock, extra_args, expected_url',
'template_type, has_placeholders, extra_args, expected_url',
[
(
mock_get_service_template,
'sms',
False,
dict(),
partial(url_for, '.send_messages')
),
(
mock_get_service_template_with_placeholders,
'sms',
True,
dict(),
partial(url_for, '.send_messages')
),
(
mock_get_service_letter_template, # No placeholders
'letter',
False,
dict(from_test=True),
partial(url_for, '.send_test')
),
(
mock_get_service_template_with_placeholders,
'sms',
True,
dict(from_test=True),
partial(url_for, '.send_test')
)
@@ -2570,12 +2606,14 @@ def test_check_messages_back_link(
mock_s3_set_metadata,
fake_uuid,
mocker,
template_mock,
template_type,
has_placeholders,
extra_args,
expected_url
):
template_mock(mocker)
content = 'Hi there ((name))' if has_placeholders else 'Hi there'
template_data = create_template(template_id=fake_uuid, template_type=template_type, content=content)
mocker.patch('app.service_api_client.get_service_template', return_value={'data': template_data})
mocker.patch(
'app.main.views.send.get_page_count_for_letter',

View File

@@ -29,9 +29,7 @@ from tests.conftest import (
create_active_caseworking_user,
create_active_user_view_permissions,
create_letter_contact_block,
mock_get_service_email_template,
mock_get_service_letter_template,
mock_get_service_template,
create_template,
normalize_spaces,
)
@@ -495,7 +493,11 @@ def test_view_letter_template_displays_postage(
):
mocker.patch('app.main.views.templates.get_page_count_for_letter', return_value=1)
client_request.login(active_user_with_permissions)
mock_get_service_letter_template(mocker, postage=template_postage)
mocker.patch(
'app.service_api_client.get_service_template',
return_value={'data': create_template(template_type='letter', postage=template_postage)}
)
page = client_request.get(
'main.view_template',
service_id=SERVICE_ONE_ID,
@@ -534,7 +536,11 @@ def test_view_letter_template_does_not_display_send_button_if_template_over_10_p
):
mocker.patch('app.main.views.templates.get_page_count_for_letter', return_value=11)
client_request.login(active_user_with_permissions)
mock_get_service_letter_template(mocker, postage="second")
mocker.patch(
'app.service_api_client.get_service_template',
return_value={'data': create_template(template_type='letter', postage='second')}
)
page = client_request.get(
'main.view_template',
service_id=SERVICE_ONE_ID,
@@ -1300,10 +1306,10 @@ def test_should_not_allow_creation_of_a_template_without_correct_permission(
)
@pytest.mark.parametrize('fixture, expected_status_code', [
(mock_get_service_email_template, 200),
(mock_get_service_template, 200),
(mock_get_service_letter_template, 302),
@pytest.mark.parametrize('template_type, expected_status_code', [
('email', 200),
('sms', 200),
('letter', 302),
])
def test_should_redirect_to_one_off_if_template_type_is_letter(
client_request,
@@ -1311,10 +1317,13 @@ def test_should_redirect_to_one_off_if_template_type_is_letter(
multiple_sms_senders,
fake_uuid,
mocker,
fixture,
template_type,
expected_status_code
):
fixture(mocker)
mocker.patch(
'app.service_api_client.get_service_template',
return_value={'data': create_template(template_type=template_type)}
)
client_request.get(
'.set_sender',
service_id=SERVICE_ONE_ID,
@@ -1506,11 +1515,14 @@ def test_should_show_interstitial_when_making_breaking_change(
old_content,
expected_paragraphs,
):
mock_get_service_email_template(
mocker,
email_template = create_template(
template_id=fake_uuid,
template_type='email',
subject="Your ((thing)) is due soon",
content=old_content,
content=old_content
)
mocker.patch('app.service_api_client.get_service_template', return_value={'data': email_template})
data = {
'id': fake_uuid,
'name': "new name",
@@ -2048,18 +2060,17 @@ def test_should_show_template_as_first_page_of_tour(
)
@pytest.mark.parametrize('template_mock', [
mock_get_service_email_template,
mock_get_service_letter_template,
])
@pytest.mark.parametrize('template_type', ['email', 'letter'])
def test_cant_see_email_template_in_tour(
client_request,
fake_uuid,
mocker,
template_mock,
template_type,
):
template_mock(mocker)
mocker.patch(
'app.service_api_client.get_service_template',
return_value={'data': create_template(template_type=template_type)}
)
client_request.get(
'main.start_tour',
@@ -2124,8 +2135,8 @@ def test_should_show_hint_once_template_redacted(
mock_get_template_folders,
fake_uuid,
):
mock_get_service_email_template(mocker, redact_personalisation=True)
template = create_template(template_type='email', content='hi ((name))', redact_personalisation=True)
mocker.patch('app.service_api_client.get_service_template', return_value={'data': template})
page = client_request.get(
'main.view_template',

View File

@@ -866,11 +866,20 @@ def mock_get_service_email_template(mocker, content=None, subject=None, redact_p
@pytest.fixture(scope='function')
def mock_get_service_email_template_without_placeholders(mocker):
return mock_get_service_email_template(
mocker,
content="Your vehicle tax expires soon",
subject="Your thing is due soon",
)
def _get(service_id, template_id, version=None):
template = template_json(
service_id,
template_id,
"Two week reminder",
"email",
"Your vehicle tax expires soon",
"Your thing is due soon",
redact_personalisation=False,
)
return {'data': template}
return mocker.patch(
'app.service_api_client.get_service_template', side_effect=_get)
@pytest.fixture(scope='function')
@@ -3966,3 +3975,25 @@ def create_notifications(
created_by_name='Firstname Lastname',
postage=postage
)
def create_template(
service_id=SERVICE_ONE_ID,
template_id=None,
template_type='sms',
name='sample template',
content='Template content',
subject='Template subject',
redact_personalisation=False,
postage=None
):
return template_json(
service_id=service_id,
id_=template_id or str(generate_uuid()),
name=name,
type_=template_type,
content=content,
subject=subject,
redact_personalisation=redact_personalisation,
postage=postage,
)