Preview content as hint for broadcast templates

Broadcast services only have broadcast templates. But we show the
template type under the name of the template. This is redundant. It
would be better to preview the content of the template instead.

This then makes the templates page consistent with the dashboard.

Depends on:
- [ ] https://github.com/alphagov/notifications-api/pull/2996
This commit is contained in:
Chris Hill-Scott
2020-10-13 17:37:38 +01:00
parent 8dae4f771a
commit 5c9a886edc
3 changed files with 84 additions and 7 deletions

View File

@@ -409,7 +409,7 @@ def valid_phone_number(phone_number):
def format_notification_type(notification_type):
return {
'email': 'Email',
'sms': 'SMS',
'sms': 'Text message',
'letter': 'Letter'
}[notification_type]

View File

@@ -1,3 +1,6 @@
from app import format_notification_type
class TemplateList():
def __init__(
@@ -128,12 +131,17 @@ class TemplateListTemplate(TemplateListItem):
):
super().__init__(template, ancestors)
self.service_id = service_id
self.hint = {
'email': 'Email template',
'sms': 'Text message template',
'letter': 'Letter template',
'broadcast': 'Broadcast template',
}.get(template['template_type'])
self.template_type = template['template_type']
self.content = template.get('content')
@property
def hint(self):
if self.template_type == 'broadcast':
max_length_in_chars = 40
if len(self.content) > (max_length_in_chars + 2):
return self.content[:max_length_in_chars].strip() + ''
return self.content
return format_notification_type(self.template_type) + ' template'
class TemplateListFolder(TemplateListItem):

View File

@@ -199,6 +199,75 @@ def test_should_show_page_for_choosing_a_template(
mock_get_template_folders.assert_called_once_with(SERVICE_ONE_ID)
def test_should_show_page_of_broadcast_templates(
mocker,
client_request,
service_one,
fake_uuid,
mock_get_template_folders,
):
service_one['permissions'] += ['broadcast']
mocker.patch(
'app.service_api_client.get_service_templates',
return_value={'data': [
template_json(
SERVICE_ONE_ID,
fake_uuid,
type_='broadcast',
name='A',
content='a' * 40,
),
template_json(
SERVICE_ONE_ID,
fake_uuid,
type_='broadcast',
name='B',
content='b' * 42,
),
template_json(
SERVICE_ONE_ID,
fake_uuid,
type_='broadcast',
name='C',
content='c' * 43,
),
template_json(
SERVICE_ONE_ID,
fake_uuid,
type_='broadcast',
name='D',
# This should be truncated at 40 chars, then have the
# trailing space stripped
content=('d' * 39) + ' ' + ('d' * 40),
),
]}
)
page = client_request.get(
'main.choose_template',
service_id=SERVICE_ONE_ID,
)
assert [
(
normalize_spaces(template.select_one('.govuk-link').text),
normalize_spaces(template.select_one('.govuk-hint').text),
)
for template in page.select('.template-list-item')
] == [
(
'A', 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
),
(
'B', 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb',
),
(
'C', 'cccccccccccccccccccccccccccccccccccccccc…',
),
(
'D', 'ddddddddddddddddddddddddddddddddddddddd…',
),
]
def test_choose_template_can_pass_through_an_initial_state_to_templates_and_folders_selection_form(
client_request,
mock_get_template_folders,