summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMax Kharandziuk <max.kharandziuk@gmail.com>2013-08-13 00:13:50 +0300
committerMax Kharandziuk <max.kharandziuk@gmail.com>2013-08-13 00:13:50 +0300
commita542c50d09e0544af4fa1ca6937b1925e1b01cdf (patch)
treefa56530588370b8e2ae64f49c8b8746e9d777128
parent0cabca0c24dd3b56a4d8b1f912bf78f238fd655c (diff)
downloadwebtest-a542c50d09e0544af4fa1ca6937b1925e1b01cdf.tar.gz
added shortucts for xhr request; test for added code
-rw-r--r--tests/test_app.py18
-rw-r--r--webtest/app.py67
2 files changed, 65 insertions, 20 deletions
diff --git a/tests/test_app.py b/tests/test_app.py
index ec4874b..b5ca6e8 100644
--- a/tests/test_app.py
+++ b/tests/test_app.py
@@ -78,6 +78,7 @@ class TestApp(unittest.TestCase):
assert 'HTTP_ACCEPT: text/plain' in resp.text
+
class TestStatus(unittest.TestCase):
def setUp(self):
@@ -576,3 +577,20 @@ class TestWSGIProxy(unittest.TestCase):
def tearDown(self):
self.s.shutdown()
+
+class TestAppXhrParam(unittest.TestCase):
+
+ def setUp(self):
+ self.app = webtest.TestApp(debug_app)
+
+ def test_xhr_param_change_headers(self):
+ app = self.app
+ # FIXME: this test isn`t work for head request
+ # now I don't know how to test head request
+ functions = (app.get, app.post, app.delete,
+ app.put, app.options) #app.head
+ for func in functions:
+ resp = func('/', xhr=True)
+ resp.charset = 'ascii'
+ assert 'HTTP_X_REQUESTED_WITH: XMLHttpRequest' in resp.text, resp.text
+
diff --git a/webtest/app.py b/webtest/app.py
index ac2a17c..2d8d1c4 100644
--- a/webtest/app.py
+++ b/webtest/app.py
@@ -146,7 +146,7 @@ class TestApp(object):
self.cookiejar.clear()
def get(self, url, params=None, headers=None, extra_environ=None,
- status=None, expect_errors=False):
+ status=None, expect_errors=False, xhr=False):
"""
Do a GET request given the url path.
@@ -173,6 +173,11 @@ class TestApp(object):
If it is True, then non-200/3xx responses are also okay.
:type expect_errors:
boolean
+ :param xhr:
+ If this is true, then marks response as ajax. The same as
+ headers={'X-REQUESTED-WITH': 'XMLHttpRequest', }
+ :type xhr:
+ boolean
:returns: :class:`webtest.TestResponse` instance.
@@ -193,6 +198,8 @@ class TestApp(object):
else:
environ['QUERY_STRING'] = str('')
req = self.RequestClass.blank(url, environ)
+ if xhr:
+ headers = self._add_xhr_header(headers)
if headers:
req.headers.update(headers)
return self.do_request(req, status=status,
@@ -200,7 +207,7 @@ class TestApp(object):
def post(self, url, params='', headers=None, extra_environ=None,
status=None, upload_files=None, expect_errors=False,
- content_type=None):
+ content_type=None, xhr=False):
"""
Do a POST request. Similar to :meth:`~webtest.TestApp.get`.
@@ -229,25 +236,34 @@ class TestApp(object):
:type content_type:
string
+ :param xhr:
+ If this is true, then marks response as ajax. The same as
+ headers={'X-REQUESTED-WITH': 'XMLHttpRequest', }
+ :type xhr:
+ boolean
+
:returns: :class:`webtest.TestResponse` instance.
"""
+ if xhr:
+ headers = self._add_xhr_header(headers)
return self._gen_request('POST', url, params=params, headers=headers,
extra_environ=extra_environ, status=status,
upload_files=upload_files,
expect_errors=expect_errors,
- content_type=content_type,
- )
+ content_type=content_type)
def put(self, url, params='', headers=None, extra_environ=None,
status=None, upload_files=None, expect_errors=False,
- content_type=None):
+ content_type=None, xhr=False):
"""
Do a PUT request. Similar to :meth:`~webtest.TestApp.post`.
:returns: :class:`webtest.TestResponse` instance.
"""
+ if xhr:
+ headers = self._add_xhr_header(headers)
return self._gen_request('PUT', url, params=params, headers=headers,
extra_environ=extra_environ, status=status,
upload_files=upload_files,
@@ -257,63 +273,67 @@ class TestApp(object):
def patch(self, url, params='', headers=None, extra_environ=None,
status=None, upload_files=None, expect_errors=False,
- content_type=None):
+ content_type=None, xhr=False):
"""
Do a PATCH request. Similar to :meth:`~webtest.TestApp.post`.
:returns: :class:`webtest.TestResponse` instance.
"""
+ if xhr:
+ headers = self._add_xhr_header(headers)
return self._gen_request('PATCH', url, params=params, headers=headers,
extra_environ=extra_environ, status=status,
upload_files=upload_files,
expect_errors=expect_errors,
- content_type=content_type,
- )
+ content_type=content_type)
def delete(self, url, params=utils.NoDefault, headers=None,
extra_environ=None, status=None, expect_errors=False,
- content_type=None):
+ content_type=None, xhr=False):
"""
Do a DELETE request. Similar to :meth:`~webtest.TestApp.get`.
:returns: :class:`webtest.TestResponse` instance.
"""
+ if xhr:
+ headers = self._add_xhr_header(headers)
return self._gen_request('DELETE', url, params=params, headers=headers,
extra_environ=extra_environ, status=status,
upload_files=None,
expect_errors=expect_errors,
- content_type=content_type,
- )
+ content_type=content_type)
def options(self, url, headers=None, extra_environ=None,
- status=None, expect_errors=False):
+ status=None, expect_errors=False, xhr=False):
"""
Do a OPTIONS request. Similar to :meth:`~webtest.TestApp.get`.
:returns: :class:`webtest.TestResponse` instance.
"""
+ if xhr:
+ headers = self._add_xhr_header(headers)
return self._gen_request('OPTIONS', url, headers=headers,
extra_environ=extra_environ, status=status,
upload_files=None,
- expect_errors=expect_errors,
- )
+ expect_errors=expect_errors)
def head(self, url, headers=None, extra_environ=None,
- status=None, expect_errors=False):
+ status=None, expect_errors=False, xhr=False):
"""
Do a HEAD request. Similar to :meth:`~webtest.TestApp.get`.
:returns: :class:`webtest.TestResponse` instance.
"""
+ if xhr:
+ headers = self._add_xhr_header(headers)
return self._gen_request('HEAD', url, headers=headers,
extra_environ=extra_environ, status=status,
upload_files=None,
- expect_errors=expect_errors,
- )
+ expect_errors=expect_errors)
post_json = utils.json_method('POST')
put_json = utils.json_method('PUT')
@@ -542,9 +562,9 @@ class TestApp(object):
scheme, netloc, path, query, fragment = urlparse.urlsplit(url)
return urlparse.urlunsplit((scheme, netloc, path, query, ""))
- def _gen_request(self, method, url, params=utils.NoDefault, headers=None,
- extra_environ=None, status=None, upload_files=None,
- expect_errors=False, content_type=None):
+ def _gen_request(self, method, url, params=utils.NoDefault,
+ headers=None, extra_environ=None, status=None,
+ upload_files=None, expect_errors=False, content_type=None):
"""
Do a generic request.
"""
@@ -620,3 +640,10 @@ class TestApp(object):
"filename, filecontent) or (fieldname, filename); "
"you gave: %r"
% repr(file_info)[:100])
+
+ @staticmethod
+ def _add_xhr_header(headers):
+ headers = headers or {}
+ # if remove str we will be have an error in lint.middleware
+ headers.update({'X-REQUESTED-WITH': str('XMLHttpRequest')})
+ return headers