Fixed #15314 -- Added tests for the static URL pattern function added in r15530 and made sure the **kwargs are passed to the view correctly. Thanks for the report and initial patch, Bruno Renié.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@15552 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Jannis Leidel 2011-02-16 12:50:57 +00:00
parent 24e0b56dcb
commit ada08cd6d8
2 changed files with 27 additions and 9 deletions

View File

@ -22,5 +22,5 @@ def static(prefix, view='django.views.static.serve', **kwargs):
elif '://' in prefix: elif '://' in prefix:
raise ImproperlyConfigured("URL '%s' not allowed as static prefix" % prefix) raise ImproperlyConfigured("URL '%s' not allowed as static prefix" % prefix)
return patterns('', return patterns('',
url(r'^%s(?P<path>.*)$' % re.escape(prefix.lstrip('/')), view, **kwargs), url(r'^%s(?P<path>.*)$' % re.escape(prefix.lstrip('/')), view, kwargs=kwargs),
) )

View File

@ -2,14 +2,18 @@ import mimetypes
from os import path from os import path
from django.conf import settings from django.conf import settings
from django.conf.urls.static import static
from django.test import TestCase from django.test import TestCase
from django.http import HttpResponseNotModified from django.http import HttpResponseNotModified
from regressiontests.views import urls
from regressiontests.views.urls import media_dir from regressiontests.views.urls import media_dir
class StaticTests(TestCase): class StaticTests(TestCase):
"""Tests django views in django/views/static.py""" """Tests django views in django/views/static.py"""
def setUp(self): def setUp(self):
self.prefix = 'site_media'
self.old_debug = settings.DEBUG self.old_debug = settings.DEBUG
settings.DEBUG = True settings.DEBUG = True
@ -20,26 +24,25 @@ class StaticTests(TestCase):
"The static view can serve static media" "The static view can serve static media"
media_files = ['file.txt', 'file.txt.gz'] media_files = ['file.txt', 'file.txt.gz']
for filename in media_files: for filename in media_files:
response = self.client.get('/views/site_media/%s' % filename) response = self.client.get('/views/%s/%s' % (self.prefix, filename))
file_path = path.join(media_dir, filename) file_path = path.join(media_dir, filename)
self.assertEquals(open(file_path).read(), response.content) self.assertEquals(open(file_path).read(), response.content)
self.assertEquals(len(response.content), int(response['Content-Length'])) self.assertEquals(len(response.content), int(response['Content-Length']))
self.assertEquals(mimetypes.guess_type(file_path)[1], response.get('Content-Encoding', None)) self.assertEquals(mimetypes.guess_type(file_path)[1], response.get('Content-Encoding', None))
def test_unknown_mime_type(self): def test_unknown_mime_type(self):
response = self.client.get('/views/site_media/file.unknown') response = self.client.get('/views/%s/file.unknown' % self.prefix)
self.assertEquals('application/octet-stream', response['Content-Type']) self.assertEquals('application/octet-stream', response['Content-Type'])
def test_copes_with_empty_path_component(self): def test_copes_with_empty_path_component(self):
file_name = 'file.txt' file_name = 'file.txt'
response = self.client.get('/views/site_media//%s' % file_name) response = self.client.get('/views/%s//%s' % (self.prefix, file_name))
file = open(path.join(media_dir, file_name)) file = open(path.join(media_dir, file_name))
self.assertEquals(file.read(), response.content) self.assertEquals(file.read(), response.content)
def test_is_modified_since(self): def test_is_modified_since(self):
file_name = 'file.txt' file_name = 'file.txt'
response = self.client.get( response = self.client.get('/views/%s/%s' % (self.prefix, file_name),
'/views/site_media/%s' % file_name,
HTTP_IF_MODIFIED_SINCE='Thu, 1 Jan 1970 00:00:00 GMT') HTTP_IF_MODIFIED_SINCE='Thu, 1 Jan 1970 00:00:00 GMT')
file = open(path.join(media_dir, file_name)) file = open(path.join(media_dir, file_name))
self.assertEquals(file.read(), response.content) self.assertEquals(file.read(), response.content)
@ -47,7 +50,7 @@ class StaticTests(TestCase):
def test_not_modified_since(self): def test_not_modified_since(self):
file_name = 'file.txt' file_name = 'file.txt'
response = self.client.get( response = self.client.get(
'/views/site_media/%s' % file_name, '/views/%s/%s' % (self.prefix, file_name),
HTTP_IF_MODIFIED_SINCE='Mon, 18 Jan 2038 05:14:07 UTC' HTTP_IF_MODIFIED_SINCE='Mon, 18 Jan 2038 05:14:07 UTC'
# This is 24h before max Unix time. Remember to fix Django and # This is 24h before max Unix time. Remember to fix Django and
# update this test well before 2038 :) # update this test well before 2038 :)
@ -62,7 +65,7 @@ class StaticTests(TestCase):
""" """
file_name = 'file.txt' file_name = 'file.txt'
invalid_date = 'Mon, 28 May 999999999999 28:25:26 GMT' invalid_date = 'Mon, 28 May 999999999999 28:25:26 GMT'
response = self.client.get('/views/site_media/%s' % file_name, response = self.client.get('/views/%s/%s' % (self.prefix, file_name),
HTTP_IF_MODIFIED_SINCE=invalid_date) HTTP_IF_MODIFIED_SINCE=invalid_date)
file = open(path.join(media_dir, file_name)) file = open(path.join(media_dir, file_name))
self.assertEquals(file.read(), response.content) self.assertEquals(file.read(), response.content)
@ -77,9 +80,24 @@ class StaticTests(TestCase):
""" """
file_name = 'file.txt' file_name = 'file.txt'
invalid_date = ': 1291108438, Wed, 20 Oct 2010 14:05:00 GMT' invalid_date = ': 1291108438, Wed, 20 Oct 2010 14:05:00 GMT'
response = self.client.get('/views/site_media/%s' % file_name, response = self.client.get('/views/%s/%s' % (self.prefix, file_name),
HTTP_IF_MODIFIED_SINCE=invalid_date) HTTP_IF_MODIFIED_SINCE=invalid_date)
file = open(path.join(media_dir, file_name)) file = open(path.join(media_dir, file_name))
self.assertEquals(file.read(), response.content) self.assertEquals(file.read(), response.content)
self.assertEquals(len(response.content), self.assertEquals(len(response.content),
int(response['Content-Length'])) int(response['Content-Length']))
class StaticHelperTest(StaticTests):
"""
Test case to make sure the static URL pattern helper works as expected
"""
def setUp(self):
super(StaticHelperTest, self).setUp()
self.prefix = 'media'
self._old_views_urlpatterns = urls.urlpatterns
urls.urlpatterns += static('/media/', document_root=media_dir)
def tearDown(self):
super(StaticHelperTest, self).tearDown()
urls.urlpatterns = self._old_views_urlpatterns