Fix exact redirects. (#3965)
* Fix exact redirects. Exact redirects depend on the full path being set against, so that you can do things like redirect versions. This was broken in a previous refactor. * Use `self.get_full_path` instead of recreating the path * Avoid undefined `full_path`remove-default-role
parent
0efc5e89a0
commit
6664f352ee
|
@ -143,8 +143,12 @@ class Redirect(models.Model):
|
|||
version_slug=version_slug)
|
||||
return to
|
||||
|
||||
def redirect_exact(self, path, **__):
|
||||
if path == self.from_url:
|
||||
def redirect_exact(self, path, language=None, version_slug=None):
|
||||
full_path = path
|
||||
if language and version_slug:
|
||||
# reconstruct the full path for an exact redirect
|
||||
full_path = self.get_full_path(path, language, version_slug)
|
||||
if full_path == self.from_url:
|
||||
log.debug('Redirecting %s', self)
|
||||
return self.to_url
|
||||
# Handle full sub-level redirects
|
||||
|
|
|
@ -147,6 +147,17 @@ class RedirectAppTests(TestCase):
|
|||
self.assertEqual(
|
||||
r['Location'], 'http://pip.readthedocs.org/en/latest/tutorial/install.html')
|
||||
|
||||
@override_settings(USE_SUBDOMAIN=True)
|
||||
def test_redirect_exact(self):
|
||||
Redirect.objects.create(
|
||||
project=self.pip, redirect_type='exact',
|
||||
from_url='/en/latest/install.html', to_url='/en/latest/tutorial/install.html'
|
||||
)
|
||||
r = self.client.get('/en/latest/install.html', HTTP_HOST='pip.readthedocs.org')
|
||||
self.assertEqual(r.status_code, 302)
|
||||
self.assertEqual(
|
||||
r['Location'], 'http://pip.readthedocs.org/en/latest/tutorial/install.html')
|
||||
|
||||
@override_settings(USE_SUBDOMAIN=True)
|
||||
def test_redirect_keeps_version_number(self):
|
||||
Redirect.objects.create(
|
||||
|
|
Loading…
Reference in New Issue