2019-03-27 17:44:53 +00:00
|
|
|
from datetime import datetime, timedelta
|
2017-05-31 14:49:14 +01:00
|
|
|
|
2017-06-02 12:57:28 +01:00
|
|
|
import pytest
|
2017-05-31 14:49:14 +01:00
|
|
|
from freezegun import freeze_time
|
|
|
|
|
|
2017-11-29 14:30:02 +00:00
|
|
|
from tests.app.db import (
|
2021-03-10 13:55:06 +00:00
|
|
|
create_inbound_sms,
|
|
|
|
|
create_service,
|
|
|
|
|
create_service_data_retention,
|
|
|
|
|
create_service_with_inbound_number,
|
2017-11-29 14:30:02 +00:00
|
|
|
)
|
2017-05-31 14:49:14 +01:00
|
|
|
|
|
|
|
|
|
2017-11-23 16:46:39 +00:00
|
|
|
def test_post_to_get_inbound_sms_with_no_params(admin_request, sample_service):
|
2017-06-09 10:34:02 +01:00
|
|
|
one = create_inbound_sms(sample_service)
|
|
|
|
|
two = create_inbound_sms(sample_service)
|
|
|
|
|
|
2017-11-23 16:46:39 +00:00
|
|
|
sms = admin_request.post(
|
2019-03-29 15:18:25 +00:00
|
|
|
'inbound_sms.post_inbound_sms_for_service',
|
2017-11-23 16:46:39 +00:00
|
|
|
service_id=sample_service.id,
|
|
|
|
|
_data={}
|
|
|
|
|
)['data']
|
2017-06-09 10:34:02 +01:00
|
|
|
|
|
|
|
|
assert len(sms) == 2
|
|
|
|
|
assert {inbound['id'] for inbound in sms} == {str(one.id), str(two.id)}
|
|
|
|
|
assert sms[0]['content'] == 'Hello'
|
|
|
|
|
assert set(sms[0].keys()) == {
|
|
|
|
|
'id',
|
|
|
|
|
'created_at',
|
|
|
|
|
'service_id',
|
|
|
|
|
'notify_number',
|
|
|
|
|
'user_number',
|
2017-11-09 15:24:08 +00:00
|
|
|
'content'
|
2017-06-09 10:34:02 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@pytest.mark.parametrize('user_number', [
|
|
|
|
|
'(07700) 900-001',
|
|
|
|
|
'+4407700900001',
|
|
|
|
|
'447700900001',
|
|
|
|
|
])
|
2022-10-03 20:07:42 -07:00
|
|
|
@pytest.mark.skip(reason="Needs updating for TTS. Don't need to test UK numbers right now")
|
2017-11-23 16:46:39 +00:00
|
|
|
def test_post_to_get_inbound_sms_filters_user_number(admin_request, sample_service, user_number):
|
2017-06-09 10:34:02 +01:00
|
|
|
# user_number in the db is international and normalised
|
|
|
|
|
one = create_inbound_sms(sample_service, user_number='447700900001')
|
2017-11-28 17:21:21 +00:00
|
|
|
create_inbound_sms(sample_service, user_number='447700900002')
|
2017-06-09 10:34:02 +01:00
|
|
|
|
|
|
|
|
data = {
|
|
|
|
|
'phone_number': user_number
|
|
|
|
|
}
|
|
|
|
|
|
2017-11-23 16:46:39 +00:00
|
|
|
sms = admin_request.post(
|
2019-03-29 15:18:25 +00:00
|
|
|
'inbound_sms.post_inbound_sms_for_service',
|
2017-11-23 16:46:39 +00:00
|
|
|
service_id=sample_service.id,
|
|
|
|
|
_data=data
|
|
|
|
|
)['data']
|
2017-06-09 10:34:02 +01:00
|
|
|
|
|
|
|
|
assert len(sms) == 1
|
|
|
|
|
assert sms[0]['id'] == str(one.id)
|
|
|
|
|
assert sms[0]['user_number'] == str(one.user_number)
|
|
|
|
|
|
|
|
|
|
|
2017-11-23 16:46:39 +00:00
|
|
|
def test_post_to_get_inbound_sms_filters_international_user_number(admin_request, sample_service):
|
2017-06-09 10:34:02 +01:00
|
|
|
# user_number in the db is international and normalised
|
|
|
|
|
one = create_inbound_sms(sample_service, user_number='12025550104')
|
2017-11-28 17:21:21 +00:00
|
|
|
create_inbound_sms(sample_service)
|
2017-06-09 10:34:02 +01:00
|
|
|
|
|
|
|
|
data = {
|
2022-10-03 20:07:42 -07:00
|
|
|
'phone_number': '12025550104'
|
2017-06-09 10:34:02 +01:00
|
|
|
}
|
|
|
|
|
|
2017-11-23 16:46:39 +00:00
|
|
|
sms = admin_request.post(
|
2019-03-29 15:18:25 +00:00
|
|
|
'inbound_sms.post_inbound_sms_for_service',
|
2017-11-23 16:46:39 +00:00
|
|
|
service_id=sample_service.id,
|
|
|
|
|
_data=data
|
|
|
|
|
)['data']
|
2017-06-09 10:34:02 +01:00
|
|
|
|
2022-10-03 20:07:42 -07:00
|
|
|
assert len(sms) == 2
|
|
|
|
|
assert sms[1]['id'] == str(one.id)
|
|
|
|
|
assert sms[1]['user_number'] == str(one.user_number)
|
2017-11-23 16:46:39 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_post_to_get_inbound_sms_allows_badly_formatted_number(admin_request, sample_service):
|
|
|
|
|
one = create_inbound_sms(sample_service, user_number='ALPHANUM3R1C')
|
|
|
|
|
|
|
|
|
|
sms = admin_request.post(
|
2019-03-29 15:18:25 +00:00
|
|
|
'inbound_sms.post_inbound_sms_for_service',
|
2017-11-23 16:46:39 +00:00
|
|
|
service_id=sample_service.id,
|
|
|
|
|
_data={'phone_number': 'ALPHANUM3R1C'}
|
|
|
|
|
)['data']
|
2017-06-09 10:34:02 +01:00
|
|
|
|
|
|
|
|
assert len(sms) == 1
|
|
|
|
|
assert sms[0]['id'] == str(one.id)
|
|
|
|
|
assert sms[0]['user_number'] == str(one.user_number)
|
|
|
|
|
|
|
|
|
|
|
2019-03-28 15:36:12 +00:00
|
|
|
@freeze_time('Monday 10th April 2017 12:00')
|
|
|
|
|
def test_post_to_get_most_recent_inbound_sms_for_service_limits_to_a_week(admin_request, sample_service):
|
2023-05-10 08:39:50 -07:00
|
|
|
create_inbound_sms(sample_service, created_at=datetime(2017, 4, 2, 23, 59))
|
|
|
|
|
returned_inbound = create_inbound_sms(sample_service, created_at=datetime(2017, 4, 3, 0, 30))
|
2019-03-28 15:36:12 +00:00
|
|
|
|
2019-03-29 15:18:25 +00:00
|
|
|
sms = admin_request.post('inbound_sms.post_inbound_sms_for_service', service_id=sample_service.id, _data={})
|
2019-03-28 15:36:12 +00:00
|
|
|
|
|
|
|
|
assert len(sms['data']) == 1
|
|
|
|
|
assert sms['data'][0]['id'] == str(returned_inbound.id)
|
|
|
|
|
|
|
|
|
|
|
2019-03-28 15:55:07 +00:00
|
|
|
@pytest.mark.parametrize('days_of_retention, too_old_date, returned_date', [
|
|
|
|
|
(5, datetime(2017, 4, 4, 22, 59), datetime(2017, 4, 5, 12, 0)),
|
|
|
|
|
(14, datetime(2017, 3, 26, 22, 59), datetime(2017, 3, 27, 12, 0)),
|
|
|
|
|
])
|
2019-03-28 15:36:12 +00:00
|
|
|
@freeze_time('Monday 10th April 2017 12:00')
|
2019-03-28 15:55:07 +00:00
|
|
|
def test_post_to_get_inbound_sms_for_service_respects_data_retention(
|
|
|
|
|
admin_request,
|
|
|
|
|
sample_service,
|
|
|
|
|
days_of_retention,
|
|
|
|
|
too_old_date,
|
|
|
|
|
returned_date
|
|
|
|
|
):
|
2019-06-03 17:27:08 +01:00
|
|
|
create_service_data_retention(sample_service, 'sms', days_of_retention)
|
2019-03-28 15:55:07 +00:00
|
|
|
create_inbound_sms(sample_service, created_at=too_old_date)
|
|
|
|
|
returned_inbound = create_inbound_sms(sample_service, created_at=returned_date)
|
2019-03-28 15:36:12 +00:00
|
|
|
|
2019-03-29 15:18:25 +00:00
|
|
|
sms = admin_request.post('inbound_sms.post_inbound_sms_for_service', service_id=sample_service.id, _data={})
|
2019-03-28 15:36:12 +00:00
|
|
|
|
|
|
|
|
assert len(sms['data']) == 1
|
|
|
|
|
assert sms['data'][0]['id'] == str(returned_inbound.id)
|
|
|
|
|
|
|
|
|
|
|
2017-05-31 14:49:14 +01:00
|
|
|
def test_get_inbound_sms_summary(admin_request, sample_service):
|
|
|
|
|
other_service = create_service(service_name='other_service')
|
|
|
|
|
with freeze_time('2017-01-01'):
|
|
|
|
|
create_inbound_sms(sample_service)
|
|
|
|
|
with freeze_time('2017-01-02'):
|
|
|
|
|
create_inbound_sms(sample_service)
|
|
|
|
|
with freeze_time('2017-01-03'):
|
|
|
|
|
create_inbound_sms(other_service)
|
|
|
|
|
|
2018-04-30 16:58:26 +01:00
|
|
|
summary = admin_request.get(
|
|
|
|
|
'inbound_sms.get_inbound_sms_summary_for_service',
|
|
|
|
|
service_id=sample_service.id
|
|
|
|
|
)
|
2017-05-31 14:49:14 +01:00
|
|
|
|
|
|
|
|
assert summary == {
|
|
|
|
|
'count': 2,
|
|
|
|
|
'most_recent': datetime(2017, 1, 2).isoformat()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_get_inbound_sms_summary_with_no_inbound(admin_request, sample_service):
|
|
|
|
|
summary = admin_request.get(
|
|
|
|
|
'inbound_sms.get_inbound_sms_summary_for_service',
|
2017-06-19 13:49:20 +01:00
|
|
|
service_id=sample_service.id
|
2017-05-31 14:49:14 +01:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
assert summary == {
|
|
|
|
|
'count': 0,
|
|
|
|
|
'most_recent': None
|
|
|
|
|
}
|
2017-06-06 17:12:21 +01:00
|
|
|
|
|
|
|
|
|
2017-11-07 14:26:18 +00:00
|
|
|
def test_get_inbound_sms_by_id_returns_200(admin_request, notify_db_session):
|
|
|
|
|
service = create_service_with_inbound_number(inbound_number='12345')
|
|
|
|
|
inbound = create_inbound_sms(service=service, user_number='447700900001')
|
2017-06-06 17:12:21 +01:00
|
|
|
|
|
|
|
|
response = admin_request.get(
|
|
|
|
|
'inbound_sms.get_inbound_by_id',
|
2017-11-07 14:26:18 +00:00
|
|
|
service_id=service.id,
|
2017-06-19 13:49:20 +01:00
|
|
|
inbound_sms_id=inbound.id,
|
2017-06-06 17:12:21 +01:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
assert response['user_number'] == '447700900001'
|
2017-11-07 14:26:18 +00:00
|
|
|
assert response['service_id'] == str(service.id)
|
2017-06-06 17:12:21 +01:00
|
|
|
|
|
|
|
|
|
2017-06-07 14:23:31 +01:00
|
|
|
def test_get_inbound_sms_by_id_invalid_id_returns_404(admin_request, sample_service):
|
2017-06-06 17:12:21 +01:00
|
|
|
assert admin_request.get(
|
|
|
|
|
'inbound_sms.get_inbound_by_id',
|
2017-06-19 13:49:20 +01:00
|
|
|
service_id=sample_service.id,
|
|
|
|
|
inbound_sms_id='bar',
|
|
|
|
|
_expected_status=404
|
2017-06-07 14:23:31 +01:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_get_inbound_sms_by_id_with_invalid_service_id_returns_404(admin_request, sample_service):
|
|
|
|
|
assert admin_request.get(
|
|
|
|
|
'inbound_sms.get_inbound_by_id',
|
2017-06-19 13:49:20 +01:00
|
|
|
service_id='foo',
|
|
|
|
|
inbound_sms_id='2cfbd6a1-1575-4664-8969-f27be0ea40d9',
|
|
|
|
|
_expected_status=404
|
2017-06-06 17:12:21 +01:00
|
|
|
)
|
2018-04-04 16:59:48 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
@pytest.mark.parametrize('page_given, expected_rows, has_next_link', [
|
|
|
|
|
(True, 10, False),
|
|
|
|
|
(False, 50, True)
|
|
|
|
|
])
|
|
|
|
|
def test_get_most_recent_inbound_sms_for_service(
|
|
|
|
|
admin_request,
|
|
|
|
|
page_given,
|
|
|
|
|
sample_service,
|
|
|
|
|
expected_rows,
|
|
|
|
|
has_next_link
|
|
|
|
|
):
|
|
|
|
|
for i in range(60):
|
|
|
|
|
create_inbound_sms(service=sample_service, user_number='44770090000{}'.format(i))
|
|
|
|
|
|
|
|
|
|
request_args = {'page': 2} if page_given else {}
|
|
|
|
|
response = admin_request.get(
|
|
|
|
|
'inbound_sms.get_most_recent_inbound_sms_for_service',
|
|
|
|
|
service_id=sample_service.id,
|
|
|
|
|
**request_args
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
assert len(response['data']) == expected_rows
|
|
|
|
|
assert response['has_next'] == has_next_link
|
2019-03-27 17:44:53 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
@freeze_time('Monday 10th April 2017 12:00')
|
|
|
|
|
def test_get_most_recent_inbound_sms_for_service_respects_data_retention(
|
|
|
|
|
admin_request,
|
|
|
|
|
sample_service
|
|
|
|
|
):
|
2019-06-03 17:27:08 +01:00
|
|
|
create_service_data_retention(sample_service, 'sms', 5)
|
2019-03-27 17:44:53 +00:00
|
|
|
for i in range(10):
|
|
|
|
|
created = datetime.utcnow() - timedelta(days=i)
|
|
|
|
|
create_inbound_sms(sample_service, user_number='44770090000{}'.format(i), created_at=created)
|
|
|
|
|
|
|
|
|
|
response = admin_request.get('inbound_sms.get_most_recent_inbound_sms_for_service', service_id=sample_service.id)
|
|
|
|
|
|
|
|
|
|
assert len(response['data']) == 6
|
|
|
|
|
assert [x['created_at'] for x in response['data']] == [
|
|
|
|
|
'2017-04-10T12:00:00.000000Z',
|
|
|
|
|
'2017-04-09T12:00:00.000000Z',
|
|
|
|
|
'2017-04-08T12:00:00.000000Z',
|
|
|
|
|
'2017-04-07T12:00:00.000000Z',
|
|
|
|
|
'2017-04-06T12:00:00.000000Z',
|
|
|
|
|
'2017-04-05T12:00:00.000000Z',
|
|
|
|
|
]
|
2019-03-28 14:00:10 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
@freeze_time('Monday 10th April 2017 12:00')
|
|
|
|
|
def test_get_most_recent_inbound_sms_for_service_respects_data_retention_if_older_than_a_week(
|
|
|
|
|
admin_request,
|
|
|
|
|
sample_service
|
|
|
|
|
):
|
2019-06-03 17:27:08 +01:00
|
|
|
create_service_data_retention(sample_service, 'sms', 14)
|
2019-03-28 14:00:10 +00:00
|
|
|
create_inbound_sms(sample_service, created_at=datetime(2017, 4, 1, 12, 0))
|
|
|
|
|
|
|
|
|
|
response = admin_request.get('inbound_sms.get_most_recent_inbound_sms_for_service', service_id=sample_service.id)
|
|
|
|
|
|
|
|
|
|
assert len(response['data']) == 1
|
|
|
|
|
assert response['data'][0]['created_at'] == '2017-04-01T12:00:00.000000Z'
|
2019-03-28 15:36:12 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
@freeze_time('Monday 10th April 2017 12:00')
|
|
|
|
|
def test_get_inbound_sms_for_service_respects_data_retention(
|
|
|
|
|
admin_request,
|
|
|
|
|
sample_service
|
|
|
|
|
):
|
2019-06-03 17:27:08 +01:00
|
|
|
create_service_data_retention(sample_service, 'sms', 5)
|
2019-03-28 15:36:12 +00:00
|
|
|
for i in range(10):
|
|
|
|
|
created = datetime.utcnow() - timedelta(days=i)
|
|
|
|
|
create_inbound_sms(sample_service, user_number='44770090000{}'.format(i), created_at=created)
|
|
|
|
|
|
|
|
|
|
response = admin_request.get('inbound_sms.get_most_recent_inbound_sms_for_service', service_id=sample_service.id)
|
|
|
|
|
|
|
|
|
|
assert len(response['data']) == 6
|
|
|
|
|
assert [x['created_at'] for x in response['data']] == [
|
|
|
|
|
'2017-04-10T12:00:00.000000Z',
|
|
|
|
|
'2017-04-09T12:00:00.000000Z',
|
|
|
|
|
'2017-04-08T12:00:00.000000Z',
|
|
|
|
|
'2017-04-07T12:00:00.000000Z',
|
|
|
|
|
'2017-04-06T12:00:00.000000Z',
|
|
|
|
|
'2017-04-05T12:00:00.000000Z',
|
|
|
|
|
]
|