Normalise content for non-templated broadcast events

We found that non-templated broadcast messages weren’t having their
content normalised before saving into an event.

This means that stuff like `\r\n` and curly quotes were being passed
through to the CBC proxy.

This commit firstly changes templated events to use
`str(BroadcastMessageTemplate)` to normalise the content, because it’s
non-obvious that calling
`BroadcastMessageTemplate.content_with_placeholders_filled_in` also
normalises content.

Then it changes the non-templated route to also call
`str(BroadcastMessageTemplate)`, where previously it was passing the
content straight through.
This commit is contained in:
Chris Hill-Scott
2021-05-10 15:21:28 +01:00
parent 96cb30d640
commit 0a3be6a662
2 changed files with 14 additions and 7 deletions

View File

@@ -111,13 +111,12 @@ def create_broadcast_message(service_id):
template = dao_get_template_by_id_and_service_id(
template_id, data['service_id']
)
content = template._as_utils_template_with_personalisation(
content = str(template._as_utils_template_with_personalisation(
personalisation
).content_with_placeholders_filled_in
))
reference = None
else:
template, content, reference = None, data['content'], data['reference']
temporary_template = BroadcastMessageTemplate.from_content(content)
temporary_template = BroadcastMessageTemplate.from_content(data['content'])
if temporary_template.content_too_long:
raise InvalidRequest(
(
@@ -130,6 +129,9 @@ def create_broadcast_message(service_id):
),
status_code=400,
)
template = None
content = str(temporary_template)
reference = data['reference']
broadcast_message = BroadcastMessage(
service_id=service.id,

View File

@@ -130,7 +130,11 @@ def test_get_broadcast_messages_for_service(admin_request, sample_broadcast_serv
@pytest.mark.parametrize('training_mode_service', [True, False])
def test_create_broadcast_message(admin_request, sample_broadcast_service, training_mode_service):
sample_broadcast_service.restricted = training_mode_service
t = create_template(sample_broadcast_service, BROADCAST_TYPE)
t = create_template(
sample_broadcast_service,
BROADCAST_TYPE,
content='Some content\r\n€ŷŵ~\r\n‘’“”—–-',
)
response = admin_request.post(
'broadcast_message.create_broadcast_message',
@@ -149,6 +153,7 @@ def test_create_broadcast_message(admin_request, sample_broadcast_service, train
assert response['created_by_id'] == str(t.created_by_id)
assert response['personalisation'] == {}
assert response['areas'] == []
assert response['content'] == 'Some content\n€ŷŵ~\n\'\'""---'
broadcast_message = dao_get_broadcast_message_by_id_and_service_id(response["id"], sample_broadcast_service.id)
assert broadcast_message.stubbed == training_mode_service
@@ -231,7 +236,7 @@ def test_create_broadcast_message_can_be_created_from_content(admin_request, sam
response = admin_request.post(
'broadcast_message.create_broadcast_message',
_data={
'content': 'Some tailor made broadcast content',
'content': 'Some content\r\n€ŷŵ~\r\n‘’“”—–-',
'reference': 'abc123',
'service_id': str(sample_broadcast_service.id),
'created_by': str(sample_broadcast_service.created_by_id),
@@ -239,7 +244,7 @@ def test_create_broadcast_message_can_be_created_from_content(admin_request, sam
service_id=sample_broadcast_service.id,
_expected_status=201
)
assert response['content'] == 'Some tailor made broadcast content'
assert response['content'] == 'Some content\n€ŷŵ~\n\'\'""---'
assert response['reference'] == 'abc123'
assert response['template_id'] is None