mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-03-09 04:42:14 -04:00
There’s no need to request the page once for each message on it. Quicker to load the page once and then loop through the messages. Still need this as an integration test because it’s testing the ordering and threading of the message.
154 lines
4.1 KiB
Python
154 lines
4.1 KiB
Python
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
|