summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/contrib/auth/tests/test_templates.py1
-rw-r--r--django/contrib/auth/tests/urls.py6
-rw-r--r--tests/admin_custom_urls/tests.py10
-rw-r--r--tests/admin_scripts/tests.py5
-rw-r--r--tests/admin_widgets/tests.py30
-rw-r--r--tests/contenttypes_tests/models.py2
-rw-r--r--tests/file_uploads/tests.py32
-rw-r--r--tests/middleware/extra_urls.py6
-rw-r--r--tests/middleware/tests.py23
-rw-r--r--tests/resolve_url/tests.py4
-rw-r--r--tests/resolve_url/urls.py6
-rw-r--r--tests/template_tests/tests.py46
-rw-r--r--tests/test_client/tests.py141
-rw-r--r--tests/test_client/urls.py11
-rw-r--r--tests/test_client/views.py4
-rw-r--r--tests/test_client_regress/tests.py267
-rw-r--r--tests/test_client_regress/urls.py26
-rw-r--r--tests/test_client_regress/views.py4
-rw-r--r--tests/urls.py37
-rw-r--r--tests/view_tests/models.py2
-rw-r--r--tests/view_tests/tests/test_debug.py17
-rw-r--r--tests/view_tests/tests/test_defaults.py17
-rw-r--r--tests/view_tests/tests/test_i18n.py33
-rw-r--r--tests/view_tests/tests/test_static.py17
24 files changed, 397 insertions, 350 deletions
diff --git a/django/contrib/auth/tests/test_templates.py b/django/contrib/auth/tests/test_templates.py
index 1d1a8b49a8..3b4332d642 100644
--- a/django/contrib/auth/tests/test_templates.py
+++ b/django/contrib/auth/tests/test_templates.py
@@ -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()
diff --git a/django/contrib/auth/tests/urls.py b/django/contrib/auth/tests/urls.py
index da504b85fa..5a8e7846c8 100644
--- a/django/contrib/auth/tests/urls.py
+++ b/django/contrib/auth/tests/urls.py
@@ -1,4 +1,5 @@
-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)),
)
diff --git a/tests/admin_custom_urls/tests.py b/tests/admin_custom_urls/tests.py
index d629c78e04..7f098b049b 100644
--- a/tests/admin_custom_urls/tests.py
+++ b/tests/admin_custom_urls/tests.py
@@ -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):
diff --git a/tests/admin_scripts/tests.py b/tests/admin_scripts/tests.py
index e052a1a6d7..63ca63a6c0 100644
--- a/tests/admin_scripts/tests.py
+++ b/tests/admin_scripts/tests.py
@@ -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')
diff --git a/tests/admin_widgets/tests.py b/tests/admin_widgets/tests.py
index 29dd5750ae..3c6846073f 100644
--- a/tests/admin_widgets/tests.py
+++ b/tests/admin_widgets/tests.py
@@ -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):
diff --git a/tests/contenttypes_tests/models.py b/tests/contenttypes_tests/models.py
index b2669367eb..d47cfac7f7 100644
--- a/tests/contenttypes_tests/models.py
+++ b/tests/contenttypes_tests/models.py
@@ -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
diff --git a/tests/file_uploads/tests.py b/tests/file_uploads/tests.py
index f4e4ea31b2..e86883fc25 100644
--- a/tests/file_uploads/tests.py
+++ b/tests/file_uploads/tests.py
@@ -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
)
diff --git a/tests/middleware/extra_urls.py b/tests/middleware/extra_urls.py
index 1aee48f7be..c051296a74 100644
--- a/tests/middleware/extra_urls.py
+++ b/tests/middleware/extra_urls.py
@@ -1,7 +1,7 @@
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'),
)
diff --git a/tests/middleware/tests.py b/tests/middleware/tests.py
index d4b8827f7b..7653008336 100644
--- a/tests/middleware/tests.py
+++ b/tests/middleware/tests.py
@@ -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)
diff --git a/tests/resolve_url/tests.py b/tests/resolve_url/tests.py
index 92010f87ed..a29b4dedb0 100644
--- a/tests/resolve_url/tests.py
+++ b/tests/resolve_url/tests.py
@@ -1,10 +1,9 @@
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):
"""
diff --git a/tests/resolve_url/urls.py b/tests/resolve_url/urls.py
new file mode 100644
index 0000000000..f03ac1a412
--- /dev/null
+++ b/tests/resolve_url/urls.py
@@ -0,0 +1,6 @@
+from django.conf.urls import patterns
+
+
+urlpatterns = patterns('',
+ (r'^accounts/logout/$', 'django.contrib.auth.views.logout')
+)
diff --git a/tests/template_tests/tests.py b/tests/template_tests/tests.py
index 0afb3a8729..ddcad693a6 100644
--- a/tests/template_tests/tests.py
+++ b/tests/template_tests/tests.py
@@ -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/'),
+ '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}}, '/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/'),
+ '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 ######################################################
diff --git a/tests/test_client/tests.py b/tests/test_client/tests.py
index 5fa6360eda..a29d627000 100644
--- a/tests/test_client/tests.py
+++ b/tests/test_client/tests.py
@@ -32,13 +32,14 @@ from .views import get_view
@override_settings(PASSWORD_HASHERS=('django.contrib.auth.hashers.SHA1PasswordHasher',))
class ClientTest(TestCase):
fixtures = ['testdata.json']
+ urls = 'test_client.urls'
def test_get_view(self):
"GET a view"
# The data is ignored, but let's check it doesn't crash the system
# anyway.
data = {'var': '\xf2'}
- response = self.client.get('/test_client/get_view/', data)
+ response = self.client.get('/get_view/', data)
# Check some response details
self.assertContains(response, 'This is a test')
@@ -47,7 +48,7 @@ class ClientTest(TestCase):
def test_get_post_view(self):
"GET a view that normally expects POSTs"
- response = self.client.get('/test_client/post_view/', {})
+ response = self.client.get('/post_view/', {})
# Check some response details
self.assertEqual(response.status_code, 200)
@@ -57,7 +58,7 @@ class ClientTest(TestCase):
def test_empty_post(self):
"POST an empty dictionary to a view"
- response = self.client.post('/test_client/post_view/', {})
+ response = self.client.post('/post_view/', {})
# Check some response details
self.assertEqual(response.status_code, 200)
@@ -70,7 +71,7 @@ class ClientTest(TestCase):
post_data = {
'value': 37
}
- response = self.client.post('/test_client/post_view/', post_data)
+ response = self.client.post('/post_view/', post_data)
# Check some response details
self.assertEqual(response.status_code, 200)
@@ -80,7 +81,7 @@ class ClientTest(TestCase):
def test_response_headers(self):
"Check the value of HTTP headers returned in a response"
- response = self.client.get("/test_client/header_view/")
+ response = self.client.get("/header_view/")
self.assertEqual(response['X-DJANGO-TEST'], 'Slartibartfast')
@@ -90,7 +91,7 @@ class ClientTest(TestCase):
originating environ dict and a ``wsgi_request`` with the originating
``WSGIRequest`` instance.
"""
- response = self.client.get("/test_client/header_view/")
+ response = self.client.get("/header_view/")
self.assertTrue(hasattr(response, 'request'))
self.assertTrue(hasattr(response, 'wsgi_request'))
@@ -101,7 +102,7 @@ class ClientTest(TestCase):
def test_raw_post(self):
"POST raw data (with a content type) to a view"
test_doc = """<?xml version="1.0" encoding="utf-8"?><library><book><title>Blink</title><author>Malcolm Gladwell</author></book></library>"""
- response = self.client.post("/test_client/raw_post_view/", test_doc,
+ response = self.client.post("/raw_post_view/", test_doc,
content_type="text/xml")
self.assertEqual(response.status_code, 200)
self.assertEqual(response.templates[0].name, "Book template")
@@ -109,81 +110,81 @@ class ClientTest(TestCase):
def test_insecure(self):
"GET a URL through http"
- response = self.client.get('/test_client/secure_view/', secure=False)
+ response = self.client.get('/secure_view/', secure=False)
self.assertFalse(response.test_was_secure_request)
self.assertEqual(response.test_server_port, '80')
def test_secure(self):
"GET a URL through https"
- response = self.client.get('/test_client/secure_view/', secure=True)
+ response = self.client.get('/secure_view/', secure=True)
self.assertTrue(response.test_was_secure_request)
self.assertEqual(response.test_server_port, '443')
def test_redirect(self):
"GET a URL that redirects elsewhere"
- response = self.client.get('/test_client/redirect_view/')
+ response = self.client.get('/redirect_view/')
# Check that the response was a 302 (redirect) and that
# assertRedirect() understands to put an implicit http://testserver/ in
# front of non-absolute URLs.
- self.assertRedirects(response, '/test_client/get_view/')
+ self.assertRedirects(response, '/get_view/')
host = 'django.testserver'
client_providing_host = Client(HTTP_HOST=host)
- response = client_providing_host.get('/test_client/redirect_view/')
+ response = client_providing_host.get('/redirect_view/')
# Check that the response was a 302 (redirect) with absolute URI
- self.assertRedirects(response, '/test_client/get_view/', host=host)
+ self.assertRedirects(response, '/get_view/', host=host)
def test_redirect_with_query(self):
"GET a URL that redirects with given GET parameters"
- response = self.client.get('/test_client/redirect_view/', {'var': 'value'})
+ response = self.client.get('/redirect_view/', {'var': 'value'})
# Check if parameters are intact
- self.assertRedirects(response, 'http://testserver/test_client/get_view/?var=value')
+ self.assertRedirects(response, 'http://testserver/get_view/?var=value')
def test_permanent_redirect(self):
"GET a URL that redirects permanently elsewhere"
- response = self.client.get('/test_client/permanent_redirect_view/')
+ response = self.client.get('/permanent_redirect_view/')
# Check that the response was a 301 (permanent redirect)
- self.assertRedirects(response, 'http://testserver/test_client/get_view/', status_code=301)
+ self.assertRedirects(response, 'http://testserver/get_view/', status_code=301)
client_providing_host = Client(HTTP_HOST='django.testserver')
- response = client_providing_host.get('/test_client/permanent_redirect_view/')
+ response = client_providing_host.get('/permanent_redirect_view/')
# Check that the response was a 301 (permanent redirect) with absolute URI
- self.assertRedirects(response, 'http://django.testserver/test_client/get_view/', status_code=301)
+ self.assertRedirects(response, 'http://django.testserver/get_view/', status_code=301)
def test_temporary_redirect(self):
"GET a URL that does a non-permanent redirect"
- response = self.client.get('/test_client/temporary_redirect_view/')
+ response = self.client.get('/temporary_redirect_view/')
# Check that the response was a 302 (non-permanent redirect)
- self.assertRedirects(response, 'http://testserver/test_client/get_view/', status_code=302)
+ self.assertRedirects(response, 'http://testserver/get_view/', status_code=302)
def test_redirect_to_strange_location(self):
"GET a URL that redirects to a non-200 page"
- response = self.client.get('/test_client/double_redirect_view/')
+ response = self.client.get('/double_redirect_view/')
# Check that the response was a 302, and that
# the attempt to get the redirection location returned 301 when retrieved
- self.assertRedirects(response, 'http://testserver/test_client/permanent_redirect_view/', target_status_code=301)
+ self.assertRedirects(response, 'http://testserver/permanent_redirect_view/', target_status_code=301)
def test_follow_redirect(self):
"A URL that redirects can be followed to termination."
- response = self.client.get('/test_client/double_redirect_view/', follow=True)
- self.assertRedirects(response, 'http://testserver/test_client/get_view/', status_code=302, target_status_code=200)
+ response = self.client.get('/double_redirect_view/', follow=True)
+ self.assertRedirects(response, 'http://testserver/get_view/', status_code=302, target_status_code=200)
self.assertEqual(len(response.redirect_chain), 2)
def test_redirect_http(self):
"GET a URL that redirects to an http URI"
- response = self.client.get('/test_client/http_redirect_view/', follow=True)
+ response = self.client.get('/http_redirect_view/', follow=True)
self.assertFalse(response.test_was_secure_request)
def test_redirect_https(self):
"GET a URL that redirects to an https URI"
- response = self.client.get('/test_client/https_redirect_view/', follow=True)
+ response = self.client.get('/https_redirect_view/', follow=True)
self.assertTrue(response.test_was_secure_request)
def test_notfound_response(self):
"GET a URL that responds as '404:Not Found'"
- response = self.client.get('/test_client/bad_view/')
+ response = self.client.get('/bad_view/')
# Check that the response was a 404, and that the content contains MAGIC
self.assertContains(response, 'MAGIC', status_code=404)
@@ -197,7 +198,7 @@ class ClientTest(TestCase):
'single': 'b',
'multi': ('b', 'c', 'e')
}
- response = self.client.post('/test_client/form_view/', post_data)
+ response = self.client.post('/form_view/', post_data)
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(response, "Valid POST Template")
@@ -207,7 +208,7 @@ class ClientTest(TestCase):
'text': 'Hello World',
'multi': ('b', 'c', 'e')
}
- response = self.client.get('/test_client/form_view/', data=hints)
+ response = self.client.get('/form_view/', data=hints)
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(response, "Form GET Template")
# Check that the multi-value data has been rolled out ok
@@ -219,7 +220,7 @@ class ClientTest(TestCase):
'text': 'Hello World',
'value': 37
}
- response = self.client.post('/test_client/form_view/', post_data)
+ response = self.client.post('/form_view/', post_data)
self.assertContains(response, 'This field is required.', 3)
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(response, "Invalid POST Template")
@@ -237,7 +238,7 @@ class ClientTest(TestCase):
'single': 'b',
'multi': ('b', 'c', 'e')
}
- response = self.client.post('/test_client/form_view/', post_data)
+ response = self.client.post('/form_view/', post_data)
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(response, "Invalid POST Template")
@@ -252,7 +253,7 @@ class ClientTest(TestCase):
'single': 'b',
'multi': ('b', 'c', 'e')
}
- response = self.client.post('/test_client/form_view_with_template/', post_data)
+ response = self.client.post('/form_view_with_template/', post_data)
self.assertContains(response, 'POST data OK')
self.assertTemplateUsed(response, "form_view.html")
self.assertTemplateUsed(response, 'base.html')
@@ -264,7 +265,7 @@ class ClientTest(TestCase):
'text': 'Hello World',
'value': 37
}
- response = self.client.post('/test_client/form_view_with_template/', post_data)
+ response = self.client.post('/form_view_with_template/', post_data)
self.assertContains(response, 'POST data has errors')
self.assertTemplateUsed(response, 'form_view.html')
self.assertTemplateUsed(response, 'base.html')
@@ -283,7 +284,7 @@ class ClientTest(TestCase):
'single': 'b',
'multi': ('b', 'c', 'e')
}
- response = self.client.post('/test_client/form_view_with_template/', post_data)
+ response = self.client.post('/form_view_with_template/', post_data)
self.assertContains(response, 'POST data has errors')
self.assertTemplateUsed(response, "form_view.html")
self.assertTemplateUsed(response, 'base.html')
@@ -293,31 +294,31 @@ class ClientTest(TestCase):
def test_unknown_page(self):
"GET an invalid URL"
- response = self.client.get('/test_client/unknown_view/')
+ response = self.client.get('/unknown_view/')
# Check that the response was a 404
self.assertEqual(response.status_code, 404)
def test_url_parameters(self):
"Make sure that URL ;-parameters are not stripped."
- response = self.client.get('/test_client/unknown_view/;some-parameter')
+ response = self.client.get('/unknown_view/;some-parameter')
# Check that the path in the response includes it (ignore that it's a 404)
- self.assertEqual(response.request['PATH_INFO'], '/test_client/unknown_view/;some-parameter')
+ self.assertEqual(response.request['PATH_INFO'], '/unknown_view/;some-parameter')
def test_view_with_login(self):
"Request a page that is protected with @login_required"
# Get the page without logging in. Should result in 302.
- response = self.client.get('/test_client/login_protected_view/')
- self.assertRedirects(response, 'http://testserver/accounts/login/?next=/test_client/login_protected_view/')
+ response = self.client.get('/login_protected_view/')
+ self.assertRedirects(response, 'http://testserver/accounts/login/?next=/login_protected_view/')
# Log in
login = self.client.login(username='testclient', password='password')
self.assertTrue(login, 'Could not log in')
# Request a page that requires a login
- response = self.client.get('/test_client/login_protected_view/')
+ response = self.client.get('/login_protected_view/')
self.assertEqual(response.status_code, 200)
self.assertEqual(response.context['user'].username, 'testclient')
@@ -325,15 +326,15 @@ class ClientTest(TestCase):
"Request a page that is protected with a @login_required method"
# Get the page without logging in. Should result in 302.
- response = self.client.get('/test_client/login_protected_method_view/')
- self.assertRedirects(response, 'http://testserver/accounts/login/?next=/test_client/login_protected_method_view/')
+ response = self.client.get('/login_protected_method_view/')
+ self.assertRedirects(response, 'http://testserver/accounts/login/?next=/login_protected_method_view/')
# Log in
login = self.client.login(username='testclient', password='password')
self.assertTrue(login, 'Could not log in')
# Request a page that requires a login
- response = self.client.get('/test_client/login_protected_method_view/')
+ response = self.client.get('/login_protected_method_view/')
self.assertEqual(response.status_code, 200)
self.assertEqual(response.context['user'].username, 'testclient')
@@ -341,15 +342,15 @@ class ClientTest(TestCase):
"Request a page that is protected with @login_required(redirect_field_name='redirect_to')"
# Get the page without logging in. Should result in 302.
- response = self.client.get('/test_client/login_protected_view_custom_redirect/')
- self.assertRedirects(response, 'http://testserver/accounts/login/?redirect_to=/test_client/login_protected_view_custom_redirect/')
+ response = self.client.get('/login_protected_view_custom_redirect/')
+ self.assertRedirects(response, 'http://testserver/accounts/login/?redirect_to=/login_protected_view_custom_redirect/')
# Log in
login = self.client.login(username='testclient', password='password')
self.assertTrue(login, 'Could not log in')
# Request a page that requires a login
- response = self.client.get('/test_client/login_protected_view_custom_redirect/')
+ response = self.client.get('/login_protected_view_custom_redirect/')
self.assertEqual(response.status_code, 200)
self.assertEqual(response.context['user'].username, 'testclient')
@@ -371,7 +372,7 @@ class ClientTest(TestCase):
self.client.login(username='testclient', password='password')
# Request a page that requires a login
- response = self.client.get('/test_client/login_protected_view/')
+ response = self.client.get('/login_protected_view/')
self.assertEqual(response.status_code, 200)
self.assertEqual(response.context['user'].username, 'testclient')
@@ -379,8 +380,8 @@ class ClientTest(TestCase):
self.client.logout()
# Request a page that requires a login
- response = self.client.get('/test_client/login_protected_view/')
- self.assertRedirects(response, 'http://testserver/accounts/login/?next=/test_client/login_protected_view/')
+ response = self.client.get('/login_protected_view/')
+ self.assertRedirects(response, 'http://testserver/accounts/login/?next=/login_protected_view/')
@override_settings(SESSION_ENGINE="django.contrib.sessions.backends.signed_cookies")
def test_logout_cookie_sessions(self):
@@ -390,16 +391,16 @@ class ClientTest(TestCase):
"Request a page that is protected with @permission_required"
# Get the page without logging in. Should result in 302.
- response = self.client.get('/test_client/permission_protected_view/')
- self.assertRedirects(response, 'http://testserver/accounts/login/?next=/test_client/permission_protected_view/')
+ response = self.client.get('/permission_protected_view/')
+ self.assertRedirects(response, 'http://testserver/accounts/login/?next=/permission_protected_view/')
# Log in
login = self.client.login(username='testclient', password='password')
self.assertTrue(login, 'Could not log in')
# Log in with wrong permissions. Should result in 302.
- response = self.client.get('/test_client/permission_protected_view/')
- self.assertRedirects(response, 'http://testserver/accounts/login/?next=/test_client/permission_protected_view/')
+ response = self.client.get('/permission_protected_view/')
+ self.assertRedirects(response, 'http://testserver/accounts/login/?next=/permission_protected_view/')
# TODO: Log in with right permissions and request the page again
@@ -407,7 +408,7 @@ class ClientTest(TestCase):
"Request a page that is protected with @permission_required but raises a exception"
# Get the page without logging in. Should result in 403.
- response = self.client.get('/test_client/permission_protected_view_exception/')
+ response = self.client.get('/permission_protected_view_exception/')
self.assertEqual(response.status_code, 403)
# Log in
@@ -415,28 +416,28 @@ class ClientTest(TestCase):
self.assertTrue(login, 'Could not log in')
# Log in with wrong permissions. Should result in 403.
- response = self.client.get('/test_client/permission_protected_view_exception/')
+ response = self.client.get('/permission_protected_view_exception/')
self.assertEqual(response.status_code, 403)
def test_view_with_method_permissions(self):
"Request a page that is protected with a @permission_required method"
# Get the page without logging in. Should result in 302.
- response = self.client.get('/test_client/permission_protected_method_view/')
- self.assertRedirects(response, 'http://testserver/accounts/login/?next=/test_client/permission_protected_method_view/')
+ response = self.client.get('/permission_protected_method_view/')
+ self.assertRedirects(response, 'http://testserver/accounts/login/?next=/permission_protected_method_view/')
# Log in
login = self.client.login(username='testclient', password='password')
self.assertTrue(login, 'Could not log in')
# Log in with wrong permissions. Should result in 302.
- response = self.client.get('/test_client/permission_protected_method_view/')
- self.assertRedirects(response, 'http://testserver/accounts/login/?next=/test_client/permission_protected_method_view/')
+ response = self.client.get('/permission_protected_method_view/')
+ self.assertRedirects(response, 'http://testserver/accounts/login/?next=/permission_protected_method_view/')
# TODO: Log in with right permissions and request the page again
def test_external_redirect(self):
- response = self.client.get('/test_client/django_project_redirect/')
+ response = self.client.get('/django_project_redirect/')
self.assertRedirects(response, 'https://www.djangoproject.com/', fetch_redirect_response=False)
def test_session_modifying_view(self):
@@ -448,18 +449,18 @@ class ClientTest(TestCase):
except KeyError:
pass
- self.client.post('/test_client/session_view/')
+ self.client.post('/session_view/')
# Check that the session was modified
self.assertEqual(self.client.session['tobacconist'], 'hovercraft')
def test_view_with_exception(self):
"Request a page that is known to throw an error"
- self.assertRaises(KeyError, self.client.get, "/test_client/broken_view/")
+ self.assertRaises(KeyError, self.client.get, "/broken_view/")
# Try the same assertion, a different way
try:
- self.client.get('/test_client/broken_view/')
+ self.client.get('/broken_view/')
self.fail('Should raise an error')
except KeyError:
pass
@@ -467,7 +468,7 @@ class ClientTest(TestCase):
def test_mail_sending(self):
"Test that mail is redirected to a dummy outbox during test setup"
- response = self.client.get('/test_client/mail_sending_view/')
+ response = self.client.get('/mail_sending_view/')
self.assertEqual(response.status_code, 200)
self.assertEqual(len(mail.outbox), 1)
@@ -480,7 +481,7 @@ class ClientTest(TestCase):
def test_mass_mail_sending(self):
"Test that mass mail is redirected to a dummy outbox during test setup"
- response = self.client.get('/test_client/mass_mail_sending_view/')
+ response = self.client.get('/mass_mail_sending_view/')
self.assertEqual(response.status_code, 200)
self.assertEqual(len(mail.outbox), 2)
@@ -501,16 +502,18 @@ class ClientTest(TestCase):
MIDDLEWARE_CLASSES=('django.middleware.csrf.CsrfViewMiddleware',)
)
class CSRFEnabledClientTests(TestCase):
+ urls = 'test_client.urls'
+
def test_csrf_enabled_client(self):
"A client can be instantiated with CSRF checks enabled"
csrf_client = Client(enforce_csrf_checks=True)
# The normal client allows the post
- response = self.client.post('/test_client/post_view/', {})
+ response = self.client.post('/post_view/', {})
self.assertEqual(response.status_code, 200)
# The CSRF-enabled client rejects it
- response = csrf_client.post('/test_client/post_view/', {})
+ response = csrf_client.post('/post_view/', {})
self.assertEqual(response.status_code, 403)
@@ -527,6 +530,8 @@ class CustomTestClientTest(TestCase):
class RequestFactoryTest(TestCase):
+ urls = 'test_client.urls'
+
def test_request_factory(self):
factory = RequestFactory()
request = factory.get('/somewhere/')
diff --git a/tests/test_client/urls.py b/tests/test_client/urls.py
index 693c7de2e1..83f6fede35 100644
--- a/tests/test_client/urls.py
+++ b/tests/test_client/urls.py
@@ -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'),
)
diff --git a/tests/test_client/views.py b/tests/test_client/views.py
index 53d008d5b1..8660e93c7f 100644
--- a/tests/test_client/views.py
+++ b/tests/test_client/views.py
@@ -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):
diff --git a/tests/test_client_regress/tests.py b/tests/test_client_regress/tests.py
index afb3993cd1..d25d36b09f 100644
--- a/tests/test_client_regress/tests.py
+++ b/tests/test_client_regress/tests.py
@@ -8,7 +8,7 @@ import os
import itertools
from django.conf import settings
-from django.core.urlresolvers import reverse
+from django.core.urlresolvers import reverse, NoReverseMatch
from django.template import (TemplateSyntaxError,
Context, Template, loader)
import django.template.context
@@ -30,9 +30,11 @@ from .views import CustomTestException
TEMPLATE_DIRS=(os.path.join(os.path.dirname(upath(__file__)), 'templates'),)
)
class AssertContainsTests(TestCase):
+ urls = 'test_client_regress.urls'
+
def test_contains(self):
"Responses can be inspected for content, including counting repeated substrings"
- response = self.client.get('/test_client_regress/no_template_view/')
+ response = self.client.get('/no_template_view/')
self.assertNotContains(response, 'never')
self.assertContains(response, 'never', 0)
@@ -125,35 +127,35 @@ class AssertContainsTests(TestCase):
def test_unicode_contains(self):
"Unicode characters can be found in template context"
# Regression test for #10183
- r = self.client.get('/test_client_regress/check_unicode/')
+ r = self.client.get('/check_unicode/')
self.assertContains(r, 'さかき')
self.assertContains(r, b'\xe5\xb3\xa0'.decode('utf-8'))
def test_unicode_not_contains(self):
"Unicode characters can be searched for, and not found in template context"
# Regression test for #10183
- r = self.client.get('/test_client_regress/check_unicode/')
+ r = self.client.get('/check_unicode/')
self.assertNotContains(r, 'はたけ')
self.assertNotContains(r, b'\xe3\x81\xaf\xe3\x81\x9f\xe3\x81\x91'.decode('utf-8'))
def test_binary_contains(self):
- r = self.client.get('/test_client_regress/check_binary/')
+ r = self.client.get('/check_binary/')
self.assertContains(r, b'%PDF-1.4\r\n%\x93\x8c\x8b\x9e')
with self.assertRaises(AssertionError):
self.assertContains(r, b'%PDF-1.4\r\n%\x93\x8c\x8b\x9e', count=2)
def test_binary_not_contains(self):
- r = self.client.get('/test_client_regress/check_binary/')
+ r = self.client.get('/check_binary/')
self.assertNotContains(r, b'%ODF-1.4\r\n%\x93\x8c\x8b\x9e')
with self.assertRaises(AssertionError):
self.assertNotContains(r, b'%PDF-1.4\r\n%\x93\x8c\x8b\x9e')
def test_nontext_contains(self):
- r = self.client.get('/test_client_regress/no_template_view/')
+ r = self.client.get('/no_template_view/')
self.assertContains(r, ugettext_lazy('once'))
def test_nontext_not_contains(self):
- r = self.client.get('/test_client_regress/no_template_view/')
+ r = self.client.get('/no_template_view/')
self.assertNotContains(r, ugettext_lazy('never'))
def test_assert_contains_renders_template_response(self):
@@ -191,11 +193,12 @@ class AssertContainsTests(TestCase):
@override_settings(PASSWORD_HASHERS=('django.contrib.auth.hashers.SHA1PasswordHasher',))
class AssertTemplateUsedTests(TestCase):
+ urls = 'test_client_regress.urls'
fixtures = ['testdata.json']
def test_no_context(self):
"Template usage assertions work then templates aren't in use"
- response = self.client.get('/test_client_regress/no_template_view/')
+ response = self.client.get('/no_template_view/')
# Check that the no template case doesn't mess with the template assertions
self.assertTemplateNotUsed(response, 'GET Template')
@@ -212,7 +215,7 @@ class AssertTemplateUsedTests(TestCase):
def test_single_context(self):
"Template assertions work when there is a single context"
- response = self.client.get('/test_client/post_view/', {})
+ response = self.client.get('/post_view/', {})
try:
self.assertTemplateNotUsed(response, 'Empty GET Template')
@@ -243,7 +246,7 @@ class AssertTemplateUsedTests(TestCase):
'single': 'b',
'multi': ('b', 'c', 'e')
}
- response = self.client.post('/test_client/form_view_with_template/', post_data)
+ response = self.client.post('/form_view_with_template/', post_data)
self.assertContains(response, 'POST data OK')
try:
self.assertTemplateNotUsed(response, "form_view.html")
@@ -262,144 +265,146 @@ class AssertTemplateUsedTests(TestCase):
class AssertRedirectsTests(TestCase):
+ urls = 'test_client_regress.urls'
+
def test_redirect_page(self):
"An assertion is raised if the original page couldn't be retrieved as expected"
# This page will redirect with code 301, not 302
- response = self.client.get('/test_client/permanent_redirect_view/')
+ response = self.client.get('/permanent_redirect_view/')
try:
- self.assertRedirects(response, '/test_client/get_view/')
+ self.assertRedirects(response, '/get_view/')
except AssertionError as e:
self.assertIn("Response didn't redirect as expected: Response code was 301 (expected 302)", str(e))
try:
- self.assertRedirects(response, '/test_client/get_view/', msg_prefix='abc')
+ self.assertRedirects(response, '/get_view/', msg_prefix='abc')
except AssertionError as e:
self.assertIn("abc: Response didn't redirect as expected: Response code was 301 (expected 302)", str(e))
def test_lost_query(self):
"An assertion is raised if the redirect location doesn't preserve GET parameters"
- response = self.client.get('/test_client/redirect_view/', {'var': 'value'})
+ response = self.client.get('/redirect_view/', {'var': 'value'})
try:
- self.assertRedirects(response, '/test_client/get_view/')
+ self.assertRedirects(response, '/get_view/')
except AssertionError as e:
- self.assertIn("Response redirected to 'http://testserver/test_client/get_view/?var=value', expected 'http://testserver/test_client/get_view/'", str(e))
+ self.assertIn("Response redirected to 'http://testserver/get_view/?var=value', expected 'http://testserver/get_view/'", str(e))
try:
- self.assertRedirects(response, '/test_client/get_view/', msg_prefix='abc')
+ self.assertRedirects(response, '/get_view/', msg_prefix='abc')
except AssertionError as e:
- self.assertIn("abc: Response redirected to 'http://testserver/test_client/get_view/?var=value', expected 'http://testserver/test_client/get_view/'", str(e))
+ self.assertIn("abc: Response redirected to 'http://testserver/get_view/?var=value', expected 'http://testserver/get_view/'", str(e))
def test_incorrect_target(self):
"An assertion is raised if the response redirects to another target"
- response = self.client.get('/test_client/permanent_redirect_view/')
+ response = self.client.get('/permanent_redirect_view/')
try:
# Should redirect to get_view
- self.assertRedirects(response, '/test_client/some_view/')
+ self.assertRedirects(response, '/some_view/')
except AssertionError as e:
self.assertIn("Response didn't redirect as expected: Response code was 301 (expected 302)", str(e))
def test_target_page(self):
"An assertion is raised if the response redirect target cannot be retrieved as expected"
- response = self.client.get('/test_client/double_redirect_view/')
+ response = self.client.get('/double_redirect_view/')
try:
# The redirect target responds with a 301 code, not 200
- self.assertRedirects(response, 'http://testserver/test_client/permanent_redirect_view/')
+ self.assertRedirects(response, 'http://testserver/permanent_redirect_view/')
except AssertionError as e:
- self.assertIn("Couldn't retrieve redirection page '/test_client/permanent_redirect_view/': response code was 301 (expected 200)", str(e))
+ self.assertIn("Couldn't retrieve redirection page '/permanent_redirect_view/': response code was 301 (expected 200)", str(e))
try:
# The redirect target responds with a 301 code, not 200
- self.assertRedirects(response, 'http://testserver/test_client/permanent_redirect_view/', msg_prefix='abc')
+ self.assertRedirects(response, 'http://testserver/permanent_redirect_view/', msg_prefix='abc')
except AssertionError as e:
- self.assertIn("abc: Couldn't retrieve redirection page '/test_client/permanent_redirect_view/': response code was 301 (expected 200)", str(e))
+ self.assertIn("abc: Couldn't retrieve redirection page '/permanent_redirect_view/': response code was 301 (expected 200)", str(e))
def test_redirect_chain(self):
"You can follow a redirect chain of multiple redirects"
- response = self.client.get('/test_client_regress/redirects/further/more/', {}, follow=True)
- self.assertRedirects(response, '/test_client_regress/no_template_view/',
+ response = self.client.get('/redirects/further/more/', {}, follow=True)
+ self.assertRedirects(response, '/no_template_view/',
status_code=301, target_status_code=200)
self.assertEqual(len(response.redirect_chain), 1)
- self.assertEqual(response.redirect_chain[0], ('http://testserver/test_client_regress/no_template_view/', 301))
+ self.assertEqual(response.redirect_chain[0], ('http://testserver/no_template_view/', 301))
def test_multiple_redirect_chain(self):
"You can follow a redirect chain of multiple redirects"
- response = self.client.get('/test_client_regress/redirects/', {}, follow=True)
- self.assertRedirects(response, '/test_client_regress/no_template_view/',
+ response = self.client.get('/redirects/', {}, follow=True)
+ self.assertRedirects(response, '/no_template_view/',
status_code=301, target_status_code=200)
self.assertEqual(len(response.redirect_chain), 3)
- self.assertEqual(response.redirect_chain[0], ('http://testserver/test_client_regress/redirects/further/', 301))
- self.assertEqual(response.redirect_chain[1], ('http://testserver/test_client_regress/redirects/further/more/', 301))
- self.assertEqual(response.redirect_chain[2], ('http://testserver/test_client_regress/no_template_view/', 301))
+ self.assertEqual(response.redirect_chain[0], ('http://testserver/redirects/further/', 301))
+ self.assertEqual(response.redirect_chain[1], ('http://testserver/redirects/further/more/', 301))
+ self.assertEqual(response.redirect_chain[2], ('http://testserver/no_template_view/', 301))
def test_redirect_chain_to_non_existent(self):
"You can follow a chain to a non-existent view"
- response = self.client.get('/test_client_regress/redirect_to_non_existent_view2/', {}, follow=True)
- self.assertRedirects(response, '/test_client_regress/non_existent_view/',
+ response = self.client.get('/redirect_to_non_existent_view2/', {}, follow=True)
+ self.assertRedirects(response, '/non_existent_view/',
status_code=301, target_status_code=404)
def test_redirect_chain_to_self(self):
"Redirections to self are caught and escaped"
- response = self.client.get('/test_client_regress/redirect_to_self/', {}, follow=True)
+ response = self.client.get('/redirect_to_self/', {}, follow=True)
# The chain of redirects stops once the cycle is detected.
- self.assertRedirects(response, '/test_client_regress/redirect_to_self/',
+ self.assertRedirects(response, '/redirect_to_self/',
status_code=301, target_status_code=301)
self.assertEqual(len(response.redirect_chain), 2)
def test_circular_redirect(self):
"Circular redirect chains are caught and escaped"
- response = self.client.get('/test_client_regress/circular_redirect_1/', {}, follow=True)
+ response = self.client.get('/circular_redirect_1/', {}, follow=True)
# The chain of redirects will get back to the starting point, but stop there.
- self.assertRedirects(response, '/test_client_regress/circular_redirect_2/',
+ self.assertRedirects(response, '/circular_redirect_2/',
status_code=301, target_status_code=301)
self.assertEqual(len(response.redirect_chain), 4)
def test_redirect_chain_post(self):
"A redirect chain will be followed from an initial POST post"
- response = self.client.post('/test_client_regress/redirects/',
+ response = self.client.post('/redirects/',
{'nothing': 'to_send'}, follow=True)
self.assertRedirects(response,
- '/test_client_regress/no_template_view/', 301, 200)
+ '/no_template_view/', 301, 200)
self.assertEqual(len(response.redirect_chain), 3)
def test_redirect_chain_head(self):
"A redirect chain will be followed from an initial HEAD request"
- response = self.client.head('/test_client_regress/redirects/',
+ response = self.client.head('/redirects/',
{'nothing': 'to_send'}, follow=True)
self.assertRedirects(response,
- '/test_client_regress/no_template_view/', 301, 200)
+ '/no_template_view/', 301, 200)
self.assertEqual(len(response.redirect_chain), 3)
def test_redirect_chain_options(self):
"A redirect chain will be followed from an initial OPTIONS request"
- response = self.client.options('/test_client_regress/redirects/',
+ response = self.client.options('/redirects/',
follow=True)
self.assertRedirects(response,
- '/test_client_regress/no_template_view/', 301, 200)
+ '/no_template_view/', 301, 200)
self.assertEqual(len(response.redirect_chain), 3)
def test_redirect_chain_put(self):
"A redirect chain will be followed from an initial PUT request"
- response = self.client.put('/test_client_regress/redirects/',
+ response = self.client.put('/redirects/',
follow=True)
self.assertRedirects(response,
- '/test_client_regress/no_template_view/', 301, 200)
+ '/no_template_view/', 301, 200)
self.assertEqual(len(response.redirect_chain), 3)
def test_redirect_chain_delete(self):
"A redirect chain will be followed from an initial DELETE request"
- response = self.client.delete('/test_client_regress/redirects/',
+ response = self.client.delete('/redirects/',
follow=True)
self.assertRedirects(response,
- '/test_client_regress/no_template_view/', 301, 200)
+ '/no_template_view/', 301, 200)
self.assertEqual(len(response.redirect_chain), 3)
def test_redirect_to_different_host(self):
"The test client will preserve scheme, host and port changes"
- response = self.client.get('/test_client_regress/redirect_other_host/', follow=True)
+ response = self.client.get('/redirect_other_host/', follow=True)
self.assertRedirects(response,
- 'https://otherserver:8443/test_client_regress/no_template_view/',
+ 'https://otherserver:8443/no_template_view/',
status_code=301, target_status_code=200)
# We can't use is_secure() or get_host()
# because response.request is a dictionary, not an HttpRequest
@@ -410,28 +415,28 @@ class AssertRedirectsTests(TestCase):
def test_redirect_chain_on_non_redirect_page(self):
"An assertion is raised if the original page couldn't be retrieved as expected"
# This page will redirect with code 301, not 302
- response = self.client.get('/test_client/get_view/', follow=True)
+ response = self.client.get('/get_view/', follow=True)
try:
- self.assertRedirects(response, '/test_client/get_view/')
+ self.assertRedirects(response, '/get_view/')
except AssertionError as e:
self.assertIn("Response didn't redirect as expected: Response code was 200 (expected 302)", str(e))
try:
- self.assertRedirects(response, '/test_client/get_view/', msg_prefix='abc')
+ self.assertRedirects(response, '/get_view/', msg_prefix='abc')
except AssertionError as e:
self.assertIn("abc: Response didn't redirect as expected: Response code was 200 (expected 302)", str(e))
def test_redirect_on_non_redirect_page(self):
"An assertion is raised if the original page couldn't be retrieved as expected"
# This page will redirect with code 301, not 302
- response = self.client.get('/test_client/get_view/')
+ response = self.client.get('/get_view/')
try:
- self.assertRedirects(response, '/test_client/get_view/')
+ self.assertRedirects(response, '/get_view/')
except AssertionError as e:
self.assertIn("Response didn't redirect as expected: Response code was 200 (expected 302)", str(e))
try:
- self.assertRedirects(response, '/test_client/get_view/', msg_prefix='abc')
+ self.assertRedirects(response, '/get_view/', msg_prefix='abc')
except AssertionError as e:
self.assertIn("abc: Response didn't redirect as expected: Response code was 200 (expected 302)", str(e))
@@ -439,22 +444,24 @@ class AssertRedirectsTests(TestCase):
"An assertion is raised if the response doesn't have the scheme specified in expected_url"
# Assure that original request scheme is preserved if no scheme specified in the redirect location
- response = self.client.get('/test_client/redirect_view/', secure=True)
- self.assertRedirects(response, 'https://testserver/test_client/get_view/')
+ response = self.client.get('/redirect_view/', secure=True)
+ self.assertRedirects(response, 'https://testserver/get_view/')
# For all possible True/False combinations of follow and secure
for follow, secure in itertools.product([True, False], repeat=2):
# always redirects to https
- response = self.client.get('/test_client/https_redirect_view/', follow=follow, secure=secure)
+ response = self.client.get('/https_redirect_view/', follow=follow, secure=secure)
# no scheme to compare too, always succeeds
- self.assertRedirects(response, '/test_client/secure_view/', status_code=301)
+ self.assertRedirects(response, '/secure_view/', status_code=301)
# the goal scheme is https
- self.assertRedirects(response, 'https://testserver/test_client/secure_view/', status_code=301)
+ self.assertRedirects(response, 'https://testserver/secure_view/', status_code=301)
with self.assertRaises(AssertionError):
- self.assertRedirects(response, 'http://testserver/test_client/secure_view/', status_code=301)
+ self.assertRedirects(response, 'http://testserver/secure_view/', status_code=301)
class AssertFormErrorTests(TestCase):
+ urls = 'test_client_regress.urls'
+
def test_unknown_form(self):
"An assertion is raised if the form name is unknown"
post_data = {
@@ -464,7 +471,7 @@ class AssertFormErrorTests(TestCase):
'single': 'b',
'multi': ('b', 'c', 'e')
}
- response = self.client.post('/test_client/form_view/', post_data)
+ response = self.client.post('/form_view/', post_data)
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(response, "Invalid POST Template")
@@ -486,7 +493,7 @@ class AssertFormErrorTests(TestCase):
'single': 'b',
'multi': ('b', 'c', 'e')
}
- response = self.client.post('/test_client/form_view/', post_data)
+ response = self.client.post('/form_view/', post_data)
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(response, "Invalid POST Template")
@@ -508,7 +515,7 @@ class AssertFormErrorTests(TestCase):
'single': 'b',
'multi': ('b', 'c', 'e')
}
- response = self.client.post('/test_client/form_view/', post_data)
+ response = self.client.post('/form_view/', post_data)
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(response, "Invalid POST Template")
@@ -530,7 +537,7 @@ class AssertFormErrorTests(TestCase):
'single': 'b',
'multi': ('b', 'c', 'e')
}
- response = self.client.post('/test_client/form_view/', post_data)
+ response = self.client.post('/form_view/', post_data)
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(response, "Invalid POST Template")
@@ -555,7 +562,7 @@ class AssertFormErrorTests(TestCase):
'single': 'b',
'multi': ('b', 'c', 'e')
}
- response = self.client.post('/test_client/form_view/', post_data)
+ response = self.client.post('/form_view/', post_data)
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(response, "Invalid POST Template")
@@ -570,6 +577,7 @@ class AssertFormErrorTests(TestCase):
class AssertFormsetErrorTests(TestCase):
+ urls = 'test_client_regress.urls'
msg_prefixes = [("", {}), ("abc: ", {"msg_prefix": "abc"})]
def setUp(self):
@@ -606,7 +614,7 @@ class AssertFormsetErrorTests(TestCase):
})
def getResponse(self, post_data):
- response = self.client.post('/test_client/formset_view/', post_data)
+ response = self.client.post('/formset_view/', post_data)
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(response, "Invalid POST Template")
return response
@@ -769,6 +777,7 @@ class ProcessedMiddleware(object):
@override_settings(PASSWORD_HASHERS=('django.contrib.auth.hashers.SHA1PasswordHasher',))
class LoginTests(TestCase):
+ urls = 'test_client_regress.urls'
fixtures = ['testdata']
def test_login_different_client(self):
@@ -780,12 +789,12 @@ class LoginTests(TestCase):
self.assertTrue(login, 'Could not log in')
# Get a redirection page with the second client.
- response = c.get("/test_client_regress/login_protected_redirect_view/")
+ response = c.get("/login_protected_redirect_view/")
# At this points, the self.client isn't logged in.
# Check that assertRedirects uses the original client, not the
# default client.
- self.assertRedirects(response, "http://testserver/test_client_regress/get_view/")
+ self.assertRedirects(response, "http://testserver/get_view/")
@override_settings(
MIDDLEWARE_CLASSES=list(settings.MIDDLEWARE_CLASSES) +
@@ -811,6 +820,7 @@ class LoginTests(TestCase):
SESSION_ENGINE='test_client_regress.session'
)
class SessionEngineTests(TestCase):
+ urls = 'test_client_regress.urls'
fixtures = ['testdata']
def test_login(self):
@@ -819,12 +829,14 @@ class SessionEngineTests(TestCase):
self.assertTrue(login, 'Could not log in')
# Try to access a login protected page.
- response = self.client.get("/test_client/login_protected_view/")
+ response = self.client.get("/login_protected_view/")
self.assertEqual(response.status_code, 200)
self.assertEqual(response.context['user'].username, 'testclient')
class URLEscapingTests(TestCase):
+ urls = 'test_client_regress.urls'
+
def test_simple_argument_get(self):
"Get a view that has a simple string argument"
response = self.client.get(reverse('arg_view', args=['Slartibartfast']))
@@ -852,6 +864,7 @@ class URLEscapingTests(TestCase):
@override_settings(PASSWORD_HASHERS=('django.contrib.auth.hashers.SHA1PasswordHasher',))
class ExceptionTests(TestCase):
+ urls = 'test_client_regress.urls'
fixtures = ['testdata.json']
def test_exception_cleared(self):
@@ -860,7 +873,7 @@ class ExceptionTests(TestCase):
login = self.client.login(username='testclient', password='password')
self.assertTrue(login, 'Could not log in')
try:
- self.client.get("/test_client_regress/staff_only/")
+ self.client.get("/staff_only/")
self.fail("General users should not be able to visit this page")
except CustomTestException:
pass
@@ -871,12 +884,14 @@ class ExceptionTests(TestCase):
login = self.client.login(username='staff', password='password')
self.assertTrue(login, 'Could not log in')
try:
- self.client.get("/test_client_regress/staff_only/")
+ self.client.get("/staff_only/")
except CustomTestException:
self.fail("Staff should be able to visit this page")
class TemplateExceptionTests(TestCase):
+ urls = 'test_client_regress.urls'
+
def setUp(self):
# Reset the loaders so they don't try to render cached templates.
if loader.template_source_loaders is not None:
@@ -911,19 +926,24 @@ class UrlconfSubstitutionTests(TestCase):
# This test needs to run *after* UrlconfSubstitutionTests; the zz prefix in the
# name is to ensure alphabetical ordering.
class zzUrlconfSubstitutionTests(TestCase):
+
def test_urlconf_was_reverted(self):
- "URLconf is reverted to original value after modification in a TestCase"
- url = reverse('arg_view', args=['somename'])
- self.assertEqual(url, '/test_client_regress/arg_view/somename/')
+ """URLconf is reverted to original value after modification in a TestCase
+
+ This will not find a match as the default ROOT_URLCONF is empty.
+ """
+ with self.assertRaises(NoReverseMatch):
+ reverse('arg_view', args=['somename'])
@override_settings(PASSWORD_HASHERS=('django.contrib.auth.hashers.SHA1PasswordHasher',))
class ContextTests(TestCase):
+ urls = 'test_client_regress.urls'
fixtures = ['testdata']
def test_single_context(self):
"Context variables can be retrieved from a single context"
- response = self.client.get("/test_client_regress/request_data/", data={'foo': 'whiz'})
+ response = self.client.get("/request_data/", data={'foo': 'whiz'})
self.assertEqual(response.context.__class__, Context)
self.assertTrue('get-foo' in response.context)
self.assertEqual(response.context['get-foo'], 'whiz')
@@ -938,7 +958,7 @@ class ContextTests(TestCase):
def test_inherited_context(self):
"Context variables can be retrieved from a list of contexts"
- response = self.client.get("/test_client_regress/request_data_extended/", data={'foo': 'whiz'})
+ response = self.client.get("/request_data_extended/", data={'foo': 'whiz'})
self.assertEqual(response.context.__class__, ContextList)
self.assertEqual(len(response.context), 2)
self.assertTrue('get-foo' in response.context)
@@ -973,8 +993,8 @@ class ContextTests(TestCase):
# copying RequestContext.
try:
django.template.context._standard_context_processors = (lambda request: {'path': request.special_path},)
- response = self.client.get("/test_client_regress/request_context_view/")
- self.assertContains(response, 'Path: /test_client_regress/request_context_view/')
+ response = self.client.get("/request_context_view/")
+ self.assertContains(response, 'Path: /request_context_view/')
finally:
django.template.context._standard_context_processors = None
@@ -982,29 +1002,30 @@ class ContextTests(TestCase):
"""
response.context is not lost when view call another view.
"""
- response = self.client.get("/test_client_regress/nested_view/")
+ response = self.client.get("/nested_view/")
self.assertEqual(response.context.__class__, Context)
self.assertEqual(response.context['nested'], 'yes')
@override_settings(PASSWORD_HASHERS=('django.contrib.auth.hashers.SHA1PasswordHasher',))
class SessionTests(TestCase):
+ urls = 'test_client_regress.urls'
fixtures = ['testdata.json']
def test_session(self):
"The session isn't lost if a user logs in"
# The session doesn't exist to start.
- response = self.client.get('/test_client_regress/check_session/')
+ response = self.client.get('/check_session/')
self.assertEqual(response.status_code, 200)
self.assertEqual(response.content, b'NO')
# This request sets a session variable.
- response = self.client.get('/test_client_regress/set_session/')
+ response = self.client.get('/set_session/')
self.assertEqual(response.status_code, 200)
self.assertEqual(response.content, b'set_session')
# Check that the session has been modified
- response = self.client.get('/test_client_regress/check_session/')
+ response = self.client.get('/check_session/')
self.assertEqual(response.status_code, 200)
self.assertEqual(response.content, b'YES')
@@ -1013,7 +1034,7 @@ class SessionTests(TestCase):
self.assertTrue(login, 'Could not log in')
# Session should still contain the modified value
- response = self.client.get('/test_client_regress/check_session/')
+ response = self.client.get('/check_session/')
self.assertEqual(response.status_code, 200)
self.assertEqual(response.content, b'YES')
@@ -1096,21 +1117,23 @@ class SessionTests(TestCase):
class RequestMethodTests(TestCase):
+ urls = 'test_client_regress.urls'
+
def test_get(self):
"Request a view via request method GET"
- response = self.client.get('/test_client_regress/request_methods/')
+ response = self.client.get('/request_methods/')
self.assertEqual(response.status_code, 200)
self.assertEqual(response.content, b'request method: GET')
def test_post(self):
"Request a view via request method POST"
- response = self.client.post('/test_client_regress/request_methods/')
+ response = self.client.post('/request_methods/')
self.assertEqual(response.status_code, 200)
self.assertEqual(response.content, b'request method: POST')
def test_head(self):
"Request a view via request method HEAD"
- response = self.client.head('/test_client_regress/request_methods/')
+ response = self.client.head('/request_methods/')
self.assertEqual(response.status_code, 200)
# A HEAD request doesn't return any content.
self.assertNotEqual(response.content, b'request method: HEAD')
@@ -1118,35 +1141,37 @@ class RequestMethodTests(TestCase):
def test_options(self):
"Request a view via request method OPTIONS"
- response = self.client.options('/test_client_regress/request_methods/')
+ response = self.client.options('/request_methods/')
self.assertEqual(response.status_code, 200)
self.assertEqual(response.content, b'request method: OPTIONS')
def test_put(self):
"Request a view via request method PUT"
- response = self.client.put('/test_client_regress/request_methods/')
+ response = self.client.put('/request_methods/')
self.assertEqual(response.status_code, 200)
self.assertEqual(response.content, b'request method: PUT')
def test_delete(self):
"Request a view via request method DELETE"
- response = self.client.delete('/test_client_regress/request_methods/')
+ response = self.client.delete('/request_methods/')
self.assertEqual(response.status_code, 200)
self.assertEqual(response.content, b'request method: DELETE')
def test_patch(self):
"Request a view via request method PATCH"
- response = self.client.patch('/test_client_regress/request_methods/')
+ response = self.client.patch('/request_methods/')
self.assertEqual(response.status_code, 200)
self.assertEqual(response.content, b'request method: PATCH')
class RequestMethodStringDataTests(TestCase):
+ urls = 'test_client_regress.urls'
+
def test_post(self):
"Request a view with string data via request method POST"
# Regression test for #11371
data = '{"test": "json"}'
- response = self.client.post('/test_client_regress/request_methods/', data=data, content_type='application/json')
+ response = self.client.post('/request_methods/', data=data, content_type='application/json')
self.assertEqual(response.status_code, 200)
self.assertEqual(response.content, b'request method: POST')
@@ -1154,7 +1179,7 @@ class RequestMethodStringDataTests(TestCase):
"Request a view with string data via request method PUT"
# Regression test for #11371
data = '{"test": "json"}'
- response = self.client.put('/test_client_regress/request_methods/', data=data, content_type='application/json')
+ response = self.client.put('/request_methods/', data=data, content_type='application/json')
self.assertEqual(response.status_code, 200)
self.assertEqual(response.content, b'request method: PUT')
@@ -1162,32 +1187,34 @@ class RequestMethodStringDataTests(TestCase):
"Request a view with string data via request method PATCH"
# Regression test for #17797
data = '{"test": "json"}'
- response = self.client.patch('/test_client_regress/request_methods/', data=data, content_type='application/json')
+ response = self.client.patch('/request_methods/', data=data, content_type='application/json')
self.assertEqual(response.status_code, 200)
self.assertEqual(response.content, b'request method: PATCH')
class QueryStringTests(TestCase):
+ urls = 'test_client_regress.urls'
+
def test_get_like_requests(self):
# See: https://code.djangoproject.com/ticket/10571.
for method_name in ('get', 'head'):
# A GET-like request can pass a query string as data
method = getattr(self.client, method_name)
- response = method("/test_client_regress/request_data/", data={'foo': 'whiz'})
+ response = method("/request_data/", data={'foo': 'whiz'})
self.assertEqual(response.context['get-foo'], 'whiz')
self.assertEqual(response.context['request-foo'], 'whiz')
# A GET-like request can pass a query string as part of the URL
- response = method("/test_client_regress/request_data/?foo=whiz")
+ response = method("/request_data/?foo=whiz")
self.assertEqual(response.context['get-foo'], 'whiz')
self.assertEqual(response.context['request-foo'], 'whiz')
# Data provided in the URL to a GET-like request is overridden by actual form data
- response = method("/test_client_regress/request_data/?foo=whiz", data={'foo': 'bang'})
+ response = method("/request_data/?foo=whiz", data={'foo': 'bang'})
self.assertEqual(response.context['get-foo'], 'bang')
self.assertEqual(response.context['request-foo'], 'bang')
- response = method("/test_client_regress/request_data/?foo=whiz", data={'bar': 'bang'})
+ response = method("/request_data/?foo=whiz", data={'bar': 'bang'})
self.assertEqual(response.context['get-foo'], None)
self.assertEqual(response.context['get-bar'], 'bang')
self.assertEqual(response.context['request-foo'], None)
@@ -1195,23 +1222,23 @@ class QueryStringTests(TestCase):
def test_post_like_requests(self):
# A POST-like request can pass a query string as data
- response = self.client.post("/test_client_regress/request_data/", data={'foo': 'whiz'})
+ response = self.client.post("/request_data/", data={'foo': 'whiz'})
self.assertEqual(response.context['get-foo'], None)
self.assertEqual(response.context['post-foo'], 'whiz')
# A POST-like request can pass a query string as part of the URL
- response = self.client.post("/test_client_regress/request_data/?foo=whiz")
+ response = self.client.post("/request_data/?foo=whiz")
self.assertEqual(response.context['get-foo'], 'whiz')
self.assertEqual(response.context['post-foo'], None)
self.assertEqual(response.context['request-foo'], 'whiz')
# POST data provided in the URL augments actual form data
- response = self.client.post("/test_client_regress/request_data/?foo=whiz", data={'foo': 'bang'})
+ response = self.client.post("/request_data/?foo=whiz", data={'foo': 'bang'})
self.assertEqual(response.context['get-foo'], 'whiz')
self.assertEqual(response.context['post-foo'], 'bang')
self.assertEqual(response.context['request-foo'], 'bang')
- response = self.client.post("/test_client_regress/request_data/?foo=whiz", data={'bar': 'bang'})
+ response = self.client.post("/request_data/?foo=whiz", data={'bar': 'bang'})
self.assertEqual(response.context['get-foo'], 'whiz')
self.assertEqual(response.context['get-bar'], None)
self.assertEqual(response.context['post-foo'], None)
@@ -1221,11 +1248,13 @@ class QueryStringTests(TestCase):
class UnicodePayloadTests(TestCase):
+ urls = 'test_client_regress.urls'
+
def test_simple_unicode_payload(self):
"A simple ASCII-only unicode JSON document can be POSTed"
# Regression test for #10571
json = '{"english": "mountain pass"}'
- response = self.client.post("/test_client_regress/parse_unicode_json/", json,
+ response = self.client.post("/parse_unicode_json/", json,
content_type="application/json")
self.assertEqual(response.content, json.encode())
@@ -1233,7 +1262,7 @@ class UnicodePayloadTests(TestCase):
"A non-ASCII unicode data encoded as UTF-8 can be POSTed"
# Regression test for #10571
json = '{"dog": "собака"}'
- response = self.client.post("/test_client_regress/parse_unicode_json/", json,
+ response = self.client.post("/parse_unicode_json/", json,
content_type="application/json; charset=utf-8")
self.assertEqual(response.content, json.encode('utf-8'))
@@ -1241,7 +1270,7 @@ class UnicodePayloadTests(TestCase):
"A non-ASCII unicode data encoded as UTF-16 can be POSTed"
# Regression test for #10571
json = '{"dog": "собака"}'
- response = self.client.post("/test_client_regress/parse_unicode_json/", json,
+ response = self.client.post("/parse_unicode_json/", json,
content_type="application/json; charset=utf-16")
self.assertEqual(response.content, json.encode('utf-16'))
@@ -1249,7 +1278,7 @@ class UnicodePayloadTests(TestCase):
"A non-ASCII unicode data as a non-UTF based encoding can be POSTed"
# Regression test for #10571
json = '{"dog": "собака"}'
- response = self.client.post("/test_client_regress/parse_unicode_json/", json,
+ response = self.client.post("/parse_unicode_json/", json,
content_type="application/json; charset=koi8-r")
self.assertEqual(response.content, json.encode('koi8-r'))
@@ -1284,11 +1313,12 @@ class UploadedFileEncodingTest(TestCase):
class RequestHeadersTest(TestCase):
+ urls = 'test_client_regress.urls'
fixtures = ['testdata']
def test_client_headers(self):
"A test client can receive custom headers"
- response = self.client.get("/test_client_regress/check_headers/", HTTP_X_ARG_CHECK='Testing 123')
+ response = self.client.get("/check_headers/", HTTP_X_ARG_CHECK='Testing 123')
self.assertEqual(response.content, b"HTTP_X_ARG_CHECK: Testing 123")
self.assertEqual(response.status_code, 200)
@@ -1312,9 +1342,9 @@ class RequestHeadersTest(TestCase):
def test_client_headers_redirect(self):
"Test client headers are preserved through redirects"
- response = self.client.get("/test_client_regress/check_headers_redirect/", follow=True, HTTP_X_ARG_CHECK='Testing 123')
+ response = self.client.get("/check_headers_redirect/", follow=True, HTTP_X_ARG_CHECK='Testing 123')
self.assertEqual(response.content, b"HTTP_X_ARG_CHECK: Testing 123")
- self.assertRedirects(response, '/test_client_regress/check_headers/',
+ self.assertRedirects(response, '/check_headers/',
status_code=301, target_status_code=200)
@@ -1325,28 +1355,29 @@ class ReadLimitedStreamTest(TestCase):
Refs #14753, #15785
"""
+ urls = 'test_client_regress.urls'
def test_body_from_empty_request(self):
"""HttpRequest.body on a test client GET request should return
the empty string."""
- self.assertEqual(self.client.get("/test_client_regress/body/").content, b'')
+ self.assertEqual(self.client.get("/body/").content, b'')
def test_read_from_empty_request(self):
"""HttpRequest.read() on a test client GET request should return the
empty string."""
- self.assertEqual(self.client.get("/test_client_regress/read_all/").content, b'')
+ self.assertEqual(self.client.get("/read_all/").content, b'')
def test_read_numbytes_from_empty_request(self):
"""HttpRequest.read(LARGE_BUFFER) on a test client GET request should
return the empty string."""
- self.assertEqual(self.client.get("/test_client_regress/read_buffer/").content, b'')
+ self.assertEqual(self.client.get("/read_buffer/").content, b'')
def test_read_from_nonempty_request(self):
"""HttpRequest.read() on a test client PUT request with some payload
should return that payload."""
payload = b'foobar'
self.assertEqual(self.client.put(
- "/test_client_regress/read_all/",
+ "/read_all/",
data=payload,
content_type='text/plain').content, payload)
@@ -1355,7 +1386,7 @@ class ReadLimitedStreamTest(TestCase):
some payload should return that payload."""
payload = b'foobar'
self.assertEqual(
- self.client.put("/test_client_regress/read_buffer/",
+ self.client.put("/read_buffer/",
data=payload,
content_type='text/plain').content, payload)
@@ -1367,6 +1398,7 @@ class RequestFactoryStateTest(TestCase):
# ensuring test isolation behavior. So, unusually, it doesn't make sense to
# run the tests individually, and if any are failing it is confusing to run
# them with any other set of tests.
+ urls = 'test_client_regress.urls'
def common_test_that_should_always_pass(self):
request = RequestFactory().get('/')
@@ -1391,6 +1423,7 @@ class RequestFactoryEnvironmentTests(TestCase):
Regression tests for #8551 and #17067: ensure that environment variables
are set correctly in RequestFactory.
"""
+ urls = 'test_client_regress.urls'
def test_should_set_correct_env_variables(self):
request = RequestFactory().get('/path/')
diff --git a/tests/test_client_regress/urls.py b/tests/test_client_regress/urls.py
index f61b58c935..c789fed2e7 100644
--- a/tests/test_client_regress/urls.py
+++ b/tests/test_client_regress/urls.py
@@ -1,10 +1,12 @@
-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),
diff --git a/tests/test_client_regress/views.py b/tests/test_client_regress/views.py
index 2fbbce0c43..db5de3bf87 100644
--- a/tests/test_client_regress/views.py
+++ b/tests/test_client_regress/views.py
@@ -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)
diff --git a/tests/urls.py b/tests/urls.py
index 1540e71e18..34e3afcb83 100644
--- a/tests/urls.py
+++ b/tests/urls.py
@@ -1,33 +1,8 @@
-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('')
diff --git a/tests/view_tests/models.py b/tests/view_tests/models.py
index f2707b1796..cb45d915f3 100644
--- a/tests/view_tests/models.py
+++ b/tests/view_tests/models.py
@@ -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
diff --git a/tests/view_tests/tests/test_debug.py b/tests/view_tests/tests/test_debug.py
index ca08f3cce9..44e70347bd 100644
--- a/tests/view_tests/tests/test_debug.py
+++ b/tests/view_tests/tests/test_debug.py
@@ -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)
diff --git a/tests/view_tests/tests/test_defaults.py b/tests/view_tests/tests/test_defaults.py
index 128fb7cb07..38a11dfcb1 100644
--- a/tests/view_tests/tests/test_defaults.py
+++ b/tests/view_tests/tests/test_defaults.py
@@ -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')
diff --git a/tests/view_tests/tests/test_i18n.py b/tests/view_tests/tests/test_i18n.py
index a939fd6fc1..1262ad4786 100644
--- a/tests/view_tests/tests/test_i18n.py
+++ b/tests/view_tests/tests/test_i18n.py
@@ -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'))
diff --git a/tests/view_tests/tests/test_static.py b/tests/view_tests/tests/test_static.py
index 8b051c5e62..6b2d961c5e 100644
--- a/tests/view_tests/tests/test_static.py
+++ b/tests/view_tests/tests/test_static.py
@@ -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)