Пример #1
0
async def test_NetboxApiOperation_request_cf(mnbro):
    spec = ResolvingParser(str(here / 'data' / 'openapi-2.yaml'))
    nb = AIONetbox(host='http://localhost',
                   api_key='11',
                   spec=spec,
                   session=SessionMock())
    nb.request = asynctest.CoroutineMock(return_value=ResponseMock())
    op = NetboxApiOperation('users', 'users_list',
                            nb.config['users']['users_list'], nb)

    mnbro.from_response.return_value.next = None

    response_schema = spec.specification['paths']['/users']['get'][
        'responses']['200']['schema']
    op.parse_params = MagicMock(return_value=({}, {}, {'name': 'test'}))
    op.build_url = MagicMock(return_value='http://test/users')

    await op.request(name='test', cf_hello='world', extra='ignore')

    nb.request.assert_called_with(method='get',
                                  url='http://test/users',
                                  query_params={
                                      'name': 'test',
                                      'cf_hello': 'world'
                                  },
                                  body={})

    mnbro.from_response.assert_called_with(data={}, **response_schema)
Пример #2
0
async def test_AIONetbox_get_session_key():
    spec = ResolvingParser(str(here / 'data' / 'openapi-2.yaml'))
    nb = AIONetbox(host='http://localhost',
                   api_key='11',
                   spec=spec,
                   session=SessionMock())
    nb.request = asynctest.CoroutineMock(return_value=ResponseMock())

    await nb.get_session_key('test')
Пример #3
0
async def test_AIONetbox_get_session_key_fail():
    spec = ResolvingParser(str(here / 'data' / 'openapi-2.yaml'))
    nb = AIONetbox(host='http://localhost',
                   api_key='11',
                   spec=spec,
                   session=SessionMock())

    resp = ResponseMock()
    nb.request = asynctest.CoroutineMock(return_value=resp)
    resp.json = asynctest.CoroutineMock(side_effect=[Exception])

    key = await nb.get_session_key('test')

    assert key is None
Пример #4
0
async def test_NetboxApiOperation_request_delete():
    spec = ResolvingParser(str(here / 'data' / 'openapi-2.yaml'))
    nb = AIONetbox(host='http://localhost',
                   api_key='11',
                   spec=spec,
                   session=SessionMock())
    nb.request = asynctest.CoroutineMock(return_value=ResponseMock())

    op = NetboxApiOperation('users', 'users_delete',
                            nb.config['users']['users_delete'], nb)

    results = await op.request(userId=42)

    assert results
Пример #5
0
def test_NetboxApiOperation_parse_params():
    spec = ResolvingParser(str(here / 'data' / 'openapi-2.yaml'))
    nb = AIONetbox(host='http://localhost',
                   api_key='11',
                   spec=spec,
                   session=SessionMock())
    op = NetboxApiOperation('users', 'users_list',
                            nb.config['users']['users_list'], nb)

    assert ({}, {}, {}) == op.parse_params({})

    params = {'name': 'foobar', 'bad_param': True}
    parsed = op.parse_params(params)

    assert ({}, {}, {'name': 'foobar'}) == parsed

    op = NetboxApiOperation('users', 'users_read',
                            nb.config['users']['users_read'], nb)

    params = {'userId': 1}
    parsed = op.parse_params(params)

    assert ({'userId': 1}, {}, {}) == parsed

    with pytest.raises(MissingRequiredParam):
        op.parse_params({})
Пример #6
0
def test_NetboxApiOperation_build_url():
    spec = ResolvingParser(str(here / 'data' / 'openapi-2.yaml'))
    nb = AIONetbox(host='http://localhost',
                   api_key='11',
                   spec=spec,
                   session=SessionMock())
    op = NetboxApiOperation('users', 'users_read', {}, nb)

    assert 'http://localhost/v1/test' == op.build_url('/test')
Пример #7
0
def test_NetboxApi():
    spec = ResolvingParser(str(here / 'data' / 'openapi-2.yaml'))
    nb = AIONetbox(host='http://localhost',
                   api_key='11',
                   spec=spec,
                   session=SessionMock())
    api = NetboxApi('users', nb.config.get('users'), nb)

    assert repr(api) == 'Netbox.users'
