예제 #1
0
    def test_all_methods_skip_auth(self, mock_post):
        url = 'http://example.com/'
        cl = client.HttpClient(url, auth_header={"authorization": "xxx"})

        for m in ['POST', 'PATCH', 'UPDATE', 'PUT', 'DELETE']:
            method_to_call = getattr(cl, m.lower())
            method_to_call(ignore_auth=True, is_absolute_path=False)
            mock_post.assert_called_with(m,
                                         None,
                                         ignore_auth=True,
                                         params=None,
                                         headers=None,
                                         is_absolute_path=False,
                                         cookies=None,
                                         data=None,
                                         files=None,
                                         json=None)

        for m in ['GET']:
            method_to_call = getattr(cl, m.lower())
            method_to_call(ignore_auth=True, is_absolute_path=False)
            mock_post.assert_called_with(m,
                                         None,
                                         ignore_auth=True,
                                         params=None,
                                         headers=None,
                                         is_absolute_path=False,
                                         cookies=None)
예제 #2
0
 def test_build_url_empty_endpoint_path_leads_to_base_url(self):
     url = 'https://example.com/'
     cl = client.HttpClient(url)
     self.assertEqual(url, cl._build_url())
     self.assertEqual(url, cl._build_url(''))
     self.assertEqual(url, cl._build_url(None))
     self.assertEqual(url, cl._build_url('', True))
     self.assertEqual(url, cl._build_url(None, True))
예제 #3
0
 def test_request_skip_auth_header(self):
     cl = client.HttpClient('http://example.com',
                            default_http_header={"defheader": "test"},
                            auth_header={"Authorization": "test"})
     res = cl._request_raw('POST', 'abc', ignore_auth=True)
     cl._requests_retry_session().close()
     self.assertEqual(res.request.url, 'http://example.com/abc')
     self.assertEqual(res.request.headers.get('defheader'), 'test')
     self.assertEqual(res.request.headers.get('Authorization'), None)
예제 #4
0
    def test_update_existing_auth_header(self):
        existing_header = {'authorization': 'value'}
        new_header = {'api_token': 'token_value'}

        cl = client.HttpClient('https://example.com',
                               auth_header=existing_header)
        cl.update_auth_header(new_header, overwrite=False)
        self.assertDictEqual(cl._auth_header, {
            **existing_header,
            **new_header
        })
예제 #5
0
    def test_update_auth_header_None(self):
        existing_header = None
        new_header = {'api_token': 'token_value'}

        cl = client.HttpClient('https://example.com',
                               auth_header=existing_header)
        cl.update_auth_header(new_header, overwrite=False)
        self.assertDictEqual(cl._auth_header, new_header)

        new_header_2 = {'password': '******'}
        cl.update_auth_header(new_header_2, overwrite=True)
        self.assertDictEqual(cl._auth_header, new_header_2)
예제 #6
0
    def test_all_methods_requests_raw_with_custom_pars_passes(
            self, mock_request):
        url = 'http://example.com/'
        cl = client.HttpClient(url)

        # post_raw
        cust_par = {"custom_par": "custom_par_value"}

        for met in ['GET', 'POST', 'PATCH', 'UPDATE', 'PUT']:
            cl._request_raw(met, ignore_auth=False, params=cust_par)
            mock_request.assert_called_with(met, url, params=cust_par)

        cl._requests_retry_session().close()
예제 #7
0
    def test_post_default_pars_with_none_custom_pars_passes(self, mock_post):
        url = 'http://example.com/'
        test_def_par = {"default_par": "test"}
        cl = client.HttpClient(url, default_params=test_def_par)

        # post
        cl.post()
        mock_post.assert_called_with('POST',
                                     url,
                                     params=test_def_par,
                                     cookies=None,
                                     data=None,
                                     json=None,
                                     files=None)
예제 #8
0
    def test_all_methods_requests_raw_with_is_absolute_path_false(
            self, mock_request):
        url = 'http://example.com/api/v1'
        cl = client.HttpClient(url)

        for met in ['GET', 'POST', 'PATCH', 'UPDATE', 'PUT']:
            cl._request_raw(met,
                            'events',
                            ignore_auth=False,
                            is_absolute_path=False)
            mock_request.assert_called_with(met,
                                            'http://example.com/api/v1/events',
                                            params={})

        cl._requests_retry_session().close()
