Fixed #16727 -- Added protocol-relative URL support to contenttypes.views.shortcut.

This commit is contained in:
Thomas Sorrel 2014-03-02 21:46:51 +01:00 committed by Baptiste Mispelon
parent 7bbb6958dc
commit 53c576452e
5 changed files with 50 additions and 2 deletions

View file

@ -36,6 +36,27 @@
"date_created": "3000-01-01 21:22:23"
}
},
{
"pk": 1,
"model": "contenttypes_tests.schemeincludedurl",
"fields": {
"url": "http://test_scheme_included_http/"
}
},
{
"pk": 2,
"model": "contenttypes_tests.schemeincludedurl",
"fields": {
"url": "https://test_scheme_included_https/"
}
},
{
"pk": 3,
"model": "contenttypes_tests.schemeincludedurl",
"fields": {
"url": "//test_default_scheme_kept/"
}
},
{
"pk": 1,
"model": "sites.site",

View file

@ -24,3 +24,14 @@ class Article(models.Model):
def __str__(self):
return self.title
@python_2_unicode_compatible
class SchemeIncludedURL(models.Model):
url = models.URLField(max_length=100)
def __str__(self):
return self.url
def get_absolute_url(self):
return self.url

View file

@ -12,7 +12,7 @@ from django.test import TestCase
from django.test.utils import override_settings
from django.utils.encoding import force_str
from .models import Author, Article
from .models import Author, Article, SchemeIncludedURL
class ContentTypesViewsTests(TestCase):
@ -27,6 +27,19 @@ class ContentTypesViewsTests(TestCase):
self.assertRedirects(response, 'http://testserver%s' % obj.get_absolute_url(),
status_code=302, target_status_code=404)
def test_shortcut_with_absolute_url_including_scheme(self):
"""
Can view a shortcut when object's get_absolute_url returns a full URL
the tested URLs are in fixtures/testdata.json :
"http://...", "https://..." and "//..."
"""
for obj in SchemeIncludedURL.objects.all():
short_url = '/shortcut/%s/%s/' % (ContentType.objects.get_for_model(SchemeIncludedURL).id, obj.pk)
response = self.client.get(short_url)
self.assertRedirects(response, obj.get_absolute_url(),
status_code=302,
fetch_redirect_response=False)
def test_shortcut_no_absolute_url(self):
"Shortcuts for an object that has no get_absolute_url method raises 404"
for obj in Article.objects.all():