From b1e809e82a3eee7234974775d387dd532608f160 Mon Sep 17 00:00:00 2001 From: Leo Hemsted Date: Wed, 27 Sep 2017 17:38:42 +0100 Subject: [PATCH] make sure inbound sms page doesn't break if you receive a blank inbound message --- app/main/views/conversation.py | 5 ++- tests/app/main/views/test_conversation.py | 42 ++++++++++++++++++----- 2 files changed, 38 insertions(+), 9 deletions(-) diff --git a/app/main/views/conversation.py b/app/main/views/conversation.py index 9d21e873a..347370c71 100644 --- a/app/main/views/conversation.py +++ b/app/main/views/conversation.py @@ -73,7 +73,10 @@ def get_sms_thread(service_id, user_number): 'inbound': is_inbound, 'content': SMSPreviewTemplate( { - 'content': notification.get('content') or notification['template']['content'] + 'content': ( + notification['content'] if is_inbound else + notification['template']['content'] + ) }, notification.get('personalisation'), downgrade_non_gsm_characters=(not is_inbound), diff --git a/tests/app/main/views/test_conversation.py b/tests/app/main/views/test_conversation.py index 7d8333d39..b8c85dad8 100644 --- a/tests/app/main/views/test_conversation.py +++ b/tests/app/main/views/test_conversation.py @@ -1,19 +1,19 @@ +from datetime import datetime import json import pytest -from bs4 import BeautifulSoup +from bs4 import BeautifulSoup from flask import ( url_for, ) from notifications_python_client.errors import HTTPError +from freezegun import freeze_time + from tests.conftest import ( SERVICE_ONE_ID, normalize_spaces, mock_get_notifications, - mock_get_inbound_sms, ) -from freezegun import freeze_time -from unittest import mock from app.main.views.conversation import get_user_number @@ -78,6 +78,7 @@ def test_view_conversation( fake_uuid, outbound_redacted, expected_outbound_content, + mock_get_inbound_sms ): mock_get_notifications( @@ -88,10 +89,6 @@ def test_view_conversation( redact_personalisation=outbound_redacted, ) - mock_get_inbound_sms( - mocker - ) - page = client_request.get( 'main.conversation', service_id=SERVICE_ONE_ID, @@ -186,3 +183,32 @@ def test_view_conversation_updates( assert json.loads(response.get_data(as_text=True)) == {'messages': 'foo'} mock_get_partials.assert_called_once_with(SERVICE_ONE_ID, '07123 456789') + + +@freeze_time("2012-01-01 00:00:00") +def test_view_conversation_with_empty_inbound( + client_request, + mocker, + api_user_active, + mock_get_notification, + mock_get_notifications_with_no_notifications, + fake_uuid +): + mock_get_inbound_sms = mocker.patch( + 'app.main.views.conversation.service_api_client.get_inbound_sms', + return_value=[{ + 'user_number': '07900000001', + 'content': '', + 'created_at': datetime.utcnow().isoformat(), + 'id': fake_uuid + }] + ) + + page = client_request.get( + 'main.conversation', + service_id=SERVICE_ONE_ID, + notification_id=fake_uuid, + ) + + messages = page.select('.sms-message-wrapper') + assert len(messages) == 1