diff --git a/app/__init__.py b/app/__init__.py index d0ce1d245..871a5589e 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -19,6 +19,7 @@ from app.notify_client.job_api_client import JobApiClient from app.notify_client.notification_api_client import NotificationApiClient from app.notify_client.status_api_client import StatusApiClient from app.notify_client.invite_api_client import InviteApiClient +from app.notify_client.statistics_api_client import StatisticsApiClient from app.its_dangerous_session import ItsdangerousSessionInterface from app.asset_fingerprinter import AssetFingerprinter from utils.recipients import validate_phone_number, InvalidPhoneError @@ -36,6 +37,7 @@ job_api_client = JobApiClient() notification_api_client = NotificationApiClient() status_api_client = StatusApiClient() invite_api_client = InviteApiClient() +statistics_api_client = StatisticsApiClient() asset_fingerprinter = AssetFingerprinter() @@ -55,6 +57,7 @@ def create_app(config_name, config_overrides=None): notification_api_client.init_app(application) status_api_client.init_app(application) invite_api_client.init_app(application) + statistics_api_client.init_app(application) login_manager.init_app(application) login_manager.login_view = 'main.sign_in' diff --git a/app/notify_client/statistics_api_client.py b/app/notify_client/statistics_api_client.py new file mode 100644 index 000000000..9ef40bbd6 --- /dev/null +++ b/app/notify_client/statistics_api_client.py @@ -0,0 +1,18 @@ +from notifications_python_client.base import BaseAPIClient + + +class StatisticsApiClient(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_statistics_for_service(self, service_id): + return self.get( + url='/service/{}/notifications-statistics'.format(service_id), + ) diff --git a/tests/app/main/notify_client/test_statistics_client.py b/tests/app/main/notify_client/test_statistics_client.py new file mode 100644 index 000000000..3dc24c16a --- /dev/null +++ b/tests/app/main/notify_client/test_statistics_client.py @@ -0,0 +1,13 @@ +from app.notify_client.statistics_api_client import StatisticsApiClient + + +def test_client_uses_correct_find_by_email(mocker, api_user_active): + + expected_url = '/service/a1b2c3d4/notifications-statistics' + + client = StatisticsApiClient() + mock_get = mocker.patch('app.notify_client.statistics_api_client.StatisticsApiClient.get') + + client.get_statistics_for_service('a1b2c3d4') + + mock_get.assert_called_once_with(url=expected_url) diff --git a/tests/app/main/views/test_dashboard.py b/tests/app/main/views/test_dashboard.py index 0902f6293..0c88c68d1 100644 --- a/tests/app/main/views/test_dashboard.py +++ b/tests/app/main/views/test_dashboard.py @@ -6,6 +6,7 @@ def test_should_show_recent_jobs_on_dashboard(app_, api_user_active, mock_get_service, mock_get_service_templates, + mock_get_service_statistics, mock_get_user, mock_get_user_by_email, mock_login, diff --git a/tests/app/main/views/test_sign_out.py b/tests/app/main/views/test_sign_out.py index a6b8e5fcb..1d4860a71 100644 --- a/tests/app/main/views/test_sign_out.py +++ b/tests/app/main/views/test_sign_out.py @@ -16,6 +16,7 @@ def test_sign_out_user(app_, mock_get_user, mock_get_user_by_email, mock_get_service_templates, + mock_get_service_statistics, mock_login, mock_get_jobs): with app_.test_request_context(): diff --git a/tests/conftest.py b/tests/conftest.py index 9d5c88f39..b5f01d91f 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -154,6 +154,15 @@ def mock_delete_service(mocker, mock_get_service): 'app.notifications_api_client.delete_service', side_effect=_delete) +@pytest.fixture(scope='function') +def mock_get_service_statistics(mocker): + def _create(service_id): + return {'data': []} + + return mocker.patch( + 'app.statistics_api_client.get_statistics_for_service', side_effect=_create) + + @pytest.fixture(scope='function') def mock_get_service_template(mocker): def _create(service_id, template_id):