1
# -*- coding: utf-8 -*-
2
3
Unit tests for reverse URL lookups.
4
5
from __future__ import absolute_import
6
9
from django.conf import settings
7
10
from django.core.exceptions import ImproperlyConfigured, ViewDoesNotExist
8
11
from django.core.urlresolvers import (reverse, resolve, NoReverseMatch,
267
270
self.assertEqual(res['Location'], '/foo/')
268
271
res = redirect('http://example.com/')
269
272
self.assertEqual(res['Location'], 'http://example.com/')
273
# Assert that we can redirect using UTF-8 strings
274
res = redirect('/æøå/abc/')
275
self.assertEqual(res['Location'], '/%C3%A6%C3%B8%C3%A5/abc/')
276
# Assert that no imports are attempted when dealing with a relative path
277
# (previously, the below would resolve in a UnicodeEncodeError from __import__ )
278
res = redirect('/æøå.abc/')
279
self.assertEqual(res['Location'], '/%C3%A6%C3%B8%C3%A5.abc/')
280
res = redirect('os.path')
281
self.assertEqual(res['Location'], 'os.path')
283
def test_no_illegal_imports(self):
284
# modules that are not listed in urlpatterns should not be importable
285
redirect("urlpatterns_reverse.nonimported_module.view")
286
self.assertNotIn("urlpatterns_reverse.nonimported_module", sys.modules)
288
def test_reverse_by_path_nested(self):
289
# Views that are added to urlpatterns using include() should be
290
# reversable by doted path.
291
self.assertEqual(reverse('regressiontests.urlpatterns_reverse.views.nested_view'), '/includes/nested_path/')
271
293
def test_redirect_view_object(self):
272
294
from .views import absolute_kwargs_view
510
532
self.assertRaises(ViewDoesNotExist, self.client.get, '/missing_inner/')
511
533
self.assertRaises(ViewDoesNotExist, self.client.get, '/missing_outer/')
512
534
self.assertRaises(ViewDoesNotExist, self.client.get, '/uncallable/')