django/tests/regressiontests/servers/tests.py

70 lines
2.5 KiB
Python

"""
Tests for django.core.servers.
"""
import os
import django
from django.test import TestCase
from django.core.handlers.wsgi import WSGIHandler
from django.core.servers.basehttp import AdminMediaHandler
from django.conf import settings
class AdminMediaHandlerTests(TestCase):
def setUp(self):
self.admin_media_file_path = os.path.abspath(
os.path.join(django.__path__[0], 'contrib', 'admin', 'media')
)
self.handler = AdminMediaHandler(WSGIHandler())
def test_media_urls(self):
"""
Tests that URLs that look like absolute file paths after the
settings.ADMIN_MEDIA_PREFIX don't turn into absolute file paths.
"""
# Cases that should work on all platforms.
data = (
('%scss/base.css' % settings.ADMIN_MEDIA_PREFIX, ('css', 'base.css')),
)
# Cases that should raise an exception.
bad_data = ()
# Add platform-specific cases.
if os.sep == '/':
data += (
# URL, tuple of relative path parts.
('%s\\css/base.css' % settings.ADMIN_MEDIA_PREFIX, ('\\css', 'base.css')),
)
bad_data += (
'%s/css/base.css' % settings.ADMIN_MEDIA_PREFIX,
'%s///css/base.css' % settings.ADMIN_MEDIA_PREFIX,
'%s../css/base.css' % settings.ADMIN_MEDIA_PREFIX,
)
elif os.sep == '\\':
bad_data += (
'%sC:\css/base.css' % settings.ADMIN_MEDIA_PREFIX,
'%s/\\css/base.css' % settings.ADMIN_MEDIA_PREFIX,
'%s\\css/base.css' % settings.ADMIN_MEDIA_PREFIX,
'%s\\\\css/base.css' % settings.ADMIN_MEDIA_PREFIX
)
for url, path_tuple in data:
try:
output = self.handler.file_path(url)
except ValueError:
self.fail("Got a ValueError exception, but wasn't expecting"
" one. URL was: %s" % url)
rel_path = os.path.join(*path_tuple)
desired = os.path.normcase(
os.path.join(self.admin_media_file_path, rel_path))
self.assertEqual(output, desired,
"Got: %s, Expected: %s, URL was: %s" % (output, desired, url))
for url in bad_data:
try:
output = self.handler.file_path(url)
except ValueError:
continue
self.fail('URL: %s should have caused a ValueError exception.'
% url)