mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-09-06 15:38:25 -04:00
Merge pull request #3680 from alphagov/show-broadcast-content
Show preview of content for broadcast messages and templates
This commit is contained in:
@@ -409,7 +409,7 @@ def valid_phone_number(phone_number):
|
|||||||
def format_notification_type(notification_type):
|
def format_notification_type(notification_type):
|
||||||
return {
|
return {
|
||||||
'email': 'Email',
|
'email': 'Email',
|
||||||
'sms': 'SMS',
|
'sms': 'Text message',
|
||||||
'letter': 'Letter'
|
'letter': 'Letter'
|
||||||
}[notification_type]
|
}[notification_type]
|
||||||
|
|
||||||
|
|||||||
@@ -76,12 +76,6 @@ class BroadcastMessage(JSONModel):
|
|||||||
for parent in area.parents:
|
for parent in area.parents:
|
||||||
yield parent
|
yield parent
|
||||||
|
|
||||||
@property
|
|
||||||
def initial_area_names(self):
|
|
||||||
return [
|
|
||||||
area.name for area in self.areas
|
|
||||||
][:10]
|
|
||||||
|
|
||||||
@cached_property
|
@cached_property
|
||||||
def polygons(self):
|
def polygons(self):
|
||||||
return Polygons(
|
return Polygons(
|
||||||
|
|||||||
@@ -1,3 +1,6 @@
|
|||||||
|
from app import format_notification_type
|
||||||
|
|
||||||
|
|
||||||
class TemplateList():
|
class TemplateList():
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
@@ -128,12 +131,17 @@ class TemplateListTemplate(TemplateListItem):
|
|||||||
):
|
):
|
||||||
super().__init__(template, ancestors)
|
super().__init__(template, ancestors)
|
||||||
self.service_id = service_id
|
self.service_id = service_id
|
||||||
self.hint = {
|
self.template_type = template['template_type']
|
||||||
'email': 'Email template',
|
self.content = template.get('content')
|
||||||
'sms': 'Text message template',
|
|
||||||
'letter': 'Letter template',
|
@property
|
||||||
'broadcast': 'Broadcast template',
|
def hint(self):
|
||||||
}.get(template['template_type'])
|
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):
|
class TemplateListFolder(TemplateListItem):
|
||||||
|
|||||||
@@ -15,9 +15,14 @@
|
|||||||
{% call row_heading() %}
|
{% call row_heading() %}
|
||||||
<div class="file-list">
|
<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>
|
<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">
|
<span class="file-list-hint-large govuk-!-margin-bottom-1">
|
||||||
To {{ item.initial_area_names|formatted_list(before_each='', after_each='') }}
|
{{ item.content }}
|
||||||
</span>
|
</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>
|
</div>
|
||||||
{% endcall %}
|
{% endcall %}
|
||||||
{% call field(align='right') %}
|
{% call field(align='right') %}
|
||||||
|
|||||||
@@ -302,7 +302,7 @@ def test_broadcast_dashboard(
|
|||||||
assert [
|
assert [
|
||||||
normalize_spaces(row.text) for row in page.select('table')[0].select('tbody tr')
|
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) == (
|
assert normalize_spaces(page.select('main h2')[1].text) == (
|
||||||
@@ -311,7 +311,7 @@ def test_broadcast_dashboard(
|
|||||||
assert [
|
assert [
|
||||||
normalize_spaces(row.text) for row in page.select('table')[1].select('tbody tr')
|
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 [
|
assert [
|
||||||
normalize_spaces(row.text) for row in page.select('table')[0].select('tbody tr')
|
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 This is a test England 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 Finished yesterday at 8:20pm',
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -199,6 +199,75 @@ def test_should_show_page_for_choosing_a_template(
|
|||||||
mock_get_template_folders.assert_called_once_with(SERVICE_ONE_ID)
|
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(
|
def test_choose_template_can_pass_through_an_initial_state_to_templates_and_folders_selection_form(
|
||||||
client_request,
|
client_request,
|
||||||
mock_get_template_folders,
|
mock_get_template_folders,
|
||||||
|
|||||||
Reference in New Issue
Block a user