Fixed #26428 -- Added support for relative path redirects in assertRedirects().
Thanks Trac alias master for the report and review.
This commit is contained in:
parent
55c843f2ef
commit
d2569f89f2
|
@ -41,7 +41,7 @@ from django.utils.decorators import classproperty
|
|||
from django.utils.deprecation import RemovedInDjango20Warning
|
||||
from django.utils.encoding import force_text
|
||||
from django.utils.six.moves.urllib.parse import (
|
||||
unquote, urlparse, urlsplit, urlunsplit,
|
||||
unquote, urljoin, urlparse, urlsplit, urlunsplit,
|
||||
)
|
||||
from django.utils.six.moves.urllib.request import url2pathname
|
||||
from django.views.static import serve
|
||||
|
@ -291,6 +291,11 @@ class SimpleTestCase(unittest.TestCase):
|
|||
url = response.url
|
||||
scheme, netloc, path, query, fragment = urlsplit(url)
|
||||
|
||||
# Prepend the request path to handle relative path redirects.
|
||||
if not path.startswith('/'):
|
||||
url = urljoin(response.request['PATH_INFO'], url)
|
||||
path = urljoin(response.request['PATH_INFO'], path)
|
||||
|
||||
if fetch_redirect_response:
|
||||
redirect_response = response.client.get(path, QueryDict(query),
|
||||
secure=(scheme == 'https'))
|
||||
|
|
|
@ -9,4 +9,6 @@ Django 1.9.6 fixes several bugs in 1.9.5.
|
|||
Bugfixes
|
||||
========
|
||||
|
||||
* ...
|
||||
* Added support for relative path redirects to
|
||||
``SimpleTestCase.assertRedirects()`` because Django 1.9 no longer converts
|
||||
redirects to absolute URIs (:ticket:`26428`).
|
||||
|
|
|
@ -623,6 +623,14 @@ class ClientTest(TestCase):
|
|||
# Check some response details
|
||||
self.assertContains(response, 'This is a test')
|
||||
|
||||
def test_relative_redirect(self):
|
||||
response = self.client.get('/accounts/')
|
||||
self.assertRedirects(response, '/accounts/login/')
|
||||
|
||||
def test_relative_redirect_no_trailing_slash(self):
|
||||
response = self.client.get('/accounts/no_trailing_slash')
|
||||
self.assertRedirects(response, '/accounts/login/')
|
||||
|
||||
def test_mass_mail_sending(self):
|
||||
"Test that mass mail is redirected to a dummy outbox during test setup"
|
||||
|
||||
|
|
|
@ -34,6 +34,8 @@ urlpatterns = [
|
|||
url(r'^nesting_exception_view/$', views.nesting_exception_view),
|
||||
url(r'^django_project_redirect/$', views.django_project_redirect),
|
||||
|
||||
url(r'^accounts/$', RedirectView.as_view(url='login/')),
|
||||
url(r'^accounts/no_trailing_slash$', RedirectView.as_view(url='login/')),
|
||||
url(r'^accounts/login/$', auth_views.login, {'template_name': 'login.html'}),
|
||||
url(r'^accounts/logout/$', auth_views.logout),
|
||||
]
|
||||
|
|
Loading…
Reference in New Issue