2017-08-23 15:04:37 +01:00
|
|
|
import requests
|
2017-01-27 12:21:08 +00:00
|
|
|
import requests_mock
|
|
|
|
|
import pytest
|
|
|
|
|
|
|
|
|
|
from app.clients.performance_platform.performance_platform_client import PerformancePlatformClient
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@pytest.fixture(scope='function')
|
2017-08-24 17:08:39 +01:00
|
|
|
def perf_client(client, mocker):
|
2017-08-23 15:04:37 +01:00
|
|
|
perf_client = PerformancePlatformClient()
|
2017-01-27 12:21:08 +00:00
|
|
|
current_app = mocker.Mock(config={
|
|
|
|
|
'PERFORMANCE_PLATFORM_ENABLED': True,
|
2017-08-23 15:04:37 +01:00
|
|
|
'PERFORMANCE_PLATFORM_ENDPOINTS': {
|
|
|
|
|
'foo': 'my_token',
|
|
|
|
|
'bar': 'other_token'
|
|
|
|
|
},
|
|
|
|
|
'PERFORMANCE_PLATFORM_URL': 'https://performance-platform-url/'
|
2017-01-27 12:21:08 +00:00
|
|
|
})
|
2017-08-23 15:04:37 +01:00
|
|
|
perf_client.init_app(current_app)
|
|
|
|
|
return perf_client
|
2017-01-27 12:21:08 +00:00
|
|
|
|
|
|
|
|
|
2017-08-23 15:04:37 +01:00
|
|
|
def test_should_not_call_if_not_enabled(perf_client):
|
|
|
|
|
with requests_mock.Mocker() as request_mock:
|
|
|
|
|
request_mock.post('https://performance-platform-url/foo', json={}, status_code=200)
|
|
|
|
|
perf_client._active = False
|
2017-08-24 17:08:39 +01:00
|
|
|
perf_client.send_stats_to_performance_platform({'dataType': 'foo'})
|
2017-01-27 12:21:08 +00:00
|
|
|
|
2017-08-23 15:04:37 +01:00
|
|
|
assert request_mock.called is False
|
2017-01-27 12:21:08 +00:00
|
|
|
|
|
|
|
|
|
2017-08-24 17:08:39 +01:00
|
|
|
def test_should_call_datatype_endpoint_if_enabled(perf_client):
|
2017-01-27 12:21:08 +00:00
|
|
|
with requests_mock.Mocker() as request_mock:
|
2017-08-23 15:04:37 +01:00
|
|
|
request_mock.post('https://performance-platform-url/foo', json={}, status_code=200)
|
2017-08-24 17:08:39 +01:00
|
|
|
perf_client.send_stats_to_performance_platform({'dataType': 'foo'})
|
2017-01-27 12:21:08 +00:00
|
|
|
|
|
|
|
|
assert request_mock.call_count == 1
|
2017-08-23 15:04:37 +01:00
|
|
|
assert request_mock.last_request.method == 'POST'
|
2017-01-27 12:21:08 +00:00
|
|
|
|
2017-01-27 16:39:01 +00:00
|
|
|
|
2017-08-23 15:04:37 +01:00
|
|
|
@pytest.mark.parametrize('dataset, token', [
|
|
|
|
|
('foo', 'my_token'),
|
|
|
|
|
('bar', 'other_token')
|
|
|
|
|
])
|
|
|
|
|
def test_should_use_correct_token(perf_client, dataset, token):
|
|
|
|
|
with requests_mock.Mocker() as request_mock:
|
|
|
|
|
request_mock.post('https://performance-platform-url/foo', json={}, status_code=200)
|
|
|
|
|
request_mock.post('https://performance-platform-url/bar', json={}, status_code=200)
|
2017-08-24 17:08:39 +01:00
|
|
|
perf_client.send_stats_to_performance_platform({'dataType': dataset})
|
2017-01-27 16:39:01 +00:00
|
|
|
|
2017-08-23 15:04:37 +01:00
|
|
|
assert request_mock.call_count == 1
|
|
|
|
|
assert request_mock.last_request.headers.get('authorization') == 'Bearer {}'.format(token)
|
2017-01-27 16:39:01 +00:00
|
|
|
|
|
|
|
|
|
2017-08-23 15:04:37 +01:00
|
|
|
def test_should_raise_for_status(perf_client):
|
|
|
|
|
with pytest.raises(requests.HTTPError), requests_mock.Mocker() as request_mock:
|
|
|
|
|
request_mock.post('https://performance-platform-url/foo', json={}, status_code=403)
|
2017-08-24 17:08:39 +01:00
|
|
|
perf_client.send_stats_to_performance_platform({'dataType': 'foo'})
|