Kaydet (Commit) 2607fa90 authored tarafından Marc Tamlyn's avatar Marc Tamlyn

Fixed #21774 -- Isolate all test urls from eachother.

This (nearly) completes the work to isolate all the test modules from
each other. This is now more important as importing models from another
module will case PendingDeprecationWarnings if those modules are not in
INSTALLED_APPS. The only remaining obvious dependencies are:

- d.c.auth depends on d.c.admin (because of the is_admin flag to some
  views), but this is not so important and d.c.admin is in
  always_installed_apps
- test_client_regress depends on test_client. Eventually these should
  become a single module, as the split serves no useful purpose.
üst ac8d0a48
......@@ -17,6 +17,7 @@ from django.utils.http import urlsafe_base64_encode
PASSWORD_HASHERS=('django.contrib.auth.hashers.SHA1PasswordHasher',),
)
class AuthTemplateTests(TestCase):
urls = 'django.contrib.auth.tests.urls'
def test_titles(self):
rf = RequestFactory()
......
from django.conf.urls import patterns, url
from django.conf.urls import patterns, url, include
from django.contrib import admin
from django.contrib.auth import context_processors
from django.contrib.auth.forms import AuthenticationForm
from django.contrib.auth.urls import urlpatterns
......@@ -98,4 +99,7 @@ urlpatterns = urlpatterns + patterns('',
(r'^auth_processor_messages/$', auth_processor_messages),
(r'^custom_request_auth_login/$', custom_request_auth_login),
url(r'^userpage/(.+)/$', userpage, name="userpage"),
# This line is only required to render the password reset with is_admin=True
(r'^admin/', include(admin.site.urls)),
)
......@@ -16,6 +16,7 @@ class AdminCustomUrlsTest(TestCase):
* The ModelAdmin for Action customizes the add_view URL, it's
'<app name>/<model name>/!add/'
"""
urls = 'admin_custom_urls.urls'
fixtures = ['users.json', 'actions.json']
def setUp(self):
......@@ -28,7 +29,7 @@ class AdminCustomUrlsTest(TestCase):
"""
Ensure GET on the add_view works.
"""
response = self.client.get('/custom_urls/admin/admin_custom_urls/action/!add/')
response = self.client.get('/admin/admin_custom_urls/action/!add/')
self.assertIsInstance(response, TemplateResponse)
self.assertEqual(response.status_code, 200)
......@@ -37,7 +38,7 @@ class AdminCustomUrlsTest(TestCase):
Ensure GET on the add_view plus specifying a field value in the query
string works.
"""
response = self.client.get('/custom_urls/admin/admin_custom_urls/action/!add/', {'name': 'My Action'})
response = self.client.get('/admin/admin_custom_urls/action/!add/', {'name': 'My Action'})
self.assertEqual(response.status_code, 200)
self.assertContains(response, 'value="My Action"')
......@@ -50,7 +51,7 @@ class AdminCustomUrlsTest(TestCase):
"name": 'Action added through a popup',
"description": "Description of added action",
}
response = self.client.post('/custom_urls/admin/admin_custom_urls/action/!add/', post_data)
response = self.client.post('/admin/admin_custom_urls/action/!add/', post_data)
self.assertEqual(response.status_code, 200)
self.assertContains(response, 'dismissAddAnotherPopup')
self.assertContains(response, 'Action added through a popup')
......@@ -61,7 +62,7 @@ class AdminCustomUrlsTest(TestCase):
"""
# Should get the change_view for model instance with PK 'add', not show
# the add_view
response = self.client.get('/custom_urls/admin/admin_custom_urls/action/add/')
response = self.client.get('/admin/admin_custom_urls/action/add/')
self.assertEqual(response.status_code, 200)
self.assertContains(response, 'Change action')
......@@ -84,6 +85,7 @@ class AdminCustomUrlsTest(TestCase):
@override_settings(PASSWORD_HASHERS=('django.contrib.auth.hashers.SHA1PasswordHasher',))
class CustomRedirects(TestCase):
urls = 'admin_custom_urls.urls'
fixtures = ['users.json', 'actions.json']
def setUp(self):
......
......@@ -1542,6 +1542,7 @@ class ArgumentOrder(AdminScriptTestCase):
class StartProject(LiveServerTestCase, AdminScriptTestCase):
urls = 'admin_scripts.urls'
available_apps = [
'admin_scripts',
'django.contrib.auth',
......@@ -1649,7 +1650,7 @@ class StartProject(LiveServerTestCase, AdminScriptTestCase):
def test_custom_project_template_from_tarball_by_url(self):
"Make sure the startproject management command is able to use a different project template from a tarball via a url"
template_url = '%s/admin_scripts/custom_templates/project_template.tgz' % self.live_server_url
template_url = '%s/custom_templates/project_template.tgz' % self.live_server_url
args = ['startproject', '--template', template_url, 'urltestproject']
testproject_dir = os.path.join(test_dir, 'urltestproject')
......@@ -1662,7 +1663,7 @@ class StartProject(LiveServerTestCase, AdminScriptTestCase):
def test_project_template_tarball_url(self):
"Startproject management command handles project template tar/zip balls from non-canonical urls"
template_url = '%s/admin_scripts/custom_templates/project_template.tgz/' % self.live_server_url
template_url = '%s/custom_templates/project_template.tgz/' % self.live_server_url
args = ['startproject', '--template', template_url, 'urltestproject']
testproject_dir = os.path.join(test_dir, 'urltestproject')
......
......@@ -184,13 +184,14 @@ class AdminFormfieldForDBFieldTests(TestCase):
@override_settings(PASSWORD_HASHERS=('django.contrib.auth.hashers.SHA1PasswordHasher',))
class AdminFormfieldForDBFieldWithRequestTests(DjangoTestCase):
fixtures = ["admin-widgets-users.xml"]
urls = 'admin_widgets.urls'
def testFilterChoicesByRequestUser(self):
"""
Ensure the user can only see their own cars in the foreign key dropdown.
"""
self.client.login(username="super", password="secret")
response = self.client.get("/widget_admin/admin_widgets/cartire/add/")
response = self.client.get("/admin_widgets/cartire/add/")
self.assertNotContains(response, "BMW M3")
self.assertContains(response, "Volkswagon Passat")
......@@ -198,7 +199,7 @@ class AdminFormfieldForDBFieldWithRequestTests(DjangoTestCase):
@override_settings(PASSWORD_HASHERS=('django.contrib.auth.hashers.SHA1PasswordHasher',))
class AdminForeignKeyWidgetChangeList(DjangoTestCase):
fixtures = ["admin-widgets-users.xml"]
admin_root = '/widget_admin'
urls = 'admin_widgets.urls'
def setUp(self):
self.client.login(username="super", password="secret")
......@@ -207,14 +208,14 @@ class AdminForeignKeyWidgetChangeList(DjangoTestCase):
self.client.logout()
def test_changelist_foreignkey(self):
response = self.client.get('%s/admin_widgets/car/' % self.admin_root)
self.assertContains(response, '%s/auth/user/add/' % self.admin_root)
response = self.client.get('/admin_widgets/car/')
self.assertContains(response, '/auth/user/add/')
@override_settings(PASSWORD_HASHERS=('django.contrib.auth.hashers.SHA1PasswordHasher',))
class AdminForeignKeyRawIdWidget(DjangoTestCase):
fixtures = ["admin-widgets-users.xml"]
admin_root = '/widget_admin'
urls = 'admin_widgets.urls'
def setUp(self):
self.client.login(username="super", password="secret")
......@@ -231,8 +232,7 @@ class AdminForeignKeyRawIdWidget(DjangoTestCase):
}
# Try posting with a non-existent pk in a raw id field: this
# should result in an error message, not a server exception.
response = self.client.post('%s/admin_widgets/event/add/' % self.admin_root,
post_data)
response = self.client.post('/admin_widgets/event/add/', post_data)
self.assertContains(response,
'Select a valid choice. That choice is not one of the available choices.')
......@@ -240,7 +240,7 @@ class AdminForeignKeyRawIdWidget(DjangoTestCase):
for test_str in ('Iñtërnâtiônàlizætiøn', "1234'", -1234):
# This should result in an error message, not a server exception.
response = self.client.post('%s/admin_widgets/event/add/' % self.admin_root,
response = self.client.post('/admin_widgets/event/add/',
{"main_band": test_str})
self.assertContains(response,
......@@ -392,6 +392,8 @@ class AdminFileWidgetTest(DjangoTestCase):
class ForeignKeyRawIdWidgetTest(DjangoTestCase):
urls = 'admin_widgets.urls'
def test_render(self):
band = models.Band.objects.create(name='Linkin Park')
band.album_set.create(
......@@ -402,7 +404,7 @@ class ForeignKeyRawIdWidgetTest(DjangoTestCase):
w = widgets.ForeignKeyRawIdWidget(rel, widget_admin_site)
self.assertHTMLEqual(
w.render('test', band.pk, attrs={}),
'<input type="text" name="test" value="%(bandpk)s" class="vForeignKeyRawIdAdminField" /><a href="/widget_admin/admin_widgets/band/?_to_field=id" class="related-lookup" id="lookup_id_test" onclick="return showRelatedObjectLookupPopup(this);"> <img src="%(ADMIN_STATIC_PREFIX)simg/selector-search.gif" width="16" height="16" alt="Lookup" /></a>&nbsp;<strong>Linkin Park</strong>' % dict(admin_static_prefix(), bandpk=band.pk)
'<input type="text" name="test" value="%(bandpk)s" class="vForeignKeyRawIdAdminField" /><a href="/admin_widgets/band/?_to_field=id" class="related-lookup" id="lookup_id_test" onclick="return showRelatedObjectLookupPopup(this);"> <img src="%(ADMIN_STATIC_PREFIX)simg/selector-search.gif" width="16" height="16" alt="Lookup" /></a>&nbsp;<strong>Linkin Park</strong>' % dict(admin_static_prefix(), bandpk=band.pk)
)
def test_relations_to_non_primary_key(self):
......@@ -417,7 +419,7 @@ class ForeignKeyRawIdWidgetTest(DjangoTestCase):
w = widgets.ForeignKeyRawIdWidget(rel, widget_admin_site)
self.assertHTMLEqual(
w.render('test', core.parent_id, attrs={}),
'<input type="text" name="test" value="86" class="vForeignKeyRawIdAdminField" /><a href="/widget_admin/admin_widgets/inventory/?_to_field=barcode" class="related-lookup" id="lookup_id_test" onclick="return showRelatedObjectLookupPopup(this);"> <img src="%(ADMIN_STATIC_PREFIX)simg/selector-search.gif" width="16" height="16" alt="Lookup" /></a>&nbsp;<strong>Apple</strong>' % admin_static_prefix()
'<input type="text" name="test" value="86" class="vForeignKeyRawIdAdminField" /><a href="/admin_widgets/inventory/?_to_field=barcode" class="related-lookup" id="lookup_id_test" onclick="return showRelatedObjectLookupPopup(this);"> <img src="%(ADMIN_STATIC_PREFIX)simg/selector-search.gif" width="16" height="16" alt="Lookup" /></a>&nbsp;<strong>Apple</strong>' % admin_static_prefix()
)
def test_fk_related_model_not_in_admin(self):
......@@ -459,11 +461,13 @@ class ForeignKeyRawIdWidgetTest(DjangoTestCase):
)
self.assertHTMLEqual(
w.render('test', child_of_hidden.parent_id, attrs={}),
'<input type="text" name="test" value="93" class="vForeignKeyRawIdAdminField" /><a href="/widget_admin/admin_widgets/inventory/?_to_field=barcode" class="related-lookup" id="lookup_id_test" onclick="return showRelatedObjectLookupPopup(this);"> <img src="%(ADMIN_STATIC_PREFIX)simg/selector-search.gif" width="16" height="16" alt="Lookup" /></a>&nbsp;<strong>Hidden</strong>' % admin_static_prefix()
'<input type="text" name="test" value="93" class="vForeignKeyRawIdAdminField" /><a href="/admin_widgets/inventory/?_to_field=barcode" class="related-lookup" id="lookup_id_test" onclick="return showRelatedObjectLookupPopup(this);"> <img src="%(ADMIN_STATIC_PREFIX)simg/selector-search.gif" width="16" height="16" alt="Lookup" /></a>&nbsp;<strong>Hidden</strong>' % admin_static_prefix()
)
class ManyToManyRawIdWidgetTest(DjangoTestCase):
urls = 'admin_widgets.urls'
def test_render(self):
band = models.Band.objects.create(name='Linkin Park')
......@@ -475,12 +479,12 @@ class ManyToManyRawIdWidgetTest(DjangoTestCase):
w = widgets.ManyToManyRawIdWidget(rel, widget_admin_site)
self.assertHTMLEqual(
w.render('test', [m1.pk, m2.pk], attrs={}),
'<input type="text" name="test" value="%(m1pk)s,%(m2pk)s" class="vManyToManyRawIdAdminField" /><a href="/widget_admin/admin_widgets/member/" class="related-lookup" id="lookup_id_test" onclick="return showRelatedObjectLookupPopup(this);"> <img src="/static/admin/img/selector-search.gif" width="16" height="16" alt="Lookup" /></a>' % dict(admin_static_prefix(), m1pk=m1.pk, m2pk=m2.pk)
'<input type="text" name="test" value="%(m1pk)s,%(m2pk)s" class="vManyToManyRawIdAdminField" /><a href="/admin_widgets/member/" class="related-lookup" id="lookup_id_test" onclick="return showRelatedObjectLookupPopup(this);"> <img src="/static/admin/img/selector-search.gif" width="16" height="16" alt="Lookup" /></a>' % dict(admin_static_prefix(), m1pk=m1.pk, m2pk=m2.pk)
)
self.assertHTMLEqual(
w.render('test', [m1.pk]),
'<input type="text" name="test" value="%(m1pk)s" class="vManyToManyRawIdAdminField" /><a href="/widget_admin/admin_widgets/member/" class="related-lookup" id="lookup_id_test" onclick="return showRelatedObjectLookupPopup(this);"> <img src="%(ADMIN_STATIC_PREFIX)simg/selector-search.gif" width="16" height="16" alt="Lookup" /></a>' % dict(admin_static_prefix(), m1pk=m1.pk)
'<input type="text" name="test" value="%(m1pk)s" class="vManyToManyRawIdAdminField" /><a href="/admin_widgets/member/" class="related-lookup" id="lookup_id_test" onclick="return showRelatedObjectLookupPopup(this);"> <img src="%(ADMIN_STATIC_PREFIX)simg/selector-search.gif" width="16" height="16" alt="Lookup" /></a>' % dict(admin_static_prefix(), m1pk=m1.pk)
)
def test_m2m_related_model_not_in_admin(self):
......
......@@ -12,7 +12,7 @@ class Author(models.Model):
return self.name
def get_absolute_url(self):
return '/views/authors/%s/' % self.id
return '/authors/%s/' % self.id
@python_2_unicode_compatible
......
......@@ -29,6 +29,8 @@ UPLOAD_TO = os.path.join(MEDIA_ROOT, 'test_upload')
@override_settings(MEDIA_ROOT=MEDIA_ROOT)
class FileUploadTests(TestCase):
urls = 'file_uploads.urls'
@classmethod
def setUpClass(cls):
if not os.path.isdir(MEDIA_ROOT):
......@@ -44,7 +46,7 @@ class FileUploadTests(TestCase):
'name': 'Ringo',
'file_field': fp,
}
response = self.client.post('/file_uploads/upload/', post_data)
response = self.client.post('/upload/', post_data)
self.assertEqual(response.status_code, 200)
def test_large_upload(self):
......@@ -71,7 +73,7 @@ class FileUploadTests(TestCase):
except AttributeError:
post_data[key + '_hash'] = hashlib.sha1(force_bytes(post_data[key])).hexdigest()
response = self.client.post('/file_uploads/verify/', post_data)
response = self.client.post('/verify/', post_data)
self.assertEqual(response.status_code, 200)
......@@ -87,7 +89,7 @@ class FileUploadTests(TestCase):
r = {
'CONTENT_LENGTH': len(payload),
'CONTENT_TYPE': client.MULTIPART_CONTENT,
'PATH_INFO': "/file_uploads/echo_content/",
'PATH_INFO': "/echo_content/",
'REQUEST_METHOD': 'POST',
'wsgi.input': payload,
}
......@@ -115,7 +117,7 @@ class FileUploadTests(TestCase):
'file_unicode': file1,
}
response = self.client.post('/file_uploads/unicode_name/', post_data)
response = self.client.post('/unicode_name/', post_data)
self.assertEqual(response.status_code, 200)
......@@ -154,7 +156,7 @@ class FileUploadTests(TestCase):
r = {
'CONTENT_LENGTH': len(payload),
'CONTENT_TYPE': client.MULTIPART_CONTENT,
'PATH_INFO': "/file_uploads/echo/",
'PATH_INFO': "/echo/",
'REQUEST_METHOD': 'POST',
'wsgi.input': payload,
}
......@@ -191,7 +193,7 @@ class FileUploadTests(TestCase):
r = {
'CONTENT_LENGTH': len(payload),
'CONTENT_TYPE': client.MULTIPART_CONTENT,
'PATH_INFO': "/file_uploads/echo/",
'PATH_INFO': "/echo/",
'REQUEST_METHOD': 'POST',
'wsgi.input': payload,
}
......@@ -215,7 +217,7 @@ class FileUploadTests(TestCase):
simple_file.seek(0)
simple_file.content_type = 'text/plain; test-key=test_value'
response = self.client.post('/file_uploads/echo_content_type_extra/', {
response = self.client.post('/echo_content_type_extra/', {
'no_content_type': no_content_type,
'simple_file': simple_file,
})
......@@ -242,7 +244,7 @@ class FileUploadTests(TestCase):
r = {
'CONTENT_LENGTH': len(payload),
'CONTENT_TYPE': client.MULTIPART_CONTENT,
'PATH_INFO': '/file_uploads/echo/',
'PATH_INFO': '/echo/',
'REQUEST_METHOD': 'POST',
'wsgi.input': payload,
}
......@@ -257,7 +259,7 @@ class FileUploadTests(TestCase):
r = {
'CONTENT_LENGTH': 0,
'CONTENT_TYPE': client.MULTIPART_CONTENT,
'PATH_INFO': '/file_uploads/echo/',
'PATH_INFO': '/echo/',
'REQUEST_METHOD': 'POST',
'wsgi.input': client.FakePayload(b''),
}
......@@ -276,12 +278,12 @@ class FileUploadTests(TestCase):
bigfile.seek(0)
# Small file posting should work.
response = self.client.post('/file_uploads/quota/', {'f': smallfile})
response = self.client.post('/quota/', {'f': smallfile})
got = json.loads(response.content.decode('utf-8'))
self.assertTrue('f' in got)
# Large files don't go through.
response = self.client.post("/file_uploads/quota/", {'f': bigfile})
response = self.client.post("/quota/", {'f': bigfile})
got = json.loads(response.content.decode('utf-8'))
self.assertTrue('f' not in got)
......@@ -294,7 +296,7 @@ class FileUploadTests(TestCase):
self.assertRaises(
AttributeError,
self.client.post,
'/file_uploads/quota/broken/',
'/quota/broken/',
{'f': f}
)
......@@ -311,7 +313,7 @@ class FileUploadTests(TestCase):
file2a.write(b'a' * (5 * 2 ** 20))
file2a.seek(0)
response = self.client.post('/file_uploads/getlist_count/', {
response = self.client.post('/getlist_count/', {
'file1': file1,
'field1': 'test',
'field2': 'test3',
......@@ -357,7 +359,7 @@ class FileUploadTests(TestCase):
'file_field': fp,
}
try:
self.client.post('/file_uploads/upload_errors/', post_data)
self.client.post('/upload_errors/', post_data)
except reference_error.__class__ as err:
self.assertFalse(
str(err) == str(reference_error),
......@@ -386,7 +388,7 @@ class FileUploadTests(TestCase):
'--%(boundary)s--\r\n',
]
response = self.client.post(
'/file_uploads/filename_case/',
'/filename_case/',
'\r\n'.join(post_data) % vars,
'multipart/form-data; boundary=%(boundary)s' % vars
)
......
from django.conf.urls import patterns
urlpatterns = patterns('',
(r'^middleware/customurlconf/noslash$', 'view'),
(r'^middleware/customurlconf/slash/$', 'view'),
(r'^middleware/customurlconf/needsquoting#/$', 'view'),
(r'^customurlconf/noslash$', 'view'),
(r'^customurlconf/slash/$', 'view'),
(r'^customurlconf/needsquoting#/$', 'view'),
)
......@@ -28,6 +28,7 @@ from .models import Band
class CommonMiddlewareTest(TestCase):
urls = 'middleware.urls'
def _get_request(self, path):
request = HttpRequest()
......@@ -35,7 +36,7 @@ class CommonMiddlewareTest(TestCase):
'SERVER_NAME': 'testserver',
'SERVER_PORT': 80,
}
request.path = request.path_info = "/middleware/%s" % path
request.path = request.path_info = "/%s" % path
return request
@override_settings(APPEND_SLASH=True)
......@@ -70,7 +71,7 @@ class CommonMiddlewareTest(TestCase):
request = self._get_request('slash')
r = CommonMiddleware().process_request(request)
self.assertEqual(r.status_code, 301)
self.assertEqual(r.url, 'http://testserver/middleware/slash/')
self.assertEqual(r.url, 'http://testserver/slash/')
@override_settings(APPEND_SLASH=True, DEBUG=True)
def test_append_slash_no_redirect_on_POST_in_DEBUG(self):
......@@ -103,7 +104,7 @@ class CommonMiddlewareTest(TestCase):
self.assertEqual(r.status_code, 301)
self.assertEqual(
r.url,
'http://testserver/middleware/needsquoting%23/')
'http://testserver/needsquoting%23/')
@override_settings(APPEND_SLASH=False, PREPEND_WWW=True)
def test_prepend_www(self):
......@@ -112,7 +113,7 @@ class CommonMiddlewareTest(TestCase):
self.assertEqual(r.status_code, 301)
self.assertEqual(
r.url,
'http://www.testserver/middleware/path/')
'http://www.testserver/path/')
@override_settings(APPEND_SLASH=True, PREPEND_WWW=True)
def test_prepend_www_append_slash_have_slash(self):
......@@ -120,7 +121,7 @@ class CommonMiddlewareTest(TestCase):
r = CommonMiddleware().process_request(request)
self.assertEqual(r.status_code, 301)
self.assertEqual(r.url,
'http://www.testserver/middleware/slash/')
'http://www.testserver/slash/')
@override_settings(APPEND_SLASH=True, PREPEND_WWW=True)
def test_prepend_www_append_slash_slashless(self):
......@@ -128,7 +129,7 @@ class CommonMiddlewareTest(TestCase):
r = CommonMiddleware().process_request(request)
self.assertEqual(r.status_code, 301)
self.assertEqual(r.url,
'http://www.testserver/middleware/slash/')
'http://www.testserver/slash/')
# The following tests examine expected behavior given a custom urlconf that
# overrides the default one through the request object.
......@@ -171,7 +172,7 @@ class CommonMiddlewareTest(TestCase):
self.assertFalse(r is None,
"CommonMiddlware failed to return APPEND_SLASH redirect using request.urlconf")
self.assertEqual(r.status_code, 301)
self.assertEqual(r.url, 'http://testserver/middleware/customurlconf/slash/')
self.assertEqual(r.url, 'http://testserver/customurlconf/slash/')
@override_settings(APPEND_SLASH=True, DEBUG=True)
def test_append_slash_no_redirect_on_POST_in_DEBUG_custom_urlconf(self):
......@@ -209,7 +210,7 @@ class CommonMiddlewareTest(TestCase):
self.assertEqual(r.status_code, 301)
self.assertEqual(
r.url,
'http://testserver/middleware/customurlconf/needsquoting%23/')
'http://testserver/customurlconf/needsquoting%23/')
@override_settings(APPEND_SLASH=False, PREPEND_WWW=True)
def test_prepend_www_custom_urlconf(self):
......@@ -219,7 +220,7 @@ class CommonMiddlewareTest(TestCase):
self.assertEqual(r.status_code, 301)
self.assertEqual(
r.url,
'http://www.testserver/middleware/customurlconf/path/')
'http://www.testserver/customurlconf/path/')
@override_settings(APPEND_SLASH=True, PREPEND_WWW=True)
def test_prepend_www_append_slash_have_slash_custom_urlconf(self):
......@@ -228,7 +229,7 @@ class CommonMiddlewareTest(TestCase):
r = CommonMiddleware().process_request(request)
self.assertEqual(r.status_code, 301)
self.assertEqual(r.url,
'http://www.testserver/middleware/customurlconf/slash/')
'http://www.testserver/customurlconf/slash/')
@override_settings(APPEND_SLASH=True, PREPEND_WWW=True)
def test_prepend_www_append_slash_slashless_custom_urlconf(self):
......@@ -237,7 +238,7 @@ class CommonMiddlewareTest(TestCase):
r = CommonMiddleware().process_request(request)
self.assertEqual(r.status_code, 301)
self.assertEqual(r.url,
'http://www.testserver/middleware/customurlconf/slash/')
'http://www.testserver/customurlconf/slash/')
# Legacy tests for the 404 error reporting via email (to be removed in 1.8)
......
from __future__ import unicode_literals
from unittest import TestCase
from django.core.urlresolvers import NoReverseMatch
from django.contrib.auth.views import logout
from django.shortcuts import resolve_url
from django.test import TestCase
from .models import UnimportantThing
......@@ -13,6 +12,7 @@ class ResolveUrlTests(TestCase):
"""
Tests for the ``resolve_url`` function.
"""
urls = 'resolve_url.urls'
def test_url_path(self):
"""
......
from django.conf.urls import patterns
urlpatterns = patterns('',
(r'^accounts/logout/$', 'django.contrib.auth.views.logout')
)
......@@ -550,6 +550,8 @@ class TemplateRegressionTests(TestCase):
os.path.dirname(os.path.abspath(upath(__file__))),),
)
class TemplateTests(TransRealMixin, TestCase):
urls = 'template_tests.urls'
def test_templates(self):
template_tests = self.get_template_tests()
filter_tests = filters.get_filter_tests()
......@@ -1701,28 +1703,28 @@ class TemplateTests(TransRealMixin, TestCase):
### URL TAG ########################################################
# Successes
'url01': ('{% url "template_tests.views.client" client.id %}', {'client': {'id': 1}}, '/url_tag/client/1/'),
'url02': ('{% url "template_tests.views.client_action" id=client.id action="update" %}', {'client': {'id': 1}}, '/url_tag/client/1/update/'),
'url02a': ('{% url "template_tests.views.client_action" client.id "update" %}', {'client': {'id': 1}}, '/url_tag/client/1/update/'),
'url02b': ("{% url 'template_tests.views.client_action' id=client.id action='update' %}", {'client': {'id': 1}}, '/url_tag/client/1/update/'),
'url02c': ("{% url 'template_tests.views.client_action' client.id 'update' %}", {'client': {'id': 1}}, '/url_tag/client/1/update/'),
'url03': ('{% url "template_tests.views.index" %}', {}, '/url_tag/'),
'url04': ('{% url "named.client" client.id %}', {'client': {'id': 1}}, '/url_tag/named-client/1/'),
'url05': ('{% url "метка_оператора" v %}', {'v': 'Ω'}, '/url_tag/%D0%AE%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4/%CE%A9/'),
'url06': ('{% url "метка_оператора_2" tag=v %}', {'v': 'Ω'}, '/url_tag/%D0%AE%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4/%CE%A9/'),
'url07': ('{% url "template_tests.views.client2" tag=v %}', {'v': 'Ω'}, '/url_tag/%D0%AE%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4/%CE%A9/'),
'url08': ('{% url "метка_оператора" v %}', {'v': 'Ω'}, '/url_tag/%D0%AE%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4/%CE%A9/'),
'url09': ('{% url "метка_оператора_2" tag=v %}', {'v': 'Ω'}, '/url_tag/%D0%AE%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4/%CE%A9/'),
'url10': ('{% url "template_tests.views.client_action" id=client.id action="two words" %}', {'client': {'id': 1}}, '/url_tag/client/1/two%20words/'),
'url11': ('{% url "template_tests.views.client_action" id=client.id action="==" %}', {'client': {'id': 1}}, '/url_tag/client/1/%3D%3D/'),
'url12': ('{% url "template_tests.views.client_action" id=client.id action="," %}', {'client': {'id': 1}}, '/url_tag/client/1/%2C/'),
'url13': ('{% url "template_tests.views.client_action" id=client.id action=arg|join:"-" %}', {'client': {'id': 1}, 'arg': ['a', 'b']}, '/url_tag/client/1/a-b/'),
'url14': ('{% url "template_tests.views.client_action" client.id arg|join:"-" %}', {'client': {'id': 1}, 'arg': ['a', 'b']}, '/url_tag/client/1/a-b/'),
'url15': ('{% url "template_tests.views.client_action" 12 "test" %}', {}, '/url_tag/client/12/test/'),
'url18': ('{% url "template_tests.views.client" "1,2" %}', {}, '/url_tag/client/1%2C2/'),
'url19': ('{% url named_url client.id %}', {'named_url': 'template_tests.views.client', 'client': {'id': 1}}, '/url_tag/client/1/'),
'url20': ('{% url url_name_in_var client.id %}', {'url_name_in_var': 'named.client', 'client': {'id': 1}}, '/url_tag/named-client/1/'),
'url01': ('{% url "template_tests.views.client" client.id %}', {'client': {'id': 1}}, '/client/1/'),
'url02': ('{% url "template_tests.views.client_action" id=client.id action="update" %}', {'client': {'id': 1}}, '/client/1/update/'),
'url02a': ('{% url "template_tests.views.client_action" client.id "update" %}', {'client': {'id': 1}}, '/client/1/update/'),
'url02b': ("{% url 'template_tests.views.client_action' id=client.id action='update' %}", {'client': {'id': 1}}, '/client/1/update/'),
'url02c': ("{% url 'template_tests.views.client_action' client.id 'update' %}", {'client': {'id': 1}}, '/client/1/update/'),
'url03': ('{% url "template_tests.views.index" %}', {}, '/'),
'url04': ('{% url "named.client" client.id %}', {'client': {'id': 1}}, '/named-client/1/'),
'url05': ('{% url "метка_оператора" v %}', {'v': 'Ω'}, '/%D0%AE%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4/%CE%A9/'),
'url06': ('{% url "метка_оператора_2" tag=v %}', {'v': 'Ω'}, '/%D0%AE%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4/%CE%A9/'),
'url07': ('{% url "template_tests.views.client2" tag=v %}', {'v': 'Ω'}, '/%D0%AE%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4/%CE%A9/'),
'url08': ('{% url "метка_оператора" v %}', {'v': 'Ω'}, '/%D0%AE%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4/%CE%A9/'),
'url09': ('{% url "метка_оператора_2" tag=v %}', {'v': 'Ω'}, '/%D0%AE%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4/%CE%A9/'),
'url10': ('{% url "template_tests.views.client_action" id=client.id action="two words" %}', {'client': {'id': 1}}, '/client/1/two%20words/'),
'url11': ('{% url "template_tests.views.client_action" id=client.id action="==" %}', {'client': {'id': 1}}, '/client/1/%3D%3D/'),
'url12': ('{% url "template_tests.views.client_action" id=client.id action="," %}', {'client': {'id': 1}}, '/client/1/%2C/'),
'url13': ('{% url "template_tests.views.client_action" id=client.id action=arg|join:"-" %}', {'client': {'id': 1}, 'arg': ['a', 'b']}, '/client/1/a-b/'),
'url14': ('{% url "template_tests.views.client_action" client.id arg|join:"-" %}', {'client': {'id': 1}, 'arg': ['a', 'b']}, '/client/1/a-b/'),
'url15': ('{% url "template_tests.views.client_action" 12 "test" %}', {}, '/client/12/test/'),
'url18': ('{% url "template_tests.views.client" "1,2" %}', {}, '/client/1%2C2/'),
'url19': ('{% url named_url client.id %}', {'named_url': 'template_tests.views.client', 'client': {'id': 1}}, '/client/1/'),
'url20': ('{% url url_name_in_var client.id %}', {'url_name_in_var': 'named.client', 'client': {'id': 1}}, '/named-client/1/'),
# Failures
'url-fail01': ('{% url %}', {}, template.TemplateSyntaxError),
......@@ -1747,7 +1749,7 @@ class TemplateTests(TransRealMixin, TestCase):
# {% url ... as var %}
'url-asvar01': ('{% url "template_tests.views.index" as url %}', {}, ''),
'url-asvar02': ('{% url "template_tests.views.index" as url %}{{ url }}', {}, '/url_tag/'),
'url-asvar02': ('{% url "template_tests.views.index" as url %}{{ url }}', {}, '/'),
'url-asvar03': ('{% url "no_such_view" as url %}{{ url }}', {}, ''),
### CACHE TAG ######################################################
......
This diff is collapsed.
......@@ -11,10 +11,10 @@ urlpatterns = patterns('',
(r'^raw_post_view/$', views.raw_post_view),
(r'^redirect_view/$', views.redirect_view),
(r'^secure_view/$', views.view_with_secure),
(r'^permanent_redirect_view/$', RedirectView.as_view(url='/test_client/get_view/')),
(r'^temporary_redirect_view/$', RedirectView.as_view(url='/test_client/get_view/', permanent=False)),
(r'^http_redirect_view/$', RedirectView.as_view(url='/test_client/secure_view/')),
(r'^https_redirect_view/$', RedirectView.as_view(url='https://testserver/test_client/secure_view/')),
(r'^permanent_redirect_view/$', RedirectView.as_view(url='/get_view/')),
(r'^temporary_redirect_view/$', RedirectView.as_view(url='/get_view/', permanent=False)),
(r'^http_redirect_view/$', RedirectView.as_view(url='/secure_view/')),
(r'^https_redirect_view/$', RedirectView.as_view(url='https://testserver/secure_view/')),
(r'^double_redirect_view/$', views.double_redirect_view),
(r'^bad_view/$', views.bad_view),
(r'^form_view/$', views.form_view),
......@@ -31,4 +31,7 @@ urlpatterns = patterns('',
(r'^mail_sending_view/$', views.mail_sending_view),
(r'^mass_mail_sending_view/$', views.mass_mail_sending_view),
(r'^django_project_redirect/$', views.django_project_redirect),
(r'^accounts/login/$', 'django.contrib.auth.views.login', {'template_name': 'login.html'}),
(r'^accounts/logout/$', 'django.contrib.auth.views.logout'),
)
......@@ -67,7 +67,7 @@ def redirect_view(request):
query = '?' + urlencode(request.GET, True)
else:
query = ''
return HttpResponseRedirect('/test_client/get_view/' + query)
return HttpResponseRedirect('/get_view/' + query)
def view_with_secure(request):
......@@ -80,7 +80,7 @@ def view_with_secure(request):
def double_redirect_view(request):
"A view that redirects all requests to a redirection view"
return HttpResponseRedirect('/test_client/permanent_redirect_view/')
return HttpResponseRedirect('/permanent_redirect_view/')
def bad_view(request):
......
from django.conf.urls import patterns, url
from django.conf.urls import patterns, url, include
from django.views.generic import RedirectView
from . import views
urlpatterns = patterns('',
(r'', include('test_client.urls')),
(r'^no_template_view/$', views.no_template_view),
(r'^staff_only/$', views.staff_only_view),
(r'^get_view/$', views.get_view),
......@@ -13,16 +15,16 @@ urlpatterns = patterns('',
url(r'^arg_view/(?P<name>.+)/$', views.view_with_argument, name='arg_view'),
url(r'^nested_view/$', views.nested_view, name='nested_view'),
(r'^login_protected_redirect_view/$', views.login_protected_redirect_view),
(r'^redirects/$', RedirectView.as_view(url='/test_client_regress/redirects/further/')),
(r'^redirects/further/$', RedirectView.as_view(url='/test_client_regress/redirects/further/more/')),
(r'^redirects/further/more/$', RedirectView.as_view(url='/test_client_regress/no_template_view/')),
(r'^redirect_to_non_existent_view/$', RedirectView.as_view(url='/test_client_regress/non_existent_view/')),
(r'^redirect_to_non_existent_view2/$', RedirectView.as_view(url='/test_client_regress/redirect_to_non_existent_view/')),
(r'^redirect_to_self/$', RedirectView.as_view(url='/test_client_regress/redirect_to_self/')),
(r'^circular_redirect_1/$', RedirectView.as_view(url='/test_client_regress/circular_redirect_2/')),
(r'^circular_redirect_2/$', RedirectView.as_view(url='/test_client_regress/circular_redirect_3/')),
(r'^circular_redirect_3/$', RedirectView.as_view(url='/test_client_regress/circular_redirect_1/')),
(r'^redirect_other_host/$', RedirectView.as_view(url='https://otherserver:8443/test_client_regress/no_template_view/')),
(r'^redirects/$', RedirectView.as_view(url='/redirects/further/')),
(r'^redirects/further/$', RedirectView.as_view(url='/redirects/further/more/')),
(r'^redirects/further/more/$', RedirectView.as_view(url='/no_template_view/')),
(r'^redirect_to_non_existent_view/$', RedirectView.as_view(url='/non_existent_view/')),
(r'^redirect_to_non_existent_view2/$', RedirectView.as_view(url='/redirect_to_non_existent_view/')),
(r'^redirect_to_self/$', RedirectView.as_view(url='/redirect_to_self/')),
(r'^circular_redirect_1/$', RedirectView.as_view(url='/circular_redirect_2/')),
(r'^circular_redirect_2/$', RedirectView.as_view(url='/circular_redirect_3/')),
(r'^circular_redirect_3/$', RedirectView.as_view(url='/circular_redirect_1/')),
(r'^redirect_other_host/$', RedirectView.as_view(url='https://otherserver:8443/no_template_view/')),
(r'^set_session/$', views.set_session_view),
(r'^check_session/$', views.check_session_view),
(r'^request_methods/$', views.request_methods_view),
......@@ -30,7 +32,7 @@ urlpatterns = patterns('',
(r'^check_binary/$', views.return_undecodable_binary),
(r'^parse_unicode_json/$', views.return_json_file),
(r'^check_headers/$', views.check_headers),
(r'^check_headers_redirect/$', RedirectView.as_view(url='/test_client_regress/check_headers/')),
(r'^check_headers_redirect/$', RedirectView.as_view(url='/check_headers/')),
(r'^body/$', views.body),
(r'^read_all/$', views.read_all),
(r'^read_buffer/$', views.read_buffer),
......
......@@ -74,13 +74,13 @@ def nested_view(request):
"""
setup_test_environment()
c = Client()
c.get("/test_client_regress/no_template_view")
c.get("/no_template_view")
return render_to_response('base.html', {'nested': 'yes'})
def login_protected_redirect_view(request):
"A view that redirects all requests to the GET view"
return HttpResponseRedirect('/test_client_regress/get_view/')
return HttpResponseRedirect('/get_view/')
login_protected_redirect_view = login_required(login_protected_redirect_view)
......
from django.conf.urls import patterns, include
"""This urlconf exists because Django expects ROOT_URLCONF to exist. URLs
should be added within the test folders, and use TestCase.urls to set them.
This helps the tests remain isolated.
"""
from django.conf.urls import patterns
urlpatterns = patterns('',
# test_client urls
(r'^test_client/', include('test_client.urls')),
(r'^test_client_regress/', include('test_client_regress.urls')),
# File upload test views
(r'^file_uploads/', include('file_uploads.urls')),
# Always provide the auth system login and logout views
(r'^accounts/login/$', 'django.contrib.auth.views.login', {'template_name': 'login.html'}),
(r'^accounts/logout/$', 'django.contrib.auth.views.logout'),
# test urlconf for {% url %} template tag
(r'^url_tag/', include('template_tests.urls')),
# django built-in views
(r'^views/', include('view_tests.urls')),
# test urlconf for middleware tests
(r'^middleware/', include('middleware.urls')),
# admin widget tests
(r'widget_admin/', include('admin_widgets.urls')),
# admin custom URL tests
(r'^custom_urls/', include('admin_custom_urls.urls')),
# admin scripts tests
(r'^admin_scripts/', include('admin_scripts.urls')),
)
urlpatterns = patterns('')
......@@ -14,7 +14,7 @@ class Author(models.Model):
return self.name
def get_absolute_url(self):
return '/views/authors/%s/' % self.id
return '/authors/%s/' % self.id
@python_2_unicode_compatible
......
......@@ -49,7 +49,7 @@ class DebugViewTests(TestCase):
# Ensure no 403.html template exists to test the default case.
setup_test_template_loader({})
try:
response = self.client.get('/views/raises403/')
response = self.client.get('/raises403/')
self.assertContains(response, '<h1>403 Forbidden</h1>', status_code=403)
finally:
restore_template_loaders()
......@@ -60,13 +60,13 @@ class DebugViewTests(TestCase):
{'403.html': 'This is a test template for a 403 Forbidden error.'}
)
try:
response = self.client.get('/views/raises403/')
response = self.client.get('/raises403/')
self.assertContains(response, 'test template', status_code=403)
finally:
restore_template_loaders()
def test_404(self):
response = self.client.get('/views/raises404/')
response = self.client.get('/raises404/')
self.assertEqual(response.status_code, 404)
def test_view_exceptions(self):
......@@ -79,7 +79,7 @@ class DebugViewTests(TestCase):
Numeric IDs and fancy traceback context blocks line numbers shouldn't be localized.
"""
with self.settings(DEBUG=True, USE_L10N=True):
response = self.client.get('/views/raises500/')
response = self.client.get('/raises500/')
# We look for a HTML fragment of the form
# '<div class="context" id="c38123208">', not '<div class="context" id="c38,123,208"'
self.assertContains(response, '<div class="context" id="', status_code=500)
......@@ -518,6 +518,7 @@ class ExceptionReporterFilterTests(TestCase, ExceptionReportTestMixin):
Ensure that sensitive information can be filtered out of error reports.
Refs #14614.
"""
urls = 'view_tests.urls'
rf = RequestFactory()
def test_non_sensitive_request(self):
......@@ -640,7 +641,7 @@ class ExceptionReporterFilterTests(TestCase, ExceptionReportTestMixin):
def callable_setting():
return "This should not be displayed"
with self.settings(DEBUG=True, FOOBAR=callable_setting):
response = self.client.get('/views/raises500/')
response = self.client.get('/raises500/')
self.assertNotContains(response, "This should not be displayed", status_code=500)
def test_dict_setting_with_non_str_key(self):
......@@ -649,7 +650,7 @@ class ExceptionReporterFilterTests(TestCase, ExceptionReportTestMixin):
debug page (#12744).
"""
with self.settings(DEBUG=True, FOOBAR={42: None}):
response = self.client.get('/views/raises500/')
response = self.client.get('/raises500/')
self.assertContains(response, 'FOOBAR', status_code=500)
def test_sensitive_settings(self):
......@@ -665,7 +666,7 @@ class ExceptionReporterFilterTests(TestCase, ExceptionReportTestMixin):
]
for setting in sensitive_settings:
with self.settings(DEBUG=True, **{setting: "should not be displayed"}):
response = self.client.get('/views/raises500/')
response = self.client.get('/raises500/')
self.assertNotContains(response, 'should not be displayed', status_code=500)
def test_settings_with_sensitive_keys(self):
......@@ -685,7 +686,7 @@ class ExceptionReporterFilterTests(TestCase, ExceptionReportTestMixin):
'recursive': {setting: "should not be displayed"},
}
with self.settings(DEBUG=True, FOOBAR=FOOBAR):
response = self.client.get('/views/raises500/')
response = self.client.get('/raises500/')
self.assertNotContains(response, 'should not be displayed', status_code=500)
......
......@@ -9,9 +9,10 @@ from ..models import UrlArticle
class DefaultsTests(TestCase):
"""Test django views in django/views/defaults.py"""
urls = 'view_tests.urls'
fixtures = ['testdata.json']
non_existing_urls = ['/views/non_existing_url/', # this is in urls.py
'/views/other_non_existing_url/'] # this NOT in urls.py
non_existing_urls = ['/non_existing_url/', # this is in urls.py
'/other_non_existing_url/'] # this NOT in urls.py
def test_page_not_found(self):
"A 404 status is returned by the page_not_found view"
......@@ -32,7 +33,7 @@ class DefaultsTests(TestCase):
def test_server_error(self):
"The server_error view raises a 500 status"
response = self.client.get('/views/server_error/')
response = self.client.get('/server_error/')
self.assertEqual(response.status_code, 500)
def test_custom_templates(self):
......@@ -45,7 +46,7 @@ class DefaultsTests(TestCase):
'500.html': 'This is a test template for a 500 error.'}
)
try:
for code, url in ((404, '/views/non_existing_url/'), (500, '/views/server_error/')):
for code, url in ((404, '/non_existing_url/'), (500, '/server_error/')):
response = self.client.get(url)
self.assertContains(response, "test template for a %d error" % code,
status_code=code)
......@@ -65,14 +66,14 @@ class DefaultsTests(TestCase):
"""
Content-Type of the default error responses is text/html. Refs #20822.
"""
response = self.client.get('/views/raises400/')
response = self.client.get('/raises400/')
self.assertEqual(response['Content-Type'], 'text/html')
response = self.client.get('/views/raises403/')
response = self.client.get('/raises403/')
self.assertEqual(response['Content-Type'], 'text/html')
response = self.client.get('/views/non_existing_url/')
response = self.client.get('/non_existing_url/')
self.assertEqual(response['Content-Type'], 'text/html')
response = self.client.get('/views/server_error/')
response = self.client.get('/server_error/')
self.assertEqual(response['Content-Type'], 'text/html')
......@@ -23,6 +23,7 @@ from ..urls import locale_dir
class I18NTests(TestCase):
""" Tests django views in django/views/i18n.py """
urls = 'view_tests.urls'
def test_setlang(self):
"""
......@@ -31,9 +32,9 @@ class I18NTests(TestCase):
The user is redirected to the 'next' argument if provided.
"""
for lang_code, lang_name in settings.LANGUAGES:
post_data = dict(language=lang_code, next='/views/')
response = self.client.post('/views/i18n/setlang/', data=post_data)
self.assertRedirects(response, 'http://testserver/views/')
post_data = dict(language=lang_code, next='/')
response = self.client.post('/i18n/setlang/', data=post_data)
self.assertRedirects(response, 'http://testserver/')
self.assertEqual(self.client.session['_language'], lang_code)
def test_setlang_unsafe_next(self):
......@@ -43,12 +44,12 @@ class I18NTests(TestCase):
"""
lang_code, lang_name = settings.LANGUAGES[0]
post_data = dict(language=lang_code, next='//unsafe/redirection/')
response = self.client.post('/views/i18n/setlang/', data=post_data)
response = self.client.post('/i18n/setlang/', data=post_data)
self.assertEqual(response.url, 'http://testserver/')
self.assertEqual(self.client.session['_language'], lang_code)
def test_setlang_reversal(self):
self.assertEqual(reverse('set_language'), '/views/i18n/setlang/')
self.assertEqual(reverse('set_language'), '/i18n/setlang/')
def test_jsi18n(self):
"""The javascript_catalog can be deployed with language settings"""
......@@ -59,7 +60,7 @@ class I18NTests(TestCase):
trans_txt = catalog.gettext('this is to be translated')
else:
trans_txt = catalog.ugettext('this is to be translated')
response = self.client.get('/views/jsi18n/')
response = self.client.get('/jsi18n/')
# response content must include a line like:
# "this is to be translated": <value of trans_txt Python variable>
# javascript_quote is used to be able to check unicode strings
......@@ -74,6 +75,7 @@ class JsI18NTests(TestCase):
Tests django views in django/views/i18n.py that need to change
settings.LANGUAGE_CODE.
"""
urls = 'view_tests.urls'
def test_jsi18n_with_missing_en_files(self):
"""
......@@ -86,7 +88,7 @@ class JsI18NTests(TestCase):
than English.
"""
with self.settings(LANGUAGE_CODE='es'), override('en-us'):
response = self.client.get('/views/jsi18n/')
response = self.client.get('/jsi18n/')
self.assertNotContains(response, 'esto tiene que ser traducido')
def test_jsi18n_fallback_language(self):
......@@ -95,7 +97,7 @@ class JsI18NTests(TestCase):
in cases where the selected language cannot be found.
"""
with self.settings(LANGUAGE_CODE='fr'), override('fi'):
response = self.client.get('/views/jsi18n/')
response = self.client.get('/jsi18n/')
self.assertContains(response, 'il faut le traduire')
def testI18NLanguageNonEnglishDefault(self):
......@@ -106,7 +108,7 @@ class JsI18NTests(TestCase):
#3594 and #13726 for more details.
"""
with self.settings(LANGUAGE_CODE='fr'), override('en-us'):
response = self.client.get('/views/jsi18n/')
response = self.client.get('/jsi18n/')
self.assertNotContains(response, 'Choisir une heure')
@modify_settings(INSTALLED_APPS={'append': 'view_tests.app0'})
......@@ -117,7 +119,7 @@ class JsI18NTests(TestCase):
with the proper English translations. See #13726 for more details.
"""
with self.settings(LANGUAGE_CODE='fr'), override('en-us'):
response = self.client.get('/views/jsi18n_english_translation/')
response = self.client.get('/jsi18n_english_translation/')
self.assertContains(response, javascript_quote('this app0 string is to be translated'))
def testI18NLanguageNonEnglishFallback(self):
......@@ -126,16 +128,17 @@ class JsI18NTests(TestCase):
in cases where the selected language cannot be found.
"""
with self.settings(LANGUAGE_CODE='fr'), override('none'):
response = self.client.get('/views/jsi18n/')
response = self.client.get('/jsi18n/')
self.assertContains(response, 'Choisir une heure')
def test_escaping(self):
# Force a language via GET otherwise the gettext functions are a noop!
response = self.client.get('/views/jsi18n_admin/?language=de')
response = self.client.get('/jsi18n_admin/?language=de')
self.assertContains(response, '\\x04')
class JsI18NTestsMultiPackage(TestCase):
urls = 'view_tests.urls'
"""
Tests for django views in django/views/i18n.py that need to change
settings.LANGUAGE_CODE and merge JS translation from several packages.
......@@ -150,7 +153,7 @@ class JsI18NTestsMultiPackage(TestCase):
#3594 and #13514 for more details.
"""
with self.settings(LANGUAGE_CODE='en-us'), override('fr'):
response = self.client.get('/views/jsi18n_multi_packages1/')
response = self.client.get('/jsi18n_multi_packages1/')
self.assertContains(response, javascript_quote('il faut traduire cette chaîne de caractères de app1'))
@modify_settings(INSTALLED_APPS={'append': ['view_tests.app3', 'view_tests.app4']})
......@@ -160,7 +163,7 @@ class JsI18NTestsMultiPackage(TestCase):
English.
"""
with self.settings(LANGUAGE_CODE='fr'), override('es-ar'):
response = self.client.get('/views/jsi18n_multi_packages2/')
response = self.client.get('/jsi18n_multi_packages2/')
self.assertContains(response, javascript_quote('este texto de app3 debe ser traducido'))
def testI18NWithLocalePaths(self):
......@@ -169,7 +172,7 @@ class JsI18NTestsMultiPackage(TestCase):
path.dirname(path.abspath(upath(__file__)))), 'app3', 'locale'),)
with self.settings(LANGUAGE_CODE='es-ar', LOCALE_PATHS=extended_locale_paths):
with override('es-ar'):
response = self.client.get('/views/jsi18n/')
response = self.client.get('/jsi18n/')
self.assertContains(response,
javascript_quote('este texto de app3 debe ser traducido'))
......
......@@ -18,13 +18,14 @@ from ..urls import media_dir
class StaticTests(SimpleTestCase):
"""Tests django views in django/views/static.py"""
urls = 'view_tests.urls'
prefix = 'site_media'
def test_serve(self):
"The static view can serve static media"
media_files = ['file.txt', 'file.txt.gz']
for filename in media_files:
response = self.client.get('/views/%s/%s' % (self.prefix, filename))
response = self.client.get('/%s/%s' % (self.prefix, filename))
response_content = b''.join(response)
file_path = path.join(media_dir, filename)
with open(file_path, 'rb') as fp:
......@@ -33,19 +34,19 @@ class StaticTests(SimpleTestCase):
self.assertEqual(mimetypes.guess_type(file_path)[1], response.get('Content-Encoding', None))
def test_unknown_mime_type(self):
response = self.client.get('/views/%s/file.unknown' % self.prefix)
response = self.client.get('/%s/file.unknown' % self.prefix)
self.assertEqual('application/octet-stream', response['Content-Type'])
def test_copes_with_empty_path_component(self):
file_name = 'file.txt'
response = self.client.get('/views/%s//%s' % (self.prefix, file_name))
response = self.client.get('/%s//%s' % (self.prefix, file_name))
response_content = b''.join(response)
with open(path.join(media_dir, file_name), 'rb') as fp:
self.assertEqual(fp.read(), response_content)
def test_is_modified_since(self):
file_name = 'file.txt'
response = self.client.get('/views/%s/%s' % (self.prefix, file_name),
response = self.client.get('/%s/%s' % (self.prefix, file_name),
HTTP_IF_MODIFIED_SINCE='Thu, 1 Jan 1970 00:00:00 GMT')
response_content = b''.join(response)
with open(path.join(media_dir, file_name), 'rb') as fp:
......@@ -54,7 +55,7 @@ class StaticTests(SimpleTestCase):
def test_not_modified_since(self):
file_name = 'file.txt'
response = self.client.get(
'/views/%s/%s' % (self.prefix, file_name),
'/%s/%s' % (self.prefix, file_name),
HTTP_IF_MODIFIED_SINCE='Mon, 18 Jan 2038 05:14:07 GMT'
# This is 24h before max Unix time. Remember to fix Django and
# update this test well before 2038 :)
......@@ -69,7 +70,7 @@ class StaticTests(SimpleTestCase):
"""
file_name = 'file.txt'
invalid_date = 'Mon, 28 May 999999999999 28:25:26 GMT'
response = self.client.get('/views/%s/%s' % (self.prefix, file_name),
response = self.client.get('/%s/%s' % (self.prefix, file_name),
HTTP_IF_MODIFIED_SINCE=invalid_date)
response_content = b''.join(response)
with open(path.join(media_dir, file_name), 'rb') as fp:
......@@ -84,7 +85,7 @@ class StaticTests(SimpleTestCase):
"""
file_name = 'file.txt'
invalid_date = ': 1291108438, Wed, 20 Oct 2010 14:05:00 GMT'
response = self.client.get('/views/%s/%s' % (self.prefix, file_name),
response = self.client.get('/%s/%s' % (self.prefix, file_name),
HTTP_IF_MODIFIED_SINCE=invalid_date)
response_content = b''.join(response)
with open(path.join(media_dir, file_name), 'rb') as fp:
......@@ -92,7 +93,7 @@ class StaticTests(SimpleTestCase):
self.assertEqual(len(response_content), int(response['Content-Length']))
def test_404(self):
response = self.client.get('/views/%s/non_existing_resource' % self.prefix)
response = self.client.get('/%s/non_existing_resource' % self.prefix)
self.assertEqual(404, response.status_code)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment