Fix lang_slug URL redirect.

refactor-builder
Tom Offermann 2013-11-16 09:53:15 -08:00
parent 1f5608daeb
commit 7fc0569f14
3 changed files with 19 additions and 1 deletions

View File

@ -1,5 +1,6 @@
from django.conf.urls.defaults import url, patterns
from projects.constants import LANGUAGES_REGEX
from urls import urlpatterns as main_patterns
@ -35,6 +36,10 @@ urlpatterns = patterns(
},
name='docs_detail'),
url(r'^(?P<lang_slug>%s)/$' % LANGUAGES_REGEX,
'core.views.subdomain_handler',
name='version_subdomain_handler'),
url(r'^(?P<version_slug>.*)/$',
'core.views.subdomain_handler',
name='version_subdomain_handler'),

View File

@ -235,7 +235,15 @@ def subdomain_handler(request, lang_slug=None, version_slug=None, filename=''):
# Don't add index.html for htmldir.
if not filename and project.documentation_type != 'sphinx_htmldir':
filename = "index.html"
if version_slug is None:
if version_slug is None and lang_slug:
default_version = project.get_default_version()
url = reverse(serve_docs, kwargs={
'version_slug': default_version,
'lang_slug': lang_slug,
'filename': filename
})
return HttpResponseRedirect(url)
if version_slug is None and lang_slug is None:
# Handle / on subdomain.
default_version = project.get_default_version()
url = reverse(serve_docs, kwargs={

View File

@ -47,6 +47,7 @@ class RedirectTests(TestCase):
def test_proper_url_with_lang_slug_only(self):
r = self.client.get('/docs/pip/en/')
self.assertEqual(r.status_code, 302)
self.assertEqual(r['Location'], 'http://testserver/docs/pip/en/latest/')
def test_proper_url_full(self):
r = self.client.get('/docs/pip/en/latest/')
@ -66,14 +67,17 @@ class RedirectTests(TestCase):
def test_proper_url_with_version_slug_only(self):
r = self.client.get('/docs/pip/latest/')
self.assertEqual(r.status_code, 302)
self.assertEqual(r['Location'], 'http://testserver/docs/pip/en/latest/')
# If slug is neither valid lang nor valid version, it should 404.
# TODO: This should 404 directly, not redirect first
def test_improper_url_with_nonexistent_slug(self):
r = self.client.get('/docs/pip/nonexistent/')
self.assertEqual(r.status_code, 302)
r = self.client.get(r['Location'])
self.assertEqual(r.status_code, 404)
# TODO: This should 404 directly, not redirect first
def test_improper_url_filename_only(self):
r = self.client.get('/docs/pip/test.html')
self.assertEqual(r.status_code, 301)
@ -92,6 +96,7 @@ class RedirectTests(TestCase):
def test_proper_subdomain_with_lang_slug_only(self):
r = self.client.get('/en/', HTTP_HOST='pip.readthedocs.org')
self.assertEqual(r.status_code, 302)
self.assertEqual(r['Location'], 'http://pip.readthedocs.org/en/latest/')
def test_proper_subdomain_and_url(self):
r = self.client.get('/en/latest/', HTTP_HOST='pip.readthedocs.org')