import mock from pytest import raises from requests import Request, Timeout from requests.exceptions import ConnectionError from httpie import ExitStatus from httpie.core import main error_msg = None @mock.patch('httpie.core.get_response') def test_error(get_response): def error(msg, *args, **kwargs): global error_msg error_msg = msg % args exc = ConnectionError('Connection aborted') exc.request = Request(method='GET', url='http://www.google.com') get_response.side_effect = exc ret = main(['--ignore-stdin', 'www.google.com'], custom_log_error=error) assert ret == ExitStatus.ERROR assert error_msg == ( 'ConnectionError: ' 'Connection aborted while doing GET request to URL: ' 'http://www.google.com') @mock.patch('httpie.core.get_response') def test_error_traceback(get_response): exc = ConnectionError('Connection aborted') exc.request = Request(method='GET', url='http://www.google.com') get_response.side_effect = exc with raises(ConnectionError): main(['--ignore-stdin', '--traceback', 'www.google.com']) @mock.patch('httpie.core.get_response') def test_timeout(get_response): def error(msg, *args, **kwargs): global error_msg error_msg = msg % args exc = Timeout('Request timed out') exc.request = Request(method='GET', url='http://www.google.com') get_response.side_effect = exc ret = main(['--ignore-stdin', 'www.google.com'], custom_log_error=error) assert ret == ExitStatus.ERROR_TIMEOUT assert error_msg == 'Request timed out (30s).'