def test_make_request_raises_error(self, requests_session_builder): mock_session = self._get_requests_session(requests_session_builder) mock_session.request.side_effect = requests.RequestException( 'Mock error') client = TNCOClient('https://test.example.com', use_sessions=True) with self.assertRaises(TNCOClientError) as context: client.make_request( TNCOClientRequest(method='GET', endpoint='api/test')) self.assertEqual(str(context.exception), 'Mock error')
def test_make_request_for_json_fails_when_cannot_parse( self, requests_session_builder): mock_session = self._get_requests_session(requests_session_builder) mock_session.request.return_value.json.side_effect = ValueError( 'Mock error') client = TNCOClient('https://test.example.com', use_sessions=True) with self.assertRaises(TNCOClientError) as context: client.make_request_for_json( TNCOClientRequest(method='GET', endpoint='api/test')) self.assertEqual(str(context.exception), 'Failed to parse response to JSON: Mock error')
def test_make_request(self, requests_session_builder): client = TNCOClient('https://test.example.com', use_sessions=True) response = client.make_request( TNCOClientRequest(method='GET', endpoint='api/test')) mock_session = self._get_requests_session(requests_session_builder) mock_session.request.assert_called_with( method='GET', url='https://test.example.com/api/test', headers={}, verify=False) self.assertEqual(response, mock_session.request.return_value)
def test_make_request_with_headers(self, requests_session_builder): client = TNCOClient('https://test.example.com', use_sessions=True) client.make_request( TNCOClientRequest(method='GET', endpoint='api/test', headers={'Accept': 'plain/text'})) mock_session = self._get_requests_session(requests_session_builder) mock_session.request.assert_called_with( method='GET', url='https://test.example.com/api/test', headers={'Accept': 'plain/text'}, verify=False)
def test_make_request_raises_http_error(self, requests_session_builder): mock_session = self._get_requests_session(requests_session_builder) mock_session.request.return_value.raise_for_status.side_effect = requests.HTTPError( 'Mock http error', response=MagicMock(status_code=400)) client = TNCOClient('https://test.example.com', use_sessions=True) with self.assertRaises(TNCOClientError) as context: client.make_request( TNCOClientRequest(method='GET', endpoint='api/test')) self.assertEqual( str(context.exception), 'GET request to https://test.example.com/api/test failed: status=400, message=Mock http error' )
def test_make_request_with_trace_ctx(self, requests_session_builder): from lmctl.utils.trace_ctx import trace_ctx with trace_ctx.scope(transaction_id='123456789'): client = TNCOClient('https://test.example.com', use_sessions=True) client.make_request( TNCOClientRequest(method='GET', endpoint='api/test')) mock_session = self._get_requests_session(requests_session_builder) mock_session.request.assert_called_with( method='GET', url='https://test.example.com/api/test', headers={'x-tracectx-transactionid': '123456789'}, verify=False)
def test_make_request_with_body(self, requests_session_builder): client = TNCOClient('https://test.example.com', use_sessions=True) client.make_request( TNCOClientRequest(method='POST', endpoint='api/test', body=json.dumps({'id': 'test'}))) mock_session = self._get_requests_session(requests_session_builder) mock_session.request.assert_called_with( method='POST', url='https://test.example.com/api/test', data=json.dumps({'id': 'test'}), headers={}, verify=False)
def test_make_request_with_auth(self, requests_session_builder): mock_auth = self._build_mocked_auth_type() client = TNCOClient('https://test.example.com', auth_type=mock_auth, use_sessions=True) client.make_request( TNCOClientRequest(method='GET', endpoint='api/test')) mock_session = self._get_requests_session(requests_session_builder) mock_session.request.assert_called_with( method='GET', url='https://test.example.com/api/test', headers={'Authorization': f'Bearer {self.token}'}, verify=False)
def test_make_request_raises_http_error_with_yaml_body_read_localized_message( self, requests_session_builder): mock_session = self._get_requests_session(requests_session_builder) mock_response = MagicMock(status_code=400, headers={'Content-Type': 'application/yaml'}, text='message: "This is the message"') mock_session.request.return_value.raise_for_status.side_effect = requests.HTTPError( 'Mock http error', response=mock_response) client = TNCOClient('https://test.example.com', use_sessions=True) with self.assertRaises(TNCOClientError) as context: client.make_request( TNCOClientRequest(method='GET', endpoint='api/test')) self.assertEqual( str(context.exception), 'GET request to https://test.example.com/api/test failed: status=400, message=This is the message' )
def test_make_request_raises_http_error_with_unparsable_json_body( self, requests_session_builder): mock_session = self._get_requests_session(requests_session_builder) mock_response = MagicMock(status_code=400, headers={'Content-Type': 'application/json'}) mock_response.json.side_effect = ValueError('Cannot parse') mock_session.request.return_value.raise_for_status.side_effect = requests.HTTPError( 'Mock http error', response=mock_response) client = TNCOClient('https://test.example.com', use_sessions=True) with self.assertRaises(TNCOClientError) as context: client.make_request( TNCOClientRequest(method='GET', endpoint='api/test')) self.assertEqual( str(context.exception), 'GET request to https://test.example.com/api/test failed: status=400, message=Mock http error' )
def test_make_request_with_auth_but_inject_current_auth_false( self, requests_session_builder): mock_auth = self._build_mocked_auth_type() client = TNCOClient('https://test.example.com', auth_type=mock_auth, use_sessions=True) client.make_request( TNCOClientRequest(method='GET', endpoint='api/test', inject_current_auth=False)) mock_session = self._get_requests_session(requests_session_builder) mock_session.request.assert_called_with( method='GET', url='https://test.example.com/api/test', headers={}, verify=False)
def test_make_request_combines_trace_ctx_and_auth_and_user_supplied_headers( self, requests_session_builder): mock_auth = self._build_mocked_auth_type() from lmctl.utils.trace_ctx import trace_ctx with trace_ctx.scope(transaction_id='123456789'): client = TNCOClient('https://test.example.com', auth_type=mock_auth, use_sessions=True) client.make_request( TNCOClientRequest(method='GET', endpoint='api/test', headers={'Accept': 'plain/text'})) mock_session = self._get_requests_session(requests_session_builder) mock_session.request.assert_called_with( method='GET', url='https://test.example.com/api/test', headers={ 'Accept': 'plain/text', 'Authorization': f'Bearer {self.token}', 'x-tracectx-transactionid': '123456789' }, verify=False)
def test_request_for_json(self): request = TNCOClientRequest.build_request_for_json(endpoint='api/test') self.assertEqual(request, TNCOClientRequest( endpoint='api/test', method='GET', headers={'Accept': 'application/json'} )) request = TNCOClientRequest.build_request_for_json(endpoint='api/test', method='POST') self.assertEqual(request, TNCOClientRequest( endpoint='api/test', method='POST', headers={'Accept': 'application/json'} )) request = TNCOClientRequest.build_request_for_json(endpoint='api/test', query_params={'Testing': True}) self.assertEqual(request, TNCOClientRequest( endpoint='api/test', method='GET', headers={'Accept': 'application/json'}, query_params={'Testing': True} ))
def test_init_minimum(self): request = TNCOClientRequest(endpoint='api/test', method='POST') self.assertEqual(request, TNCOClientRequest( endpoint='api/test', method='POST' ))