Merge pull request #3680 from alphagov/show-broadcast-content

Show preview of content for broadcast messages and templates
This commit is contained in:
Chris Hill-Scott
2020-10-19 14:22:41 +01:00
committed by GitHub
6 changed files with 95 additions and 19 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

@@ -76,12 +76,6 @@ class BroadcastMessage(JSONModel):
for parent in area.parents:
yield parent
@property
def initial_area_names(self):
return [
area.name for area in self.areas
][:10]
@cached_property
def polygons(self):
return Polygons(

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

@@ -15,9 +15,14 @@
{% call row_heading() %}
<div class="file-list">
<a class="file-list-filename-large govuk-link govuk-link--no-visited-state" href="{{ url_for('.view_broadcast_message', service_id=current_service.id, broadcast_message_id=item.id) }}">{{ item.template_name }}</a>
<span class="file-list-hint-large">
To {{ item.initial_area_names|formatted_list(before_each='', after_each='') }}
<span class="file-list-hint-large govuk-!-margin-bottom-1">
{{ item.content }}
</span>
<ul class="area-list">
{% for area in item.areas %}
<li class="area-list-item area-list-item--unremoveable">{{ area.name }}</li>
{% endfor %}
</ul>
</div>
{% endcall %}
{% call field(align='right') %}

View File

@@ -302,7 +302,7 @@ def test_broadcast_dashboard(
assert [
normalize_spaces(row.text) for row in page.select('table')[0].select('tbody tr')
] == [
'Example template To England and Scotland Live until tomorrow at 2:20am',
'Example template This is a test England Scotland Live until tomorrow at 2:20am',
]
assert normalize_spaces(page.select('main h2')[1].text) == (
@@ -311,7 +311,7 @@ def test_broadcast_dashboard(
assert [
normalize_spaces(row.text) for row in page.select('table')[1].select('tbody tr')
] == [
'Example template To England and Scotland Prepared by Test User',
'Example template This is a test England Scotland Prepared by Test User',
]
@@ -361,8 +361,8 @@ def test_previous_broadcasts_page(
assert [
normalize_spaces(row.text) for row in page.select('table')[0].select('tbody tr')
] == [
'Example template To England and Scotland Stopped 10 February at 2:20am',
'Example template To England and Scotland Finished yesterday at 8:20pm',
'Example template This is a test England Scotland Stopped 10 February at 2:20am',
'Example template This is a test England Scotland Finished yesterday at 8:20pm',
]

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,