From 2f76ef27ce09f555e26c3b0a01bf93c8f3376bf0 Mon Sep 17 00:00:00 2001 From: Chris Hill-Scott Date: Wed, 2 Mar 2016 13:52:05 +0000 Subject: [PATCH] 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 --- app/notify_client/notification_api_client.py | 37 +++++++++++++++++ .../notify_client/test_notification_client.py | 41 +++++++++++++++++++ 2 files changed, 78 insertions(+) create mode 100644 app/notify_client/notification_api_client.py create mode 100644 tests/app/main/notify_client/test_notification_client.py diff --git a/app/notify_client/notification_api_client.py b/app/notify_client/notification_api_client.py new file mode 100644 index 000000000..fe253669a --- /dev/null +++ b/app/notify_client/notification_api_client.py @@ -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 + ) diff --git a/tests/app/main/notify_client/test_notification_client.py b/tests/app/main/notify_client/test_notification_client.py new file mode 100644 index 000000000..08db26780 --- /dev/null +++ b/tests/app/main/notify_client/test_notification_client.py @@ -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)