Пример #8
0
async def test_NetboxApiOperation_request(mnbro):
    spec = ResolvingParser(str(here / 'data' / 'openapi-2.yaml'))
    nb = AIONetbox(host='http://localhost',
                   api_key='11',
                   spec=spec,
                   session=SessionMock())
    nb.request = asynctest.CoroutineMock(return_value=ResponseMock())
    op = NetboxApiOperation('users', 'users_read',
                            nb.config['users']['users_read'], nb)

    response_schema = spec.specification['paths']['/users/{userId}']['get'][
        'responses']['200']['schema']
    op.parse_params = MagicMock(return_value=({}, {}, {}))
    op.build_url = MagicMock()

    await op.request(userId=42)

    mnbro.from_response.assert_called_with(data={}, **response_schema)
Пример #9
0
def test_NetboxApiOperation():
    spec = ResolvingParser(str(here / 'data' / 'openapi-2.yaml'))
    nb = AIONetbox(host='http://localhost',
                   api_key='11',
                   spec=spec,
                   session=SessionMock())
    op = NetboxApiOperation('users', 'users_read', {}, nb)

    assert repr(op) == 'Netbox.users.users_read'
Пример #10
0
async def test_AIONetbox_request_invalid_content_type():
    s = SessionMock()
    a = AIONetbox('http://localhost', '1122', session=s)

    with pytest.raises(InvalidRequest):
        await a.request('put',
                        'http://foobar',
                        headers={'Content-Type': 'broken'})

    s.request.assert_not_called()
Пример #11
0
async def test_AIONetbox_request_bad_params():
    s = SessionMock()
    a = AIONetbox('http://localhost', '1122', session=s)

    with pytest.raises(ValueError):
        await a.request('get',
                        'http://foobar',
                        post_params={'hello': 'world'},
                        body={'wrong': True})

    s.request.assert_not_called()
Пример #12
0
def test_AIONetbox_parse_spec():
    a = AIONetbox('http://localhost', '1122')
    spec = ResolvingParser(str(here / 'data' / 'openapi-2.yaml'))

    assert {} == a.parse_spec(None)
    assert {} == a.parse_spec({})
    assert '_orig' in a.parse_spec(spec)
    assert 'users' in a.parse_spec(spec)
    assert 'fake' not in a.parse_spec(spec)
    assert 'users_list' in a.parse_spec(spec).get('users')
Пример #13
0
async def test_NetboxApiOperation_request_pagination(mnbro):
    spec = ResolvingParser(str(here / 'data' / 'openapi-2.yaml'))
    nb = AIONetbox(host='http://localhost',
                   api_key='11',
                   spec=spec,
                   session=SessionMock())
    nb.request = asynctest.CoroutineMock(return_value=ResponseMock())
    op = NetboxApiOperation('users', 'users_list',
                            nb.config['users']['users_list'], nb)

    page0 = MagicMock()
    page1 = MagicMock()

    page0.next = 'http://test/users?limit=50&offset=50'
    page0.results = ['1', '2', '3']
    page1.next = None
    page1.results = ['one', 'two', 'three']

    mnbro.from_response.side_effect = [page0, page1]

    op.parse_params = MagicMock(return_value=({}, {}, {'name': 'test'}))
    op.build_url = MagicMock(return_value='http://test/users')

    results = await op.request(name='test')

    nb.request.assert_any_call(method='get',
                               url='http://test/users',
                               query_params={'name': 'test'},
                               body={})

    nb.request.assert_any_call(method='get',
                               url='http://test/users',
                               query_params={
                                   'name': 'test',
                                   'limit': '50',
                                   'offset': '50'
                               },
                               body={})

    assert ['1', '2', '3', 'one', 'two', 'three'] == results.results