예제 #9
0
    def test_all_methods_requests_raw_with_is_absolute_path_true(
            self, mock_request):
        url = 'http://example.com/'
        cl = client.HttpClient(url)

        for met in client.ALLOWED_METHODS:
            cl._request_raw(met,
                            'http://example2.com/v1/',
                            ignore_auth=False,
                            is_absolute_path=True)
            mock_request.assert_called_with(met,
                                            'http://example2.com/v1/',
                                            params={})

        cl._requests_retry_session().close()
예제 #10
0
    def test_post_with_custom_pars_passes(self, mock_post):
        url = 'http://example.com/'
        cl = client.HttpClient(url)

        # post_raw
        cust_par = {"custom_par": "custom_par_value"}
        cl.post(params=cust_par)

        mock_post.assert_called_with('POST',
                                     url,
                                     params=cust_par,
                                     cookies=None,
                                     data=None,
                                     json=None,
                                     files=None)
예제 #11
0
    def test_post_raw_default_pars_with_custom_pars_passes(self, mock_post):
        url = 'http://example.com/'
        test_def_par = {"default_par": "test"}
        cl = client.HttpClient(url, default_params=test_def_par)

        # post_raw
        cust_par = {"custom_par": "custom_par_value"}
        cl.post_raw(params=cust_par)

        test_cust_def_par = {**test_def_par, **cust_par}
        mock_post.assert_called_with('POST',
                                     url,
                                     params=test_cust_def_par,
                                     cookies=None,
                                     data=None,
                                     json=None,
                                     files=None)
예제 #12
0
    def test_post_raw_default_pars_with_custom_pars_to_None_passes(
            self, mock_post):
        url = 'http://example.com/'
        test_def_par = {"default_par": "test"}
        cl = client.HttpClient(url, default_params=test_def_par)

        # post_raw
        cust_par = None
        cl.post_raw(params=cust_par)

        # post_raw changes None to empty dict
        _cust_par_transformed = {}
        test_cust_def_par = {**test_def_par, **_cust_par_transformed}
        mock_post.assert_called_with('POST',
                                     url,
                                     params=test_cust_def_par,
                                     cookies=None,
                                     data=None,
                                     json=None,
                                     files=None)
예제 #13
0
    def test_all_methods_raw(self):
        url = 'http://example.com'
        cl = client.HttpClient(url,
                               default_http_header={'header1': 'headerval'},
                               auth_header={'api_token': 'abdc1234'})

        TARGET_URL = 'http://example.com/storage?exclude=componentDetails'

        for m in ['GET', 'POST']:
            method_to_call = getattr(cl, m.lower() + '_raw')
            res = method_to_call('storage',
                                 params={'exclude': 'componentDetails'},
                                 headers={'abc': '123'},
                                 data={'attr1': 'val1'})
            self.assertEqual(res.request.url, TARGET_URL)
            self.assertEqual(res.request.headers.get('api_token'), 'abdc1234')
            self.assertEqual(res.request.headers.get('abc'), '123')
            self.assertEqual(res.request.headers.get('header1'), 'headerval')
            self.assertEqual(res.request.body, 'attr1=val1')

        cl._requests_retry_session().close()
예제 #14
0
    def test_all_methods_kwargs(self, mock_request):
        url = 'http://example.com/api/v1'
        cl = client.HttpClient(url)

        for met in ['GET', 'POST', 'PATCH', 'UPDATE', 'PUT']:
            method_to_call = getattr(cl, met.lower())
            method_to_call(params={'par1': 'val1'},
                           verify=False,
                           data={'data': '123'},
                           files={'a': '/path/to/file'},
                           cert='/path/to/cert',
                           json=None)
            mock_request.assert_called_with(met,
                                            'http://example.com/api/v1/',
                                            verify=False,
                                            data={'data': '123'},
                                            files={'a': '/path/to/file'},
                                            cookies=None,
                                            cert='/path/to/cert',
                                            params={'par1': 'val1'},
                                            json=None)

        cl._requests_retry_session().close()
예제 #15
0
 def test_build_url_rel_path(self):
     url = 'https://example.com/'
     cl = client.HttpClient(url)
     self.assertEqual(urlparse.urljoin(url, 'storage'),
                      cl._build_url('storage'))
예제 #16
0
 def test_build_url_base_url_appends_slash(self):
     url = 'https://example.com'
     cl = client.HttpClient(url)
     self.assertEqual('https://example.com/', cl.base_url)
예제 #17
0
 def test_build_url_abs_path(self):
     url = 'https://example.com/'
     cl = client.HttpClient(url)
     self.assertEqual('https://example2.com/storage',
                      cl._build_url('https://example2.com/storage', True))