Files
notifications-api/tests/app/clients/test_performance_platform.py

121 lines
3.8 KiB
Python
Raw Normal View History

import requests_mock
import pytest
from datetime import datetime
from freezegun import freeze_time
from functools import partial
from app.clients.performance_platform.performance_platform_client import PerformancePlatformClient
from app.utils import (
get_london_midnight_in_utc,
get_midnight_for_day_before
)
from tests.app.conftest import sample_notification_history as create_notification_history
@pytest.fixture(scope='function')
def client(mocker):
client = PerformancePlatformClient()
current_app = mocker.Mock(config={
'PERFORMANCE_PLATFORM_ENABLED': True,
'PERFORMANCE_PLATFORM_URL': 'https://performance-platform-url/',
'PERFORMANCE_PLATFORM_TOKEN': 'token'
})
client.init_app(current_app)
return client
def test_should_not_call_if_not_enabled(notify_api, client, mocker):
mocker.patch.object(client, '_send_stats_to_performance_platform')
client.active = False
client.send_performance_stats(
date='2016-10-16T00:00:00+00:00',
channel='sms',
count=142,
period='day'
)
client._send_stats_to_performance_platform.assert_not_called()
def test_should_call_if_enabled(notify_api, client, mocker):
mocker.patch.object(client, '_send_stats_to_performance_platform')
client.send_performance_stats(
date=datetime(2016, 10, 16, 0, 0, 0),
channel='sms',
count=142,
period='day'
)
assert client._send_stats_to_performance_platform.call_count == 1
def test_send_platform_stats_creates_correct_call(notify_api, client):
with requests_mock.Mocker() as request_mock:
request_mock.post(
client.performance_platform_url,
json={},
status_code=200
)
client.send_performance_stats(
date=datetime(2016, 10, 16, 0, 0, 0),
channel='sms',
count=142,
period='day'
)
assert request_mock.call_count == 1
assert request_mock.request_history[0].url == client.performance_platform_url
assert request_mock.request_history[0].method == 'POST'
request_args = request_mock.request_history[0].json()
assert request_args['dataType'] == 'notifications'
assert request_args['service'] == 'govuk-notify'
assert request_args['period'] == 'day'
assert request_args['channel'] == 'sms'
assert request_args['_timestamp'] == '2016-10-16T00:00:00'
assert request_args['count'] == 142
expected_base64_id = 'MjAxNi0xMC0xNlQwMDowMDowMGdvdnVrLW5vdGlmeXNtc25vdGlmaWNhdGlvbnNkYXk='
assert request_args['_id'] == expected_base64_id
@freeze_time("2016-01-11 12:30:00")
def test_get_total_sent_notifications_yesterday_returns_expected_totals_dict(
notify_db,
notify_db_session,
client,
sample_template
):
notification_history = partial(
create_notification_history,
notify_db,
notify_db_session,
sample_template,
status='delivered'
)
notification_history(notification_type='email')
notification_history(notification_type='sms')
# Create some notifications for the day before
yesterday = datetime(2016, 1, 10, 15, 30, 0, 0)
with freeze_time(yesterday):
notification_history(notification_type='sms')
notification_history(notification_type='sms')
notification_history(notification_type='email')
notification_history(notification_type='email')
notification_history(notification_type='email')
total_count_dict = client.get_total_sent_notifications_yesterday()
assert total_count_dict == {
"start_date": get_midnight_for_day_before(datetime.utcnow()),
"end_date": get_london_midnight_in_utc(datetime.utcnow()),
"email": {
"count": 3
},
"sms": {
"count": 2
}
}