summaryrefslogtreecommitdiff
path: root/tests/regressiontests
diff options
context:
space:
mode:
authorMalcolm Tredinnick <malcolm.tredinnick@gmail.com>2010-09-11 03:13:23 +0000
committerMalcolm Tredinnick <malcolm.tredinnick@gmail.com>2010-09-11 03:13:23 +0000
commitfffe0a00a383f46fdfb8de44d56f8ae2e2ee09de (patch)
tree53d854c5e2221ae8b8b352a9ac673ba7e2b2c81c /tests/regressiontests
parent04f50c1f281e1864576dc6ff5f4d89b562f82b6d (diff)
Add option to redirect_to view to allow passing along the query string
from the original request. Default is current behaviour, which is not to pass the query string (it often won't be appropriate to do so). Thanks to steingrd@ifi.uio.no for the patch and tests. Fixed #9966. git-svn-id: http://code.djangoproject.com/svn/django/trunk@13746 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'tests/regressiontests')
-rw-r--r--tests/regressiontests/views/tests/__init__.py1
-rw-r--r--tests/regressiontests/views/tests/generic/simple.py38
-rw-r--r--tests/regressiontests/views/urls.py10
3 files changed, 48 insertions, 1 deletions
diff --git a/tests/regressiontests/views/tests/__init__.py b/tests/regressiontests/views/tests/__init__.py
index 697968ee52..edd533e175 100644
--- a/tests/regressiontests/views/tests/__init__.py
+++ b/tests/regressiontests/views/tests/__init__.py
@@ -2,6 +2,7 @@ from debug import *
from defaults import *
from generic.create_update import *
from generic.date_based import *
+from generic.simple import *
from i18n import *
from specials import *
from static import *
diff --git a/tests/regressiontests/views/tests/generic/simple.py b/tests/regressiontests/views/tests/generic/simple.py
new file mode 100644
index 0000000000..f94b3da439
--- /dev/null
+++ b/tests/regressiontests/views/tests/generic/simple.py
@@ -0,0 +1,38 @@
+# coding: utf-8
+
+from django.test import TestCase
+
+class RedirectToTest(TestCase):
+ def test_redirect_to_returns_permanent_redirect(self):
+ "simple.redirect_to returns a permanent redirect (301) by default"
+ response = self.client.get('/views/simple/redirect_to/')
+ self.assertEqual(response.status_code, 301)
+ self.assertEqual('http://testserver/views/simple/target/', response['Location'])
+
+ def test_redirect_to_can_return_a_temporary_redirect(self):
+ "simple.redirect_to returns a temporary redirect (302) when explicitely asked to"
+ response = self.client.get('/views/simple/redirect_to_temp/')
+ self.assertEqual(response.status_code, 302)
+ self.assertEqual('http://testserver/views/simple/target/', response['Location'])
+
+ def test_redirect_to_on_empty_url_returns_gone(self):
+ "simple.redirect_to returns resource gone (410) when given a None url"
+ response = self.client.get('/views/simple/redirect_to_none/')
+ self.assertEqual(response.status_code, 410)
+
+ def test_redirect_to_allows_formatted_url_string(self):
+ "simple.redirect_to uses string interpolation on target url for keyword args"
+ response = self.client.get('/views/simple/redirect_to_arg/42/')
+ self.assertEqual(response.status_code, 301)
+ self.assertEqual('http://testserver/views/simple/target_arg/42/', response['Location'])
+
+ def test_redirect_to_allows_query_string_to_be_passed(self):
+ "simple.redirect_to configured with query_string=True passes on any query string"
+ # the default is to not forward the query string
+ response = self.client.get('/views/simple/redirect_to/?param1=foo&param2=bar')
+ self.assertEqual(response.status_code, 301)
+ self.assertEqual('http://testserver/views/simple/target/', response['Location'])
+ # views configured with query_string=True however passes the query string along
+ response = self.client.get('/views/simple/redirect_to_query/?param1=foo&param2=bar')
+ self.assertEqual(response.status_code, 301)
+ self.assertEqual('http://testserver/views/simple/target/?param1=foo&param2=bar', response['Location'])
diff --git a/tests/regressiontests/views/urls.py b/tests/regressiontests/views/urls.py
index f5675d0e28..b42700baeb 100644
--- a/tests/regressiontests/views/urls.py
+++ b/tests/regressiontests/views/urls.py
@@ -77,7 +77,6 @@ urlpatterns += patterns('django.views.generic.date_based',
)
# crud generic views.
-
urlpatterns += patterns('django.views.generic.create_update',
(r'^create_update/member/create/article/$', 'create_object',
dict(login_required=True, model=Article)),
@@ -123,3 +122,12 @@ urlpatterns += patterns('regressiontests.views.views',
url(r'view_exception/(?P<n>\d+)/$', 'view_exception', name='view_exception'),
url(r'template_exception/(?P<n>\d+)/$', 'template_exception', name='template_exception'),
)
+
+# simple generic views.
+urlpatterns += patterns('django.views.generic.simple',
+ (r'^simple/redirect_to/$', 'redirect_to', dict(url='/views/simple/target/')),
+ (r'^simple/redirect_to_temp/$', 'redirect_to', dict(url='/views/simple/target/', permanent=False)),
+ (r'^simple/redirect_to_none/$', 'redirect_to', dict(url=None)),
+ (r'^simple/redirect_to_arg/(?P<id>\d+)/$', 'redirect_to', dict(url='/views/simple/target_arg/%(id)s/')),
+ (r'^simple/redirect_to_query/$', 'redirect_to', dict(url='/views/simple/target/', query_string=True)),
+)