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 '//!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={}), - ' Lookup Linkin Park' % dict(admin_static_prefix(), bandpk=band.pk) + ' Lookup Linkin Park' % 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={}), - ' Lookup Apple' % admin_static_prefix() + ' Lookup Apple' % 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={}), - ' Lookup Hidden' % admin_static_prefix() + ' Lookup Hidden' % 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={}), - ' Lookup' % dict(admin_static_prefix(), m1pk=m1.pk, m2pk=m2.pk) + ' Lookup' % dict(admin_static_prefix(), m1pk=m1.pk, m2pk=m2.pk) ) self.assertHTMLEqual( w.render('test', [m1.pk]), - ' Lookup' % dict(admin_static_prefix(), m1pk=m1.pk) + ' Lookup' % 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 = """BlinkMalcolm Gladwell""" - 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.+)/$', 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, '

403 Forbidden

', 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 # '
', not '
# 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)