forked from extern/httpie-cli
4f1c9441c5
* Fix encoding error with non-prettified encoded responses
Removed `--format-option response.as` an promote `--response-as`: using
the format option would be misleading as it is now also used by non-prettified
responses.
* Encoding refactoring
* split --response-as into --response-mime and --response-charset
* add support for Content-Type charset for requests printed to terminal
* add support charset detection for requests printed to terminal without a Content-Type charset
* etc.
* `test_unicode.py` → `test_encoding.py`
* Drop sequence length check
* Clean-up tests
* [skip ci] Tweaks
* Use the compatible release clause for `charset_normalizer` requirement
Cf. https://www.python.org/dev/peps/pep-0440/#version-specifiers
* Clean-up
* Partially revert d52a4833e4
* Changelog
* Tweak tests
* [skip ci] Better test name
* Cleanup tests and add request body charset detection
* More test suite cleanups
* Cleanup
* Fix code style in test
* Improve detect_encoding() docstring
* Uniformize pytest.mark.parametrize() calls
* [skip ci] Comment out TODOs (will be tackled in a specific PR)
Co-authored-by: Jakub Roztocil <jakub@roztocil.co>
60 lines
1.8 KiB
Python
60 lines
1.8 KiB
Python
from unittest import mock
|
||
from pytest import raises
|
||
from requests import Request
|
||
from requests.exceptions import ConnectionError
|
||
|
||
from httpie.status import ExitStatus
|
||
from .utils import HTTP_OK, http
|
||
|
||
|
||
@mock.patch('httpie.core.program')
|
||
def test_error(program):
|
||
exc = ConnectionError('Connection aborted')
|
||
exc.request = Request(method='GET', url='http://www.google.com')
|
||
program.side_effect = exc
|
||
r = http('www.google.com', tolerate_error_exit_status=True)
|
||
assert r.exit_status == ExitStatus.ERROR
|
||
error_msg = (
|
||
'ConnectionError: '
|
||
'Connection aborted while doing a GET request to URL: '
|
||
'http://www.google.com'
|
||
)
|
||
assert error_msg in r.stderr
|
||
|
||
|
||
@mock.patch('httpie.core.program')
|
||
def test_error_traceback(program):
|
||
exc = ConnectionError('Connection aborted')
|
||
exc.request = Request(method='GET', url='http://www.google.com')
|
||
program.side_effect = exc
|
||
with raises(ConnectionError):
|
||
http('--traceback', 'www.google.com')
|
||
|
||
|
||
def test_max_headers_limit(httpbin_both):
|
||
with raises(ConnectionError) as e:
|
||
http('--max-headers=1', httpbin_both + '/get')
|
||
assert 'got more than 1 headers' in str(e.value)
|
||
|
||
|
||
def test_max_headers_no_limit(httpbin_both):
|
||
assert HTTP_OK in http('--max-headers=0', httpbin_both + '/get')
|
||
|
||
|
||
def test_response_charset_option_unknown_encoding(httpbin_both):
|
||
r = http(
|
||
'--response-charset=foobar',
|
||
httpbin_both + '/get',
|
||
tolerate_error_exit_status=True,
|
||
)
|
||
assert "'foobar' is not a supported encoding" in r.stderr
|
||
|
||
|
||
def test_response_mime_option_invalid_mime_type(httpbin_both):
|
||
r = http(
|
||
'--response-mime=foobar',
|
||
httpbin_both + '/get',
|
||
tolerate_error_exit_status=True,
|
||
)
|
||
assert "'foobar' doesn’t look like a mime type" in r.stderr
|