mirror of
https://github.com/httpie/cli.git
synced 2024-11-28 08:38:44 +02:00
Cleanup tests
This commit is contained in:
parent
529981af7a
commit
4e574e6b8e
@ -1,5 +1,5 @@
|
||||
"""HTTP authentication-related tests."""
|
||||
import requests
|
||||
import mock
|
||||
import pytest
|
||||
|
||||
from utils import http, add_auth, HTTP_OK, TestEnvironment
|
||||
@ -7,38 +7,39 @@ import httpie.input
|
||||
import httpie.cli
|
||||
|
||||
|
||||
class TestAuth:
|
||||
def test_basic_auth(self, httpbin):
|
||||
def test_basic_auth(httpbin):
|
||||
r = http('--auth=user:password',
|
||||
'GET', httpbin.url + '/basic-auth/user/password')
|
||||
assert HTTP_OK in r
|
||||
assert r.json == {'authenticated': True, 'user': 'user'}
|
||||
|
||||
@pytest.mark.parametrize('argument_name', ['--auth-type', '-A'])
|
||||
@pytest.mark.skipif(
|
||||
requests.__version__ == '0.13.6',
|
||||
reason='Redirects with prefetch=False are broken in Requests 0.13.6')
|
||||
def test_digest_auth(self, httpbin, argument_name):
|
||||
|
||||
@pytest.mark.parametrize('argument_name', ['--auth-type', '-A'])
|
||||
def test_digest_auth(httpbin, argument_name):
|
||||
r = http(argument_name + '=digest', '--auth=user:password',
|
||||
'GET', httpbin.url + '/digest-auth/auth/user/password')
|
||||
assert HTTP_OK in r
|
||||
assert r.json == {'authenticated': True, 'user': 'user'}
|
||||
|
||||
def test_password_prompt(self, httpbin):
|
||||
httpie.input.AuthCredentials._getpass = lambda self, prompt: 'password'
|
||||
|
||||
@mock.patch('httpie.input.AuthCredentials._getpass',
|
||||
new=lambda self, prompt: 'password')
|
||||
def test_password_prompt(httpbin):
|
||||
r = http('--auth', 'user',
|
||||
'GET', httpbin.url + '/basic-auth/user/password')
|
||||
assert HTTP_OK in r
|
||||
assert r.json == {'authenticated': True, 'user': 'user'}
|
||||
|
||||
def test_credentials_in_url(self, httpbin):
|
||||
|
||||
def test_credentials_in_url(httpbin):
|
||||
url = add_auth(httpbin.url + '/basic-auth/user/password',
|
||||
auth='user:password')
|
||||
r = http('GET', url)
|
||||
assert HTTP_OK in r
|
||||
assert r.json == {'authenticated': True, 'user': 'user'}
|
||||
|
||||
def test_credentials_in_url_auth_flag_has_priority(self, httpbin):
|
||||
|
||||
def test_credentials_in_url_auth_flag_has_priority(httpbin):
|
||||
"""When credentials are passed in URL and via -a at the same time,
|
||||
then the ones from -a are used."""
|
||||
url = add_auth(httpbin.url + '/basic-auth/user/password',
|
||||
@ -47,11 +48,12 @@ class TestAuth:
|
||||
assert HTTP_OK in r
|
||||
assert r.json == {'authenticated': True, 'user': 'user'}
|
||||
|
||||
@pytest.mark.parametrize('url', [
|
||||
|
||||
@pytest.mark.parametrize('url', [
|
||||
'username@example.org',
|
||||
'username:@example.org',
|
||||
])
|
||||
def test_only_username_in_url(self, url):
|
||||
])
|
||||
def test_only_username_in_url(url):
|
||||
"""
|
||||
https://github.com/jkbrzt/httpie/issues/242
|
||||
|
||||
|
@ -154,7 +154,7 @@ class TestQuerystring:
|
||||
assert '"url": "%s"' % url in r
|
||||
|
||||
|
||||
class TestURLshorthand:
|
||||
class TestLocalhostShorthand:
|
||||
def test_expand_localhost_shorthand(self):
|
||||
args = parser.parse_args(args=[':'], env=TestEnvironment())
|
||||
assert args.url == 'http://localhost'
|
||||
|
@ -1,34 +1,29 @@
|
||||
import requests
|
||||
import pytest
|
||||
|
||||
from httpie import ExitStatus
|
||||
from utils import TestEnvironment, http, HTTP_OK
|
||||
|
||||
|
||||
class TestExitStatus:
|
||||
def test_ok_response_exits_0(self, httpbin):
|
||||
def test_ok_response_exits_0(httpbin):
|
||||
r = http('GET', httpbin.url + '/status/200')
|
||||
assert HTTP_OK in r
|
||||
assert r.exit_status == ExitStatus.OK
|
||||
|
||||
def test_error_response_exits_0_without_check_status(self, httpbin):
|
||||
|
||||
def test_error_response_exits_0_without_check_status(httpbin):
|
||||
r = http('GET', httpbin.url + '/status/500')
|
||||
assert '500 INTERNAL SERVER ERRO' in r
|
||||
assert r.exit_status == ExitStatus.OK
|
||||
assert not r.stderr
|
||||
|
||||
@pytest.mark.skipif(
|
||||
tuple(map(int, requests.__version__.split('.'))) < (2, 3, 0),
|
||||
reason='timeout broken in requests prior v2.3.0 (#185)'
|
||||
)
|
||||
def test_timeout_exit_status(self, httpbin):
|
||||
|
||||
def test_timeout_exit_status(httpbin):
|
||||
|
||||
r = http('--timeout=0.01', 'GET', httpbin.url + '/delay/0.02',
|
||||
error_exit_ok=True)
|
||||
assert r.exit_status == ExitStatus.ERROR_TIMEOUT
|
||||
|
||||
def test_3xx_check_status_exits_3_and_stderr_when_stdout_redirected(
|
||||
self, httpbin):
|
||||
|
||||
def test_3xx_check_status_exits_3_and_stderr_when_stdout_redirected(
|
||||
httpbin):
|
||||
env = TestEnvironment(stdout_isatty=False)
|
||||
r = http('--check-status', '--headers',
|
||||
'GET', httpbin.url + '/status/301',
|
||||
@ -37,10 +32,8 @@ class TestExitStatus:
|
||||
assert r.exit_status == ExitStatus.ERROR_HTTP_3XX
|
||||
assert '301 moved permanently' in r.stderr.lower()
|
||||
|
||||
@pytest.mark.skipif(
|
||||
requests.__version__ == '0.13.6',
|
||||
reason='Redirects with prefetch=False are broken in Requests 0.13.6')
|
||||
def test_3xx_check_status_redirects_allowed_exits_0(self, httpbin):
|
||||
|
||||
def test_3xx_check_status_redirects_allowed_exits_0(httpbin):
|
||||
r = http('--check-status', '--follow',
|
||||
'GET', httpbin.url + '/status/301',
|
||||
error_exit_ok=True)
|
||||
@ -48,7 +41,8 @@ class TestExitStatus:
|
||||
assert HTTP_OK in r
|
||||
assert r.exit_status == ExitStatus.OK
|
||||
|
||||
def test_4xx_check_status_exits_4(self, httpbin):
|
||||
|
||||
def test_4xx_check_status_exits_4(httpbin):
|
||||
r = http('--check-status', 'GET', httpbin.url + '/status/401',
|
||||
error_exit_ok=True)
|
||||
assert '401 UNAUTHORIZED' in r
|
||||
@ -56,7 +50,8 @@ class TestExitStatus:
|
||||
# Also stderr should be empty since stdout isn't redirected.
|
||||
assert not r.stderr
|
||||
|
||||
def test_5xx_check_status_exits_5(self, httpbin):
|
||||
|
||||
def test_5xx_check_status_exits_5(httpbin):
|
||||
r = http('--check-status', 'GET', httpbin.url + '/status/500',
|
||||
error_exit_ok=True)
|
||||
assert '500 INTERNAL SERVER ERROR' in r
|
||||
|
@ -7,71 +7,80 @@ import httpie
|
||||
from httpie.compat import is_py26
|
||||
|
||||
|
||||
class TestHTTPie:
|
||||
|
||||
def test_debug(self):
|
||||
def test_debug():
|
||||
r = http('--debug')
|
||||
assert r.exit_status == httpie.ExitStatus.OK
|
||||
assert 'HTTPie %s' % httpie.__version__ in r.stderr
|
||||
assert 'HTTPie data:' in r.stderr
|
||||
|
||||
def test_help(self):
|
||||
|
||||
def test_help():
|
||||
r = http('--help', error_exit_ok=True)
|
||||
assert r.exit_status == httpie.ExitStatus.OK
|
||||
assert 'https://github.com/jkbrzt/httpie/issues' in r
|
||||
|
||||
def test_version(self):
|
||||
|
||||
def test_version():
|
||||
r = http('--version', error_exit_ok=True)
|
||||
assert r.exit_status == httpie.ExitStatus.OK
|
||||
# FIXME: py3 has version in stdout, py2 in stderr
|
||||
assert httpie.__version__ == r.stderr.strip() + r.strip()
|
||||
|
||||
def test_GET(self, httpbin):
|
||||
|
||||
def test_GET(httpbin):
|
||||
r = http('GET', httpbin.url + '/get')
|
||||
assert HTTP_OK in r
|
||||
|
||||
def test_DELETE(self, httpbin):
|
||||
|
||||
def test_DELETE(httpbin):
|
||||
r = http('DELETE', httpbin.url + '/delete')
|
||||
assert HTTP_OK in r
|
||||
|
||||
def test_PUT(self, httpbin):
|
||||
|
||||
def test_PUT(httpbin):
|
||||
r = http('PUT', httpbin.url + '/put', 'foo=bar')
|
||||
assert HTTP_OK in r
|
||||
assert r.json['json']['foo'] == 'bar'
|
||||
|
||||
def test_POST_JSON_data(self, httpbin):
|
||||
|
||||
def test_POST_JSON_data(httpbin):
|
||||
r = http('POST', httpbin.url + '/post', 'foo=bar')
|
||||
assert HTTP_OK in r
|
||||
assert r.json['json']['foo'] == 'bar'
|
||||
|
||||
def test_POST_form(self, httpbin):
|
||||
|
||||
def test_POST_form(httpbin):
|
||||
r = http('--form', 'POST', httpbin.url + '/post', 'foo=bar')
|
||||
assert HTTP_OK in r
|
||||
assert '"foo": "bar"' in r
|
||||
|
||||
def test_POST_form_multiple_values(self, httpbin):
|
||||
|
||||
def test_POST_form_multiple_values(httpbin):
|
||||
r = http('--form', 'POST', httpbin.url + '/post', 'foo=bar', 'foo=baz')
|
||||
assert HTTP_OK in r
|
||||
assert r.json['form'] == {'foo': ['bar', 'baz']}
|
||||
|
||||
def test_POST_stdin(self, httpbin):
|
||||
|
||||
def test_POST_stdin(httpbin):
|
||||
with open(FILE_PATH) as f:
|
||||
env = TestEnvironment(stdin=f, stdin_isatty=False)
|
||||
r = http('--form', 'POST', httpbin.url + '/post', env=env)
|
||||
assert HTTP_OK in r
|
||||
assert FILE_CONTENT in r
|
||||
|
||||
def test_headers(self, httpbin):
|
||||
|
||||
def test_headers(httpbin):
|
||||
r = http('GET', httpbin.url + '/headers', 'Foo:bar')
|
||||
assert HTTP_OK in r
|
||||
assert '"User-Agent": "HTTPie' in r, r
|
||||
assert '"Foo": "bar"' in r
|
||||
|
||||
@pytest.mark.skipif(
|
||||
|
||||
@pytest.mark.skipif(
|
||||
is_py26,
|
||||
reason='the `object_pairs_hook` arg for `json.loads()` is Py>2.6 only'
|
||||
)
|
||||
def test_json_input_preserve_order(self, httpbin):
|
||||
)
|
||||
def test_json_input_preserve_order(httpbin):
|
||||
r = http('PATCH', httpbin.url + '/patch',
|
||||
'order:={"map":{"1":"first","2":"second"}}')
|
||||
assert HTTP_OK in r
|
||||
|
@ -9,7 +9,7 @@ from httpie.compat import urlopen
|
||||
from httpie.output.formatters.colors import get_lexer
|
||||
|
||||
|
||||
@pytest.mark.parametrize('stdout_isatty', [(True,), (False,)])
|
||||
@pytest.mark.parametrize('stdout_isatty', [True, False])
|
||||
def test_output_option(httpbin, stdout_isatty):
|
||||
output_filename = os.path.join(gettempdir(), test_output_option.__name__)
|
||||
url = httpbin + '/robots.txt'
|
||||
|
@ -6,12 +6,12 @@ from utils import http, TestEnvironment
|
||||
from fixtures import BIN_FILE_CONTENT, BIN_FILE_PATH
|
||||
|
||||
|
||||
class TestStream:
|
||||
# GET because httpbin 500s with binary POST body.
|
||||
# GET because httpbin 500s with binary POST body.
|
||||
|
||||
@pytest.mark.skipif(is_windows,
|
||||
|
||||
@pytest.mark.skipif(is_windows,
|
||||
reason='Pretty redirect not supported under Windows')
|
||||
def test_pretty_redirected_stream(self, httpbin):
|
||||
def test_pretty_redirected_stream(httpbin):
|
||||
"""Test that --stream works with prettified redirected output."""
|
||||
with open(BIN_FILE_PATH, 'rb') as f:
|
||||
env = TestEnvironment(colors=256, stdin=f,
|
||||
@ -21,7 +21,8 @@ class TestStream:
|
||||
httpbin.url + '/get', env=env)
|
||||
assert BINARY_SUPPRESSED_NOTICE.decode() in r
|
||||
|
||||
def test_encoded_stream(self, httpbin):
|
||||
|
||||
def test_encoded_stream(httpbin):
|
||||
"""Test that --stream works with non-prettified
|
||||
redirected terminal output."""
|
||||
with open(BIN_FILE_PATH, 'rb') as f:
|
||||
@ -30,7 +31,8 @@ class TestStream:
|
||||
httpbin.url + '/get', env=env)
|
||||
assert BINARY_SUPPRESSED_NOTICE.decode() in r
|
||||
|
||||
def test_redirected_stream(self, httpbin):
|
||||
|
||||
def test_redirected_stream(httpbin):
|
||||
"""Test that --stream works with non-prettified
|
||||
redirected terminal output."""
|
||||
with open(BIN_FILE_PATH, 'rb') as f:
|
||||
|
@ -7,79 +7,89 @@ from utils import http, HTTP_OK
|
||||
from fixtures import UNICODE
|
||||
|
||||
|
||||
class TestUnicode:
|
||||
|
||||
def test_unicode_headers(self, httpbin):
|
||||
def test_unicode_headers(httpbin):
|
||||
# httpbin doesn't interpret utf8 headers
|
||||
r = http(httpbin.url + '/headers', u'Test:%s' % UNICODE)
|
||||
assert HTTP_OK in r
|
||||
|
||||
def test_unicode_headers_verbose(self, httpbin):
|
||||
|
||||
def test_unicode_headers_verbose(httpbin):
|
||||
# httpbin doesn't interpret utf8 headers
|
||||
r = http('--verbose', httpbin.url + '/headers', u'Test:%s' % UNICODE)
|
||||
assert HTTP_OK in r
|
||||
assert UNICODE in r
|
||||
|
||||
def test_unicode_form_item(self, httpbin):
|
||||
|
||||
def test_unicode_form_item(httpbin):
|
||||
r = http('--form', 'POST', httpbin.url + '/post', u'test=%s' % UNICODE)
|
||||
assert HTTP_OK in r
|
||||
assert r.json['form'] == {'test': UNICODE}
|
||||
|
||||
def test_unicode_form_item_verbose(self, httpbin):
|
||||
|
||||
def test_unicode_form_item_verbose(httpbin):
|
||||
r = http('--verbose', '--form',
|
||||
'POST', httpbin.url + '/post', u'test=%s' % UNICODE)
|
||||
assert HTTP_OK in r
|
||||
assert UNICODE in r
|
||||
|
||||
def test_unicode_json_item(self, httpbin):
|
||||
|
||||
def test_unicode_json_item(httpbin):
|
||||
r = http('--json', 'POST', httpbin.url + '/post', u'test=%s' % UNICODE)
|
||||
assert HTTP_OK in r
|
||||
assert r.json['json'] == {'test': UNICODE}
|
||||
|
||||
def test_unicode_json_item_verbose(self, httpbin):
|
||||
|
||||
def test_unicode_json_item_verbose(httpbin):
|
||||
r = http('--verbose', '--json',
|
||||
'POST', httpbin.url + '/post', u'test=%s' % UNICODE)
|
||||
assert HTTP_OK in r
|
||||
assert UNICODE in r
|
||||
|
||||
def test_unicode_raw_json_item(self, httpbin):
|
||||
|
||||
def test_unicode_raw_json_item(httpbin):
|
||||
r = http('--json', 'POST', httpbin.url + '/post',
|
||||
u'test:={ "%s" : [ "%s" ] }' % (UNICODE, UNICODE))
|
||||
assert HTTP_OK in r
|
||||
assert r.json['json'] == {'test': {UNICODE: [UNICODE]}}
|
||||
|
||||
def test_unicode_raw_json_item_verbose(self, httpbin):
|
||||
|
||||
def test_unicode_raw_json_item_verbose(httpbin):
|
||||
r = http('--json', 'POST', httpbin.url + '/post',
|
||||
u'test:={ "%s" : [ "%s" ] }' % (UNICODE, UNICODE))
|
||||
assert HTTP_OK in r
|
||||
assert r.json['json'] == {'test': {UNICODE: [UNICODE]}}
|
||||
|
||||
def test_unicode_url_query_arg_item(self, httpbin):
|
||||
|
||||
def test_unicode_url_query_arg_item(httpbin):
|
||||
r = http(httpbin.url + '/get', u'test==%s' % UNICODE)
|
||||
assert HTTP_OK in r
|
||||
assert r.json['args'] == {'test': UNICODE}, r
|
||||
|
||||
def test_unicode_url_query_arg_item_verbose(self, httpbin):
|
||||
|
||||
def test_unicode_url_query_arg_item_verbose(httpbin):
|
||||
r = http('--verbose', httpbin.url + '/get', u'test==%s' % UNICODE)
|
||||
assert HTTP_OK in r
|
||||
assert UNICODE in r
|
||||
|
||||
def test_unicode_url(self, httpbin):
|
||||
|
||||
def test_unicode_url(httpbin):
|
||||
r = http(httpbin.url + u'/get?test=' + UNICODE)
|
||||
assert HTTP_OK in r
|
||||
assert r.json['args'] == {'test': UNICODE}
|
||||
|
||||
# def test_unicode_url_verbose(self):
|
||||
# r = http(httpbin.url + '--verbose', u'/get?test=' + UNICODE)
|
||||
# assert HTTP_OK in r
|
||||
# def test_unicode_url_verbose(self):
|
||||
# r = http(httpbin.url + '--verbose', u'/get?test=' + UNICODE)
|
||||
# assert HTTP_OK in r
|
||||
|
||||
def test_unicode_basic_auth(self, httpbin):
|
||||
|
||||
def test_unicode_basic_auth(httpbin):
|
||||
# it doesn't really authenticate us because httpbin
|
||||
# doesn't interpret the utf8-encoded auth
|
||||
http('--verbose', '--auth', u'test:%s' % UNICODE,
|
||||
httpbin.url + u'/basic-auth/test/' + UNICODE)
|
||||
|
||||
def test_unicode_digest_auth(self, httpbin):
|
||||
|
||||
def test_unicode_digest_auth(httpbin):
|
||||
# it doesn't really authenticate us because httpbin
|
||||
# doesn't interpret the utf8-encoded auth
|
||||
http('--auth-type=digest',
|
||||
|
Loading…
Reference in New Issue
Block a user