def test_os_environ_config_with_api(base_url, monkeypatch):
    mock_env = {
        'SB_AUTH_TOKEN': 'token',
        'SB_API_ENDPOINT': base_url,
        'HTTP_PROXY': base_url,
        'HTTPS_PROXY': base_url,
    }
    monkeypatch.setattr(os, 'environ', mock_env)

    api = Api()
    assert api.url == base_url
    assert api.token == 'token'
    api.session.proxies['http'] = mock_env['HTTP_PROXY']
    api.session.proxies['https'] = mock_env['HTTPS_PROXY']
def test_config_explicit_advance_access(base_url, monkeypatch, config_parser):
    def is_file(f):
        if f in [UserProfile.CREDENTIALS, UserProfile.CONFIG]:
            return True
        else:
            return False

    data = {'profile': {'auth_token': 'token', 'api_endpoint': base_url}}
    parser = config_parser(data)
    monkeypatch.setattr(configparser, 'ConfigParser', parser)
    monkeypatch.setattr(os.path, 'isfile', is_file)

    api = Api(config=Config('profile'), advance_access=True)
    assert api.aa is True
def test_config_profile_no_proxy(base_url, monkeypatch, config_parser):
    def is_file(f):
        if f == UserProfile.CREDENTIALS:
            return True
        else:
            return False

    data = {'profile': {'auth_token': 'token', 'api_endpoint': base_url}}
    parser = config_parser(data)
    monkeypatch.setattr(configparser, 'ConfigParser', parser)
    monkeypatch.setattr(os.path, 'isfile', is_file)

    api = Api(config=Config('profile'))
    assert api.url == data['profile']['api_endpoint']
    assert api.token == data['profile']['auth_token']
def test_config_profile(base_url, monkeypatch, config_parser):
    data = {
        'profile': {
            'auth_token': 'token',
            'api_endpoint': base_url
        },
        'proxies': {
            'http_proxy': 'http',
            'https_proxy': 'https'
        }
    }
    parser = config_parser(data)
    monkeypatch.setattr(configparser, 'ConfigParser', parser)
    monkeypatch.setattr(os.path, 'isfile', lambda x: True)

    api = Api(config=Config('profile'))
    assert api.url == data['profile']['api_endpoint']
    assert api.token == data['profile']['auth_token']
def test_default_config(base_url, monkeypatch, config_parser):
    data = {
        'default': {
            'auth_token': 'token',
            'api_endpoint': base_url
        },
        'proxies': {
            'http_proxy': 'http',
            'https_proxy': 'https'
        }
    }
    parser = config_parser(data)
    monkeypatch.setattr(configparser, 'ConfigParser', parser)
    monkeypatch.setattr(os.path, 'isfile', lambda x: True)

    api = Api()
    assert api.session.proxies.get('http') == data['proxies']['http_proxy']
    assert api.session.proxies.get('https') == data['proxies']['https_proxy']
def test_config_profile_explicit_proxy(base_url, monkeypatch, config_parser):
    def is_file(f):
        if f == UserProfile.CREDENTIALS:
            return True
        else:
            return False

    data = {'profile': {'auth_token': 'token', 'api_endpoint': base_url}}

    proxies = {'http_proxy': 'http', 'https_proxy': 'https'}
    parser = config_parser(data)
    monkeypatch.setattr(configparser, 'ConfigParser', parser)
    monkeypatch.setattr(os.path, 'isfile', is_file)

    api = Api(config=Config('profile', proxies=proxies))
    assert api.url == data['profile']['api_endpoint']
    assert api.token == data['profile']['auth_token']
    assert api.session.proxies.get('http') == proxies['http_proxy']
    assert api.session.proxies.get('https') == proxies['https_proxy']
def api(base_url):
    """
    Fixture returning instance of Api with randomly generated endpoint URL
    and authentication token.
    """
    return Api(base_url, token=generator.uuid4())