Пример #14
0
def test_NetboxApiOperation_parse_params_body():
    spec = ResolvingParser(str(here / 'data' / 'openapi-2.yaml'))
    nb = AIONetbox(host='http://localhost',
                   api_key='11',
                   spec=spec,
                   session=SessionMock())
    op = NetboxApiOperation('users', 'users_create',
                            nb.config['users']['users_create'], nb)

    params = {'data': {'foobar': 'bar', 'baz': True}}
    parsed = op.parse_params(params)

    assert ({}, {'foobar': 'bar', 'baz': True}, {}) == parsed
Пример #15
0
def test_AIONetbox_attr(mnba):

    spec = ResolvingParser(str(here / 'data' / 'openapi-2.yaml'))
    nb = AIONetbox(host='http://localhost',
                   api_key='11',
                   spec=spec,
                   session=SessionMock())

    nb.users
    nb.users

    mnba.assert_called_once()
    mnba.assert_called_with('users', nb.config['users'], nb)

    with pytest.raises(AttributeError):
        nb.fake_tag
Пример #16
0
async def test_AIONetbox_request():
    s = SessionMock()
    a = AIONetbox('http://localhost', '1122', session=s)
    await a.request('post',
                    'http://foobar',
                    query_params={'test': 'testing'},
                    body={'new_phone': 'whodis'})

    s.request.assert_called_with(method='POST',
                                 url='http://foobar',
                                 timeout=300,
                                 params={'test': 'testing'},
                                 headers={
                                     'Content-Type': 'application/json',
                                     'Authorization': 'Token 1122',
                                 },
                                 data='{"new_phone": "whodis"}')
Пример #17
0
def test_NetboxApi_attr(mnbaop):
    spec = ResolvingParser(str(here / 'data' / 'openapi-2.yaml'))
    nb = AIONetbox(host='http://localhost',
                   api_key='11',
                   spec=spec,
                   session=SessionMock())

    api = NetboxApi('users', nb.config.get('users'), nb)

    api.users_read
    api.users_read

    mnbaop.assert_called_once()
    mnbaop.assert_called_with('users', 'users_read',
                              nb.config['users']['users_read'], nb)

    with pytest.raises(AttributeError):
        api.fake_method
Пример #18
0
async def test_AIONetbox_request_bytes():
    s = SessionMock()
    a = AIONetbox('http://localhost', '1122', session=s)

    data = b'yaml: cool'
    await a.request('post',
                    'http://foobar',
                    headers={'Content-Type': 'application/yaml'},
                    body=data)

    s.request.assert_called_with(method='POST',
                                 url='http://foobar',
                                 timeout=300,
                                 params=None,
                                 headers={
                                     'Content-Type': 'application/yaml',
                                     'Authorization': 'Token 1122',
                                 },
                                 data=data)
Пример #19
0
async def test_AIONetbox_request_form(maiofd):
    s = SessionMock()
    a = AIONetbox('http://localhost', '1122', session=s)

    await a.request(
        'post',
        'http://foobar',
        headers={'Content-Type': 'application/x-www-form-urlencoded'},
        post_params={'new_phone': 'whodis'})

    maiofd.assert_called_with({'new_phone': 'whodis'})

    s.request.assert_called_with(method='POST',
                                 url='http://foobar',
                                 timeout=300,
                                 params=None,
                                 headers={
                                     'Content-Type':
                                     'application/x-www-form-urlencoded',
                                     'Authorization': 'Token 1122',
                                 },
                                 data=maiofd.return_value)
Пример #20
0
def test_AIONetbox_from_spec():
    a = AIONetbox.from_spec(str(here / 'data' / 'openapi-2.yaml'), 'ab12cd34')

    assert a.host == 'https://api.example.com'
Пример #21
0
async def test_AIONetbox_close():
    s = SessionMock()
    nb = AIONetbox(host='http://localhost', api_key='11', spec={}, session=s)
    await nb.close()
    s.close.assert_called()
Пример #22
0
def test_AIONetbox_from_openapi(mrp):
    with patch.object(AIONetbox, 'parse_spec') as mps:
        AIONetbox.from_openapi('http://testurl', 'ab12cd34')
        mrp.assert_called_with('http://testurl/api/swagger.json')
        mps.assert_called_with(mrp.return_value)