Add API client for notifications

This commit adds an API client for the notifications endpoints added in:
https://github.com/alphagov/notifications-api/pull/113
This commit is contained in:
Chris Hill-Scott
2016-03-02 13:52:05 +00:00
parent 542f097b6d
commit 2f76ef27ce
2 changed files with 78 additions and 0 deletions

View File

@@ -0,0 +1,37 @@
from notifications_python_client.base import BaseAPIClient
class NotificationApiClient(BaseAPIClient):
def __init__(self, base_url=None, client_id=None, secret=None):
super(self.__class__, self).__init__(base_url=base_url or 'base_url',
client_id=client_id or 'client_id',
secret=secret or 'secret')
def init_app(self, app):
self.base_url = app.config['API_HOST_NAME']
self.client_id = app.config['ADMIN_CLIENT_USER_NAME']
self.secret = app.config['ADMIN_CLIENT_SECRET']
def get_all_notifications(self, page=None):
params = {}
if page is not None:
params['page'] = page
return self.get(
url='/notifications',
params=params
)
def get_notifications_for_service(self, service_id, job_id=None, page=None):
params = {}
if page is not None:
params['page'] = page
if job_id:
return self.get(
url='/service/{}/job/{}/notifications'.format(service_id, job_id),
params=params
)
else:
return self.get(
url='/service/{}/notifications'.format(service_id),
params=params
)

View File

@@ -0,0 +1,41 @@
import pytest
from app.notify_client.notification_api_client import NotificationApiClient
def test_client_gets_notifications(mocker):
mock_get = mocker.patch('app.notify_client.notification_api_client.NotificationApiClient.get')
NotificationApiClient().get_all_notifications()
mock_get.assert_called_once_with(url='/notifications', params={})
def test_client_gets_notifications_with_page(mocker):
mock_get = mocker.patch('app.notify_client.notification_api_client.NotificationApiClient.get')
NotificationApiClient().get_all_notifications(page=99)
mock_get.assert_called_once_with(url='/notifications', params={'page': 99})
@pytest.mark.parametrize("arguments,expected_call", [
(
{},
{'url': '/service/abcd1234/notifications', 'params': {}}
),
(
{'page': 99},
{'url': '/service/abcd1234/notifications', 'params': {'page': 99}}
),
(
{'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)