summaryrefslogtreecommitdiff
path: root/tests/urlpatterns/tests.py
diff options
context:
space:
mode:
authorXaroth Brook <xaroth@xaroth.nl>2018-05-26 22:56:17 +0200
committerTim Graham <timograham@gmail.com>2018-05-26 20:29:29 -0400
commit39e61669e0c4299228dca751852002946ebe5d5e (patch)
tree98fd504af593cdc2a6716be4ad48439805929c95 /tests/urlpatterns/tests.py
parent40d87681580ee4f223bcd5ba227ef6ab324a6909 (diff)
[2.1.x] Fixed #29415 -- Fixed detection of custom URL converters in included patterns.
Backport of 39283c8edbc5991b589d48a8e17152042193f2df from master
Diffstat (limited to 'tests/urlpatterns/tests.py')
-rw-r--r--tests/urlpatterns/tests.py30
1 files changed, 23 insertions, 7 deletions
diff --git a/tests/urlpatterns/tests.py b/tests/urlpatterns/tests.py
index b200aed06d..b3d97ec5b9 100644
--- a/tests/urlpatterns/tests.py
+++ b/tests/urlpatterns/tests.py
@@ -8,6 +8,15 @@ from django.urls import Resolver404, path, resolve, reverse
from .converters import DynamicConverter
from .views import empty_view
+included_kwargs = {'base': b'hello', 'value': b'world'}
+converter_test_data = (
+ # ('url', ('url_name', 'app_name', {kwargs})),
+ # aGVsbG8= is 'hello' encoded in base64.
+ ('/base64/aGVsbG8=/', ('base64', '', {'value': b'hello'})),
+ ('/base64/aGVsbG8=/subpatterns/d29ybGQ=/', ('subpattern-base64', '', included_kwargs)),
+ ('/base64/aGVsbG8=/namespaced/d29ybGQ=/', ('subpattern-base64', 'namespaced-base64', included_kwargs)),
+)
+
@override_settings(ROOT_URLCONF='urlpatterns.path_urls')
class SimplifiedURLTests(SimpleTestCase):
@@ -44,15 +53,22 @@ class SimplifiedURLTests(SimpleTestCase):
self.assertEqual(url, '/articles/2015/4/12/')
@override_settings(ROOT_URLCONF='urlpatterns.path_base64_urls')
- def test_non_identical_converter_resolve(self):
- match = resolve('/base64/aGVsbG8=/') # base64 of 'hello'
- self.assertEqual(match.url_name, 'base64')
- self.assertEqual(match.kwargs, {'value': b'hello'})
+ def test_converter_resolve(self):
+ for url, (url_name, app_name, kwargs) in converter_test_data:
+ with self.subTest(url=url):
+ match = resolve(url)
+ self.assertEqual(match.url_name, url_name)
+ self.assertEqual(match.app_name, app_name)
+ self.assertEqual(match.kwargs, kwargs)
@override_settings(ROOT_URLCONF='urlpatterns.path_base64_urls')
- def test_non_identical_converter_reverse(self):
- url = reverse('base64', kwargs={'value': b'hello'})
- self.assertEqual(url, '/base64/aGVsbG8=/')
+ def test_converter_reverse(self):
+ for expected, (url_name, app_name, kwargs) in converter_test_data:
+ if app_name:
+ url_name = '%s:%s' % (app_name, url_name)
+ with self.subTest(url=url_name):
+ url = reverse(url_name, kwargs=kwargs)
+ self.assertEqual(url, expected)
def test_path_inclusion_is_matchable(self):
match = resolve('/included_urls/extra/something/')