Skip to content
Snippets Groups Projects
test_grafana_request.py 2.70 KiB
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')