Skip to content

Commit

Permalink
Fixed #15314 -- Added tests for the static URL pattern function added…
Browse files Browse the repository at this point in the history
… 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
  • Loading branch information
jezdez committed Feb 16, 2011
1 parent 24e0b56 commit ada08cd
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 9 deletions.
2 changes: 1 addition & 1 deletion django/conf/urls/static.py
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -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),
) )
34 changes: 26 additions & 8 deletions tests/regressiontests/views/tests/static.py
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -2,14 +2,18 @@
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


Expand All @@ -20,34 +24,33 @@ def test_serve(self):
"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)


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 :)
Expand All @@ -62,7 +65,7 @@ def test_invalid_if_modified_since(self):
""" """
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)
Expand All @@ -77,9 +80,24 @@ def test_invalid_if_modified_since2(self):
""" """
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

0 comments on commit ada08cd

Please sign in to comment.