import pytest import responses import requests import json from brian_dashboard_manager.grafana.utils.request import \ AdminRequest, \ TokenRequest @responses.activate def test_admin_request(data_config): ENDPOINT = 'test/url/endpoint' request = AdminRequest(**data_config) url = '{admin_username}:{admin_password}@{hostname}/'. \ format(**data_config) assert request.BASE_URL == 'http://' + url assert request.username == data_config['admin_username'] def get_callback(request): assert request.path_url[1:] == ENDPOINT return 200, {}, '{}' responses.add_callback( method=responses.GET, url=request.BASE_URL + ENDPOINT, callback=get_callback) request.get(ENDPOINT) @responses.activate def test_token_request(data_config): TOKEN = '123' ENDPOINT = 'test/url/endpoint' request = TokenRequest(**data_config, token=TOKEN) assert request.BASE_URL == 'http://{hostname}/'.format( **data_config) assert request.token == TOKEN def get_callback(request): assert request.path_url[1:] == ENDPOINT assert TOKEN in request.headers['authorization'] return 200, {}, '{}' responses.add_callback( method=responses.GET, url=request.BASE_URL + ENDPOINT, callback=get_callback) request.get(ENDPOINT) # document unimplemented handling of server-side errors @pytest.mark.xfail(raises=requests.exceptions.HTTPError) @responses.activate def test_POST_fails(data_config): ORG_NAME = 'fakeorg123' def post_callback(request): body = json.loads(request.body) assert body['name'] == ORG_NAME return 500, {}, '' request = AdminRequest(**data_config) responses.add_callback( method=responses.POST, url=request.BASE_URL + 'api/orgs', callback=post_callback) request.post('api/orgs', json={'name': ORG_NAME}) @pytest.mark.xfail(raises=requests.exceptions.HTTPError) @responses.activate def test_GET_fails(data_config): ORG_NAME = 'fakeorg123' def get_callback(request): return 500, {}, '' request = AdminRequest(**data_config) responses.add_callback( method=responses.GET, url=request.BASE_URL + 'api/orgs', callback=get_callback) request.get('api/orgs', json={'name': ORG_NAME}) @pytest.mark.xfail(raises=requests.exceptions.HTTPError) @responses.activate def test_DELETE_fails(data_config): def delete_callback(request): return 500, {}, '' request = AdminRequest(**data_config) responses.add_callback( method=responses.DELETE, url=request.BASE_URL + 'api/orgs/1', callback=delete_callback) request.delete('api/orgs/1')