summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorRiley Patterson <rileypatterson@gmail.com>2016-06-02 18:13:01 -0700
committerBert JW Regeer <bertjw@regeer.org>2016-07-16 20:23:26 -0600
commite810667e57750ed4b0f269fbed15a27cdd8aebf9 (patch)
treec798839253091ee64ed8313cdf9093c7c387f43e /tests
parentff5bb964f96db0535f2fd394666ecf3ea2ddbc40 (diff)
downloadwebob-e810667e57750ed4b0f269fbed15a27cdd8aebf9.tar.gz
response: improve charset defaults
Refactored the logic in Response.__init__ to handle default charset more consistently. Added logic in the charset setter that ignores attempts to set it on JSON content types. Removed explicit charset specification from exceptions since this is handled correctly for the text types within Response. Fixed some affected tests, and added assertions for content types in exceptions. Addresses https://github.com/Pylons/webob/issues/237
Diffstat (limited to 'tests')
-rw-r--r--tests/test_exc.py3
-rw-r--r--tests/test_request.py10
-rw-r--r--tests/test_response.py10
3 files changed, 18 insertions, 5 deletions
diff --git a/tests/test_exc.py b/tests/test_exc.py
index 1e57917..14da0f3 100644
--- a/tests/test_exc.py
+++ b/tests/test_exc.py
@@ -139,6 +139,8 @@ def test_WSGIHTTPException_respects_application_json():
title = 'Validation Failed'
explanation = 'Validation of an attribute failed.'
def start_response(status, headers, exc_info=None):
+ # check that json doesn't contain a charset
+ assert ('Content-Type', 'application/json') in headers
pass
exc = ValidationError(detail='Attribute "xyz" is invalid.')
@@ -216,6 +218,7 @@ def test_WSGIHTTPException_allows_custom_json_formatter():
def test_WSGIHTTPException_generate_response():
def start_response(status, headers, exc_info=None):
+ assert ('Content-Type', 'text/html; charset=UTF-8') in headers
pass
environ = {
'wsgi.url_scheme': 'HTTP',
diff --git a/tests/test_request.py b/tests/test_request.py
index 808840b..87e8b81 100644
--- a/tests/test_request.py
+++ b/tests/test_request.py
@@ -3265,9 +3265,9 @@ class TestRequest_functional(object):
def test_call_WSGI_app(self):
req = self._blankOne('/')
def wsgi_app(environ, start_response):
- start_response('200 OK', [('Content-type', 'text/plain')])
+ start_response('200 OK', [('Content-Type', 'text/plain')])
return [b'Hi!']
- assert req.call_application(wsgi_app) == ('200 OK', [('Content-type', 'text/plain')], [b'Hi!'])
+ assert req.call_application(wsgi_app) == ('200 OK', [('Content-Type', 'text/plain')], [b'Hi!'])
res = req.get_response(wsgi_app)
from webob.response import Response
@@ -3275,13 +3275,13 @@ class TestRequest_functional(object):
assert res.status == '200 OK'
from webob.headers import ResponseHeaders
assert isinstance(res.headers, ResponseHeaders)
- assert list(res.headers.items()) == [('Content-type', 'text/plain')]
+ assert list(res.headers.items()) == [('Content-Type', 'text/plain; charset=UTF-8')]
assert res.body == b'Hi!'
def test_get_response_catch_exc_info_true(self):
req = self._blankOne('/')
def wsgi_app(environ, start_response):
- start_response('200 OK', [('Content-type', 'text/plain')])
+ start_response('200 OK', [('Content-Type', 'text/plain')])
return [b'Hi!']
res = req.get_response(wsgi_app, catch_exc_info=True)
from webob.response import Response
@@ -3289,7 +3289,7 @@ class TestRequest_functional(object):
assert res.status == '200 OK'
from webob.headers import ResponseHeaders
assert isinstance(res.headers, ResponseHeaders)
- assert list(res.headers.items()) == [('Content-type', 'text/plain')]
+ assert list(res.headers.items()) == [('Content-Type', 'text/plain; charset=UTF-8')]
assert res.body == b'Hi!'
def equal_req(self, req, inp):
diff --git a/tests/test_response.py b/tests/test_response.py
index aaac831..7b46058 100644
--- a/tests/test_response.py
+++ b/tests/test_response.py
@@ -60,6 +60,7 @@ def test_response():
del req.environ
with pytest.raises(TypeError):
Response(charset=None,
+ content_type='image/jpeg',
body=text_(b"unicode body"))
with pytest.raises(TypeError):
Response(wrong_key='dummy')
@@ -140,6 +141,15 @@ def test_init_keeps_specified_charset_when_json():
expected = content_type
assert Response(content_type=content_type).headers['content-type'] == expected
+def test_set_charset_fails_when_json():
+ content_type = 'application/json'
+ expected = content_type
+ res = Response(content_type=content_type)
+ res.charset = 'utf-8'
+ assert res.headers['content-type'] == expected
+ res.content_type_params = {'charset': 'utf-8'}
+ assert res.headers['content-type'] == expected
+
def test_cookies():
res = Response()