Author: mtredinnick
Date: 2008-10-07 03:47:05 -0500 (Tue, 07 Oct 2008)
New Revision: 9186
Modified:
django/branches/releases/1.0.X/AUTHORS
django/branches/releases/1.0.X/django/test/client.py
django/branches/releases/1.0.X/docs/topics/testing.txt
django/branches/releases/1.0.X/tests/regressiontests/test_client_regress/models.py
django/branches/releases/1.0.X/tests/regressiontests/test_client_regress/urls.py
django/branches/releases/1.0.X/tests/regressiontests/test_client_regress/views.py
Log:
Fixed #5888 -- Added methods to the test client to support HEAD, PUT, DELETE
and OPTIONS support. Thanks Scott Barr and Leah Culver.
Modified: django/branches/releases/1.0.X/AUTHORS
===================================================================
--- django/branches/releases/1.0.X/AUTHORS 2008-10-07 08:26:31 UTC (rev
9185)
+++ django/branches/releases/1.0.X/AUTHORS 2008-10-07 08:47:05 UTC (rev
9186)
@@ -47,6 +47,7 @@
Niran Babalola <[EMAIL PROTECTED]>
Morten Bagai <[EMAIL PROTECTED]>
Mikaƫl Barbero <mikael.barbero nospam at nospam free.fr>
+ Scott Barr <[EMAIL PROTECTED]>
Jiri Barton
Ned Batchelder <http://www.nedbatchelder.com/>
[EMAIL PROTECTED]
Modified: django/branches/releases/1.0.X/django/test/client.py
===================================================================
--- django/branches/releases/1.0.X/django/test/client.py 2008-10-07
08:26:31 UTC (rev 9185)
+++ django/branches/releases/1.0.X/django/test/client.py 2008-10-07
08:47:05 UTC (rev 9186)
@@ -284,6 +284,69 @@
return self.request(**r)
+ def head(self, path, data={}, **extra):
+ """
+ Request a response from the server using HEAD.
+ """
+ r = {
+ 'CONTENT_LENGTH': None,
+ 'CONTENT_TYPE': 'text/html; charset=utf-8',
+ 'PATH_INFO': urllib.unquote(path),
+ 'QUERY_STRING': urlencode(data, doseq=True),
+ 'REQUEST_METHOD': 'HEAD',
+ }
+ r.update(extra)
+
+ return self.request(**r)
+
+ def options(self, path, data={}, **extra):
+ """
+ Request a response from the server using OPTIONS.
+ """
+ r = {
+ 'CONTENT_LENGTH': None,
+ 'CONTENT_TYPE': None,
+ 'PATH_INFO': urllib.unquote(path),
+ 'QUERY_STRING': urlencode(data, doseq=True),
+ 'REQUEST_METHOD': 'OPTIONS',
+ }
+ r.update(extra)
+
+ return self.request(**r)
+
+ def put(self, path, data={}, content_type=MULTIPART_CONTENT, **extra):
+ """
+ Send a resource to the server using PUT.
+ """
+ if content_type is MULTIPART_CONTENT:
+ post_data = encode_multipart(BOUNDARY, data)
+ else:
+ post_data = data
+ r = {
+ 'CONTENT_LENGTH': len(post_data),
+ 'CONTENT_TYPE': content_type,
+ 'PATH_INFO': urllib.unquote(path),
+ 'REQUEST_METHOD': 'PUT',
+ 'wsgi.input': FakePayload(post_data),
+ }
+ r.update(extra)
+
+ return self.request(**r)
+
+ def delete(self, path, data={}, **extra):
+ """
+ Send a DELETE request to the server.
+ """
+ r = {
+ 'CONTENT_LENGTH': None,
+ 'CONTENT_TYPE': None,
+ 'PATH_INFO': urllib.unquote(path),
+ 'REQUEST_METHOD': 'DELETE',
+ }
+ r.update(extra)
+
+ return self.request(**r)
+
def login(self, **credentials):
"""
Sets the Client to appear as if it has successfully logged into a site.
Modified: django/branches/releases/1.0.X/docs/topics/testing.txt
===================================================================
--- django/branches/releases/1.0.X/docs/topics/testing.txt 2008-10-07
08:26:31 UTC (rev 9185)
+++ django/branches/releases/1.0.X/docs/topics/testing.txt 2008-10-07
08:47:05 UTC (rev 9186)
@@ -544,6 +544,28 @@
Note that you should manually close the file after it has been provided
to ``post()``.
+ .. method:: Client.head(path, data={})
+
+ Makes a HEAD request on the provided ``path`` and returns a
``Response``
+ object. Useful for testing RESTful interfaces. Acts just like
+ :meth:`Client.get` except it does not return a message body.
+
+ .. method:: Client.options(path, data={})
+
+ Makes an OPTIONS request on the provided ``path`` and returns a
+ ``Response`` object. Useful for testing RESTful interfaces.
+
+ .. method:: Client.put(path, data={}, content_type=MULTIPART_CONTENT)
+
+ Makes an PUT request on the provided ``path`` and returns a
+ ``Response`` object. Useful for testing RESTful interfaces. Acts just
+ like :meth:`Client.put` except with the PUT request method.
+
+ .. method:: Client.delete(path)
+
+ Makes an DELETE request on the provided ``path`` and returns a
+ ``Response`` object. Useful for testing RESTful interfaces.
+
.. method:: Client.login(**credentials)
.. versionadded:: 1.0
Modified:
django/branches/releases/1.0.X/tests/regressiontests/test_client_regress/models.py
===================================================================
---
django/branches/releases/1.0.X/tests/regressiontests/test_client_regress/models.py
2008-10-07 08:26:31 UTC (rev 9185)
+++
django/branches/releases/1.0.X/tests/regressiontests/test_client_regress/models.py
2008-10-07 08:47:05 UTC (rev 9186)
@@ -382,4 +382,42 @@
response = self.client.get('/test_client_regress/check_session/')
self.assertEqual(response.status_code, 200)
self.assertEqual(response.content, 'YES')
-
\ No newline at end of file
+
+class RequestMethodTests(TestCase):
+ def test_get(self):
+ "Request a view via request method GET"
+ response = self.client.get('/test_client_regress/request_methods/')
+ self.assertEqual(response.status_code, 200)
+ self.assertEqual(response.content, 'request method: GET')
+
+ def test_post(self):
+ "Request a view via request method POST"
+ response = self.client.post('/test_client_regress/request_methods/')
+ self.assertEqual(response.status_code, 200)
+ self.assertEqual(response.content, 'request method: POST')
+
+ def test_head(self):
+ "Request a view via request method HEAD"
+ response = self.client.head('/test_client_regress/request_methods/')
+ self.assertEqual(response.status_code, 200)
+ # A HEAD request doesn't return any content.
+ self.assertNotEqual(response.content, 'request method: HEAD')
+ self.assertEqual(response.content, '')
+
+ def test_options(self):
+ "Request a view via request method OPTIONS"
+ response = self.client.options('/test_client_regress/request_methods/')
+ self.assertEqual(response.status_code, 200)
+ self.assertEqual(response.content, 'request method: OPTIONS')
+
+ def test_put(self):
+ "Request a view via request method PUT"
+ response = self.client.put('/test_client_regress/request_methods/')
+ self.assertEqual(response.status_code, 200)
+ self.assertEqual(response.content, 'request method: PUT')
+
+ def test_delete(self):
+ "Request a view via request method DELETE"
+ response = self.client.delete('/test_client_regress/request_methods/')
+ self.assertEqual(response.status_code, 200)
+ self.assertEqual(response.content, 'request method: DELETE')
Modified:
django/branches/releases/1.0.X/tests/regressiontests/test_client_regress/urls.py
===================================================================
---
django/branches/releases/1.0.X/tests/regressiontests/test_client_regress/urls.py
2008-10-07 08:26:31 UTC (rev 9185)
+++
django/branches/releases/1.0.X/tests/regressiontests/test_client_regress/urls.py
2008-10-07 08:47:05 UTC (rev 9186)
@@ -9,4 +9,5 @@
(r'^login_protected_redirect_view/$', views.login_protected_redirect_view),
(r'^set_session/$', views.set_session_view),
(r'^check_session/$', views.check_session_view),
+ (r'^request_methods/$', views.request_methods_view),
)
Modified:
django/branches/releases/1.0.X/tests/regressiontests/test_client_regress/views.py
===================================================================
---
django/branches/releases/1.0.X/tests/regressiontests/test_client_regress/views.py
2008-10-07 08:26:31 UTC (rev 9185)
+++
django/branches/releases/1.0.X/tests/regressiontests/test_client_regress/views.py
2008-10-07 08:47:05 UTC (rev 9186)
@@ -43,3 +43,7 @@
def check_session_view(request):
"A view that reads a session variable"
return HttpResponse(request.session.get('session_var', 'NO'))
+
+def request_methods_view(request):
+ "A view that responds with the request method"
+ return HttpResponse('request method: %s' % request.method)
\ No newline at end of file
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/django-updates?hl=en
-~----------~----~----~----~------~----~------~--~---