mirror of
https://github.com/django/django.git
synced 2025-10-24 06:06:09 +00:00
Changed RedirectView.permanent to False per deprecation timeline; refs #21587.
This commit is contained in:
@@ -2,14 +2,11 @@ from __future__ import unicode_literals
|
||||
|
||||
import time
|
||||
import unittest
|
||||
import warnings
|
||||
|
||||
from django.core.exceptions import ImproperlyConfigured
|
||||
from django.core.urlresolvers import resolve
|
||||
from django.http import HttpResponse
|
||||
from django.utils import six
|
||||
from django.utils.deprecation import RemovedInDjango19Warning
|
||||
from django.test import TestCase, RequestFactory, ignore_warnings, override_settings
|
||||
from django.test import TestCase, RequestFactory, override_settings
|
||||
from django.views.generic import View, TemplateView, RedirectView
|
||||
|
||||
from . import views
|
||||
@@ -340,7 +337,6 @@ class TemplateViewTest(TestCase):
|
||||
self.assertIs(match.func.view_class, TemplateView)
|
||||
|
||||
|
||||
@ignore_warnings(category=RemovedInDjango19Warning)
|
||||
@override_settings(ROOT_URLCONF='generic_views.urls')
|
||||
class RedirectViewTest(TestCase):
|
||||
|
||||
@@ -351,14 +347,20 @@ class RedirectViewTest(TestCase):
|
||||
response = RedirectView.as_view()(self.rf.get('/foo/'))
|
||||
self.assertEqual(response.status_code, 410)
|
||||
|
||||
def test_permanent_redirect(self):
|
||||
"Default is a permanent redirect"
|
||||
def test_default_redirect(self):
|
||||
"Default is a temporary redirect"
|
||||
response = RedirectView.as_view(url='/bar/')(self.rf.get('/foo/'))
|
||||
self.assertEqual(response.status_code, 302)
|
||||
self.assertEqual(response.url, '/bar/')
|
||||
|
||||
def test_permanent_redirect(self):
|
||||
"Permanent redirects are an option"
|
||||
response = RedirectView.as_view(url='/bar/', permanent=True)(self.rf.get('/foo/'))
|
||||
self.assertEqual(response.status_code, 301)
|
||||
self.assertEqual(response.url, '/bar/')
|
||||
|
||||
def test_temporary_redirect(self):
|
||||
"Permanent redirects are an option"
|
||||
"Temporary redirects are an option"
|
||||
response = RedirectView.as_view(url='/bar/', permanent=False)(self.rf.get('/foo/'))
|
||||
self.assertEqual(response.status_code, 302)
|
||||
self.assertEqual(response.url, '/bar/')
|
||||
@@ -366,35 +368,35 @@ class RedirectViewTest(TestCase):
|
||||
def test_include_args(self):
|
||||
"GET arguments can be included in the redirected URL"
|
||||
response = RedirectView.as_view(url='/bar/')(self.rf.get('/foo/'))
|
||||
self.assertEqual(response.status_code, 301)
|
||||
self.assertEqual(response.status_code, 302)
|
||||
self.assertEqual(response.url, '/bar/')
|
||||
|
||||
response = RedirectView.as_view(url='/bar/', query_string=True)(self.rf.get('/foo/?pork=spam'))
|
||||
self.assertEqual(response.status_code, 301)
|
||||
self.assertEqual(response.status_code, 302)
|
||||
self.assertEqual(response.url, '/bar/?pork=spam')
|
||||
|
||||
def test_include_urlencoded_args(self):
|
||||
"GET arguments can be URL-encoded when included in the redirected URL"
|
||||
response = RedirectView.as_view(url='/bar/', query_string=True)(
|
||||
self.rf.get('/foo/?unicode=%E2%9C%93'))
|
||||
self.assertEqual(response.status_code, 301)
|
||||
self.assertEqual(response.status_code, 302)
|
||||
self.assertEqual(response.url, '/bar/?unicode=%E2%9C%93')
|
||||
|
||||
def test_parameter_substitution(self):
|
||||
"Redirection URLs can be parameterized"
|
||||
response = RedirectView.as_view(url='/bar/%(object_id)d/')(self.rf.get('/foo/42/'), object_id=42)
|
||||
self.assertEqual(response.status_code, 301)
|
||||
self.assertEqual(response.status_code, 302)
|
||||
self.assertEqual(response.url, '/bar/42/')
|
||||
|
||||
def test_named_url_pattern(self):
|
||||
"Named pattern parameter should reverse to the matching pattern"
|
||||
response = RedirectView.as_view(pattern_name='artist_detail')(self.rf.get('/foo/'), pk=1)
|
||||
self.assertEqual(response.status_code, 301)
|
||||
self.assertEqual(response.status_code, 302)
|
||||
self.assertEqual(response['Location'], '/detail/artist/1/')
|
||||
|
||||
def test_named_url_pattern_using_args(self):
|
||||
response = RedirectView.as_view(pattern_name='artist_detail')(self.rf.get('/foo/'), 1)
|
||||
self.assertEqual(response.status_code, 301)
|
||||
self.assertEqual(response.status_code, 302)
|
||||
self.assertEqual(response['Location'], '/detail/artist/1/')
|
||||
|
||||
def test_wrong_named_url_pattern(self):
|
||||
@@ -403,46 +405,46 @@ class RedirectViewTest(TestCase):
|
||||
self.assertEqual(response.status_code, 410)
|
||||
|
||||
def test_redirect_POST(self):
|
||||
"Default is a permanent redirect"
|
||||
"Default is a temporary redirect"
|
||||
response = RedirectView.as_view(url='/bar/')(self.rf.post('/foo/'))
|
||||
self.assertEqual(response.status_code, 301)
|
||||
self.assertEqual(response.status_code, 302)
|
||||
self.assertEqual(response.url, '/bar/')
|
||||
|
||||
def test_redirect_HEAD(self):
|
||||
"Default is a permanent redirect"
|
||||
"Default is a temporary redirect"
|
||||
response = RedirectView.as_view(url='/bar/')(self.rf.head('/foo/'))
|
||||
self.assertEqual(response.status_code, 301)
|
||||
self.assertEqual(response.status_code, 302)
|
||||
self.assertEqual(response.url, '/bar/')
|
||||
|
||||
def test_redirect_OPTIONS(self):
|
||||
"Default is a permanent redirect"
|
||||
"Default is a temporary redirect"
|
||||
response = RedirectView.as_view(url='/bar/')(self.rf.options('/foo/'))
|
||||
self.assertEqual(response.status_code, 301)
|
||||
self.assertEqual(response.status_code, 302)
|
||||
self.assertEqual(response.url, '/bar/')
|
||||
|
||||
def test_redirect_PUT(self):
|
||||
"Default is a permanent redirect"
|
||||
"Default is a temporary redirect"
|
||||
response = RedirectView.as_view(url='/bar/')(self.rf.put('/foo/'))
|
||||
self.assertEqual(response.status_code, 301)
|
||||
self.assertEqual(response.status_code, 302)
|
||||
self.assertEqual(response.url, '/bar/')
|
||||
|
||||
def test_redirect_PATCH(self):
|
||||
"Default is a permanent redirect"
|
||||
"Default is a temporary redirect"
|
||||
response = RedirectView.as_view(url='/bar/')(self.rf.patch('/foo/'))
|
||||
self.assertEqual(response.status_code, 301)
|
||||
self.assertEqual(response.status_code, 302)
|
||||
self.assertEqual(response.url, '/bar/')
|
||||
|
||||
def test_redirect_DELETE(self):
|
||||
"Default is a permanent redirect"
|
||||
"Default is a temporary redirect"
|
||||
response = RedirectView.as_view(url='/bar/')(self.rf.delete('/foo/'))
|
||||
self.assertEqual(response.status_code, 301)
|
||||
self.assertEqual(response.status_code, 302)
|
||||
self.assertEqual(response.url, '/bar/')
|
||||
|
||||
def test_redirect_when_meta_contains_no_query_string(self):
|
||||
"regression for #16705"
|
||||
# we can't use self.rf.get because it always sets QUERY_STRING
|
||||
response = RedirectView.as_view(url='/bar/')(self.rf.request(PATH_INFO='/foo/'))
|
||||
self.assertEqual(response.status_code, 301)
|
||||
self.assertEqual(response.status_code, 302)
|
||||
|
||||
def test_direct_instantiation(self):
|
||||
"""
|
||||
@@ -454,69 +456,6 @@ class RedirectViewTest(TestCase):
|
||||
self.assertEqual(response.status_code, 410)
|
||||
|
||||
|
||||
@override_settings(ROOT_URLCONF='generic_views.urls')
|
||||
class RedirectViewDeprecationTest(TestCase):
|
||||
|
||||
rf = RequestFactory()
|
||||
|
||||
def test_deprecation_warning_init(self):
|
||||
with warnings.catch_warnings(record=True) as warns:
|
||||
warnings.simplefilter('always')
|
||||
|
||||
view = RedirectView()
|
||||
response = view.dispatch(self.rf.head('/python/'))
|
||||
|
||||
self.assertEqual(response.status_code, 410)
|
||||
self.assertEqual(len(warns), 1)
|
||||
self.assertIs(warns[0].category, RemovedInDjango19Warning)
|
||||
self.assertEqual(
|
||||
six.text_type(warns[0].message),
|
||||
"Default value of 'RedirectView.permanent' will change "
|
||||
"from True to False in Django 1.9. Set an explicit value "
|
||||
"to silence this warning.",
|
||||
)
|
||||
|
||||
def test_deprecation_warning_raised_when_permanent_not_passed(self):
|
||||
with warnings.catch_warnings(record=True) as warns:
|
||||
warnings.simplefilter('always')
|
||||
|
||||
view_function = RedirectView.as_view(url='/bbb/')
|
||||
request = self.rf.request(PATH_INFO='/aaa/')
|
||||
view_function(request)
|
||||
|
||||
self.assertEqual(len(warns), 1)
|
||||
self.assertIs(warns[0].category, RemovedInDjango19Warning)
|
||||
self.assertEqual(
|
||||
six.text_type(warns[0].message),
|
||||
"Default value of 'RedirectView.permanent' will change "
|
||||
"from True to False in Django 1.9. Set an explicit value "
|
||||
"to silence this warning.",
|
||||
)
|
||||
|
||||
def test_no_deprecation_warning_when_permanent_passed(self):
|
||||
with warnings.catch_warnings(record=True) as warns:
|
||||
warnings.simplefilter('always')
|
||||
|
||||
view_function = RedirectView.as_view(url='/bar/', permanent=False)
|
||||
request = self.rf.request(PATH_INFO='/foo/')
|
||||
view_function(request)
|
||||
|
||||
self.assertEqual(len(warns), 0)
|
||||
|
||||
def test_no_deprecation_warning_with_custom_redirectview(self):
|
||||
class CustomRedirectView(RedirectView):
|
||||
permanent = False
|
||||
|
||||
with warnings.catch_warnings(record=True) as warns:
|
||||
warnings.simplefilter('always')
|
||||
|
||||
view_function = CustomRedirectView.as_view(url='/eggs/')
|
||||
request = self.rf.request(PATH_INFO='/spam/')
|
||||
view_function(request)
|
||||
|
||||
self.assertEqual(len(warns), 0)
|
||||
|
||||
|
||||
class GetContextDataTest(unittest.TestCase):
|
||||
|
||||
def test_get_context_data_super(self):
|
||||
|
||||
Reference in New Issue
Block a user