mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-02-28 22:30:44 -05:00
We hardcode this as second class for the moment but eventually will let the user pick. Currently the API appears to do no validation, e.g. a json schema, that rejects API calls with the extra key for postage. Next steps will be to put a PR into the API that will expect a postage value in the request and save it with the rest of the notification. Then when that is done we can add the user interface to the admin app to let the user pick the postage.
130 lines
4.8 KiB
Python
130 lines
4.8 KiB
Python
import uuid
|
|
|
|
import pytest
|
|
|
|
from app.notify_client.notification_api_client import NotificationApiClient
|
|
from tests import notification_json, single_notification_json
|
|
|
|
|
|
@pytest.mark.parametrize("arguments,expected_call", [
|
|
(
|
|
{},
|
|
{'url': '/service/abcd1234/notifications', 'params': {}}
|
|
),
|
|
(
|
|
{'page': 99},
|
|
{'url': '/service/abcd1234/notifications', 'params': {'page': 99}}
|
|
),
|
|
(
|
|
{'include_jobs': False},
|
|
{'url': '/service/abcd1234/notifications', 'params': {'include_jobs': False}}
|
|
),
|
|
(
|
|
{'include_from_test_key': True},
|
|
{'url': '/service/abcd1234/notifications', 'params': {'include_from_test_key': True}}
|
|
),
|
|
(
|
|
{'job_id': 'efgh5678'},
|
|
{'url': '/service/abcd1234/job/efgh5678/notifications', 'params': {}}
|
|
),
|
|
(
|
|
{'job_id': 'efgh5678', 'page': 48},
|
|
{'url': '/service/abcd1234/job/efgh5678/notifications', 'params': {'page': 48}}
|
|
)
|
|
])
|
|
def test_client_gets_notifications_for_service_and_job_by_page(mocker, arguments, expected_call):
|
|
|
|
mock_get = mocker.patch('app.notify_client.notification_api_client.NotificationApiClient.get')
|
|
NotificationApiClient().get_notifications_for_service('abcd1234', **arguments)
|
|
mock_get.assert_called_once_with(**expected_call)
|
|
|
|
|
|
def test_send_notification(mocker, logged_in_client, active_user_with_permissions):
|
|
mock_post = mocker.patch('app.notify_client.notification_api_client.NotificationApiClient.post')
|
|
NotificationApiClient().send_notification(
|
|
'foo',
|
|
template_id='bar',
|
|
recipient='07700900001',
|
|
personalisation=None,
|
|
sender_id=None
|
|
)
|
|
mock_post.assert_called_once_with(
|
|
url='/service/foo/send-notification',
|
|
data={
|
|
'template_id': 'bar',
|
|
'to': '07700900001',
|
|
'personalisation': None,
|
|
'created_by': active_user_with_permissions['id']
|
|
}
|
|
)
|
|
|
|
|
|
def test_send_precompiled_letter(mocker, logged_in_client, active_user_with_permissions):
|
|
mock_post = mocker.patch('app.notify_client.notification_api_client.NotificationApiClient.post')
|
|
NotificationApiClient().send_precompiled_letter(
|
|
'abcd-1234',
|
|
'my_file.pdf',
|
|
'file-ID'
|
|
)
|
|
mock_post.assert_called_once_with(
|
|
url='/service/abcd-1234/send-pdf-letter',
|
|
data={
|
|
'filename': 'my_file.pdf',
|
|
'file_id': 'file-ID',
|
|
'created_by': active_user_with_permissions['id'],
|
|
'postage': 'second',
|
|
}
|
|
)
|
|
|
|
|
|
def test_get_notification(mocker):
|
|
mock_get = mocker.patch('app.notify_client.notification_api_client.NotificationApiClient.get')
|
|
NotificationApiClient().get_notification('foo', 'bar')
|
|
mock_get.assert_called_once_with(
|
|
url='/service/foo/notifications/bar'
|
|
)
|
|
|
|
|
|
@pytest.mark.parametrize("letter_status, expected_status", [
|
|
('created', 'accepted'),
|
|
('sending', 'accepted'),
|
|
('delivered', 'received'),
|
|
('returned-letter', 'received'),
|
|
("technical-failure", "technical-failure")
|
|
])
|
|
def test_get_api_notifications_changes_letter_statuses(mocker, letter_status, expected_status):
|
|
service_id = str(uuid.uuid4())
|
|
sms_notification = single_notification_json(service_id, notification_type='sms', status='created')
|
|
email_notification = single_notification_json(service_id, notification_type='email', status='created')
|
|
letter_notification = single_notification_json(service_id, notification_type='letter', status=letter_status)
|
|
notis = notification_json(service_id=service_id, rows=0)
|
|
notis['notifications'] = [sms_notification, email_notification, letter_notification]
|
|
|
|
mocker.patch('app.notify_client.notification_api_client.NotificationApiClient.get', return_value=notis)
|
|
|
|
ret = NotificationApiClient().get_api_notifications_for_service(service_id)
|
|
|
|
assert ret['notifications'][0]['notification_type'] == 'sms'
|
|
assert ret['notifications'][1]['notification_type'] == 'email'
|
|
assert ret['notifications'][2]['notification_type'] == 'letter'
|
|
assert ret['notifications'][0]['status'] == 'created'
|
|
assert ret['notifications'][1]['status'] == 'created'
|
|
assert ret['notifications'][2]['status'] == expected_status
|
|
|
|
|
|
def test_update_notification_to_cancelled(mocker):
|
|
mock_post = mocker.patch('app.notify_client.notification_api_client.NotificationApiClient.post')
|
|
NotificationApiClient().update_notification_to_cancelled('foo', 'bar')
|
|
mock_post.assert_called_once_with(
|
|
url='/service/foo/notifications/bar/cancel',
|
|
data={},
|
|
)
|
|
|
|
|
|
def test_get_notification_count_for_job_id(mocker):
|
|
mock_get = mocker.patch('app.notify_client.notification_api_client.NotificationApiClient.get')
|
|
NotificationApiClient().get_notification_count_for_job_id(service_id='foo', job_id='bar')
|
|
mock_get.assert_called_once_with(
|
|
url='/service/foo/job/bar/notification_count',
|
|
)
|