""" Tests for the provided defaults regarding HTTP method, and --json vs. --form. """ from tests import TestEnvironment, http, httpbin, HTTP_OK from tests.fixtures import FILE_PATH class TestImplicitHTTPMethod: def test_implicit_GET(self): r = http(httpbin('/get')) assert HTTP_OK in r def test_implicit_GET_with_headers(self): r = http(httpbin('/headers'), 'Foo:bar') assert HTTP_OK in r assert r.json['headers']['Foo'] == 'bar' def test_implicit_POST_json(self): r = http(httpbin('/post'), 'hello=world') assert HTTP_OK in r assert r.json['json'] == {'hello': 'world'} def test_implicit_POST_form(self): r = http('--form', httpbin('/post'), 'foo=bar') assert HTTP_OK in r assert r.json['form'] == {'foo': 'bar'} def test_implicit_POST_stdin(self): with open(FILE_PATH) as f: env = TestEnvironment(stdin_isatty=False, stdin=f) r = http('--form', httpbin('/post'), env=env) assert HTTP_OK in r class TestAutoContentTypeAndAcceptHeaders: """ Test that Accept and Content-Type correctly defaults to JSON, but can still be overridden. The same with Content-Type when --form -f is used. """ def test_GET_no_data_no_auto_headers(self): # https://github.com/jkbr/httpie/issues/62 r = http('GET', httpbin('/headers')) assert HTTP_OK in r assert r.json['headers']['Accept'] == '*/*' assert 'Content-Type' not in r.json['headers'] def test_POST_no_data_no_auto_headers(self): # JSON headers shouldn't be automatically set for POST with no data. r = http('POST', httpbin('/post')) assert HTTP_OK in r assert '"Accept": "*/*"' in r assert '"Content-Type": "application/json' not in r def test_POST_with_data_auto_JSON_headers(self): r = http('POST', httpbin('/post'), 'a=b') assert HTTP_OK in r assert '"Accept": "application/json"' in r assert '"Content-Type": "application/json; charset=utf-8' in r def test_GET_with_data_auto_JSON_headers(self): # JSON headers should automatically be set also for GET with data. r = http('POST', httpbin('/post'), 'a=b') assert HTTP_OK in r assert '"Accept": "application/json"' in r assert '"Content-Type": "application/json; charset=utf-8' in r def test_POST_explicit_JSON_auto_JSON_accept(self): r = http('--json', 'POST', httpbin('/post')) assert HTTP_OK in r assert r.json['headers']['Accept'] == 'application/json' # Make sure Content-Type gets set even with no data. # https://github.com/jkbr/httpie/issues/137 assert 'application/json' in r.json['headers']['Content-Type'] def test_GET_explicit_JSON_explicit_headers(self): r = http('--json', 'GET', httpbin('/headers'), 'Accept:application/xml', 'Content-Type:application/xml') assert HTTP_OK in r assert '"Accept": "application/xml"' in r assert '"Content-Type": "application/xml"' in r def test_POST_form_auto_Content_Type(self): r = http('--form', 'POST', httpbin('/post')) assert HTTP_OK in r assert '"Content-Type": "application/x-www-form-urlencoded' in r def test_POST_form_Content_Type_override(self): r = http('--form', 'POST', httpbin('/post'), 'Content-Type:application/xml') assert HTTP_OK in r assert '"Content-Type": "application/xml"' in r def test_print_only_body_when_stdout_redirected_by_default(self): env = TestEnvironment(stdin_isatty=True, stdout_isatty=False) r = http('GET', httpbin('/get'), env=env) assert 'HTTP/' not in r def test_print_overridable_when_stdout_redirected(self): env = TestEnvironment(stdin_isatty=True, stdout_isatty=False) r = http('--print=h', 'GET', httpbin('/get'), env=env) assert HTTP_OK in r