mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-08-17 21:19:38 -04:00
Merge pull request #1291 from alphagov/two-way
Add page to show two-way conversation
This commit is contained in:
@@ -248,7 +248,9 @@ def notification_json(
|
||||
'template': {
|
||||
'id': template['id'],
|
||||
'name': template['name'],
|
||||
'template_type': template['template_type']},
|
||||
'template_type': template['template_type'],
|
||||
'content': template['content'],
|
||||
},
|
||||
'job': job_payload,
|
||||
'sent_at': sent_at,
|
||||
'status': status,
|
||||
|
||||
153
tests/app/main/views/test_conversation.py
Normal file
153
tests/app/main/views/test_conversation.py
Normal file
@@ -0,0 +1,153 @@
|
||||
import pytest
|
||||
from bs4 import BeautifulSoup
|
||||
|
||||
from flask import (
|
||||
url_for,
|
||||
)
|
||||
from notifications_python_client.errors import HTTPError
|
||||
from tests.conftest import (
|
||||
SERVICE_ONE_ID,
|
||||
)
|
||||
from tests.app.test_utils import normalize_spaces
|
||||
from freezegun import freeze_time
|
||||
from unittest import mock
|
||||
from app.main.views.conversation import get_user_number
|
||||
|
||||
|
||||
@mock.patch(
|
||||
'app.main.views.conversation.service_api_client.get_inbound_sms_by_id',
|
||||
return_value={
|
||||
'user_number': '4407900900123'
|
||||
}
|
||||
)
|
||||
@mock.patch(
|
||||
'app.main.views.conversation.notification_api_client.get_notification',
|
||||
side_effect=HTTPError,
|
||||
)
|
||||
def test_get_user_phone_number_when_only_inbound_exists(
|
||||
mock_get_notification,
|
||||
mock_get_inbound_sms,
|
||||
):
|
||||
assert get_user_number('service', 'notification') == '07900 900123'
|
||||
mock_get_inbound_sms.assert_called_once_with('service', 'notification')
|
||||
assert mock_get_notification.called is False
|
||||
|
||||
|
||||
@mock.patch(
|
||||
'app.main.views.conversation.service_api_client.get_inbound_sms_by_id',
|
||||
side_effect=HTTPError,
|
||||
)
|
||||
@mock.patch(
|
||||
'app.main.views.conversation.notification_api_client.get_notification',
|
||||
return_value={
|
||||
'to': '15550000000'
|
||||
}
|
||||
)
|
||||
def test_get_user_phone_number_when_only_outbound_exists(
|
||||
mock_get_notification,
|
||||
mock_get_inbound_sms,
|
||||
):
|
||||
assert get_user_number('service', 'notification') == '+1 555-000-0000'
|
||||
mock_get_inbound_sms.assert_called_once_with('service', 'notification')
|
||||
mock_get_notification.assert_called_once_with('service', 'notification')
|
||||
|
||||
|
||||
@mock.patch(
|
||||
'app.main.views.conversation.service_api_client.get_inbound_sms_by_id',
|
||||
side_effect=HTTPError,
|
||||
)
|
||||
@mock.patch(
|
||||
'app.main.views.conversation.notification_api_client.get_notification',
|
||||
side_effect=HTTPError,
|
||||
)
|
||||
def test_get_user_phone_number_raises_if_both_API_requests_fail(
|
||||
mock_get_notification,
|
||||
mock_get_inbound_sms,
|
||||
):
|
||||
with pytest.raises(HTTPError):
|
||||
get_user_number('service', 'notification')
|
||||
mock_get_inbound_sms.assert_called_once_with('service', 'notification')
|
||||
mock_get_notification.assert_called_once_with('service', 'notification')
|
||||
|
||||
|
||||
@freeze_time("2012-01-01 00:00:00")
|
||||
def test_view_conversation(
|
||||
logged_in_client,
|
||||
fake_uuid,
|
||||
mock_get_notification,
|
||||
mock_get_inbound_sms,
|
||||
mock_get_notifications,
|
||||
):
|
||||
|
||||
response = logged_in_client.get(url_for(
|
||||
'main.conversation',
|
||||
service_id=SERVICE_ONE_ID,
|
||||
notification_id=fake_uuid,
|
||||
))
|
||||
assert response.status_code == 200
|
||||
page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
|
||||
|
||||
messages = page.select('.sms-message-wrapper')
|
||||
statuses = page.select('.sms-message-status')
|
||||
|
||||
assert len(messages) == 13
|
||||
assert len(statuses) == 13
|
||||
|
||||
for index, expected in enumerate([
|
||||
(
|
||||
'message-8',
|
||||
'Failed (sent yesterday at 2:59pm)',
|
||||
),
|
||||
(
|
||||
'message-7',
|
||||
'Failed (sent yesterday at 2:59pm)',
|
||||
),
|
||||
(
|
||||
'message-6',
|
||||
'Failed (sent yesterday at 4:59pm)',
|
||||
),
|
||||
(
|
||||
'message-5',
|
||||
'Failed (sent yesterday at 6:59pm)',
|
||||
),
|
||||
(
|
||||
'message-4',
|
||||
'Failed (sent yesterday at 8:59pm)',
|
||||
),
|
||||
(
|
||||
'message-3',
|
||||
'Failed (sent yesterday at 10:59pm)',
|
||||
),
|
||||
(
|
||||
'message-2',
|
||||
'Failed (sent yesterday at 10:59pm)',
|
||||
),
|
||||
(
|
||||
'message-1',
|
||||
'Failed (sent yesterday at 11:00pm)',
|
||||
),
|
||||
(
|
||||
'template content',
|
||||
'yesterday at midnight',
|
||||
),
|
||||
(
|
||||
'template content',
|
||||
'yesterday at midnight',
|
||||
),
|
||||
(
|
||||
'template content',
|
||||
'yesterday at midnight',
|
||||
),
|
||||
(
|
||||
'template content',
|
||||
'yesterday at midnight',
|
||||
),
|
||||
(
|
||||
'template content',
|
||||
'yesterday at midnight',
|
||||
),
|
||||
]):
|
||||
assert (
|
||||
normalize_spaces(messages[index].text),
|
||||
normalize_spaces(statuses[index].text),
|
||||
) == expected
|
||||
@@ -1096,6 +1096,22 @@ def mock_get_notifications(mocker, api_user_active):
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture(scope='function')
|
||||
def mock_get_notification(mocker, api_user_active):
|
||||
def _get_notification(
|
||||
service_id,
|
||||
notification_id,
|
||||
):
|
||||
return single_notification_json(
|
||||
service_id,
|
||||
)
|
||||
|
||||
return mocker.patch(
|
||||
'app.notification_api_client.get_notification',
|
||||
side_effect=_get_notification
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture(scope='function')
|
||||
def mock_get_notifications_with_previous_next(mocker):
|
||||
def _get_notifications(service_id,
|
||||
@@ -1138,11 +1154,13 @@ def mock_get_notifications_with_no_notifications(mocker):
|
||||
def mock_get_inbound_sms(mocker):
|
||||
def _get_inbound_sms(
|
||||
service_id,
|
||||
user_number=None,
|
||||
):
|
||||
return [{
|
||||
'user_number': '0790090000' + str(i),
|
||||
'content': 'message-{}'.format(index + 1),
|
||||
'created_at': (datetime.utcnow() - timedelta(minutes=60 * (i + 1))).isoformat()
|
||||
'created_at': (datetime.utcnow() - timedelta(minutes=60 * (i + 1), seconds=index)).isoformat(),
|
||||
'id': sample_uuid(),
|
||||
} for index, i in enumerate([0, 0, 0, 2, 4, 6, 8, 8])]
|
||||
|
||||
return mocker.patch(
|
||||
|
||||
Reference in New Issue
Block a user