diff options
| author | Max Kharandziuk <max.kharandziuk@gmail.com> | 2013-08-13 00:13:50 +0300 |
|---|---|---|
| committer | Max Kharandziuk <max.kharandziuk@gmail.com> | 2013-08-13 00:13:50 +0300 |
| commit | a542c50d09e0544af4fa1ca6937b1925e1b01cdf (patch) | |
| tree | fa56530588370b8e2ae64f49c8b8746e9d777128 | |
| parent | 0cabca0c24dd3b56a4d8b1f912bf78f238fd655c (diff) | |
| download | webtest-a542c50d09e0544af4fa1ca6937b1925e1b01cdf.tar.gz | |
added shortucts for xhr request; test for added code
| -rw-r--r-- | tests/test_app.py | 18 | ||||
| -rw-r--r-- | webtest/app.py | 67 |
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 |
