diff options
author | Xaroth Brook <xaroth@xaroth.nl> | 2018-05-26 22:56:17 +0200 |
---|---|---|
committer | Tim Graham <timograham@gmail.com> | 2018-05-26 20:13:48 -0400 |
commit | 39283c8edbc5991b589d48a8e17152042193f2df (patch) | |
tree | d6d9252b66050f139c70a56ca4c7490aecc1273c /tests/urlpatterns | |
parent | e01fa015c0fca32bb740b575c8fbfd388d8f4957 (diff) | |
download | django-39283c8edbc5991b589d48a8e17152042193f2df.tar.gz |
Fixed #29415 -- Fixed detection of custom URL converters in included patterns.
Diffstat (limited to 'tests/urlpatterns')
-rw-r--r-- | tests/urlpatterns/path_base64_urls.py | 8 | ||||
-rw-r--r-- | tests/urlpatterns/tests.py | 30 |
2 files changed, 30 insertions, 8 deletions
diff --git a/tests/urlpatterns/path_base64_urls.py b/tests/urlpatterns/path_base64_urls.py index 872636f06c..9b69f929fe 100644 --- a/tests/urlpatterns/path_base64_urls.py +++ b/tests/urlpatterns/path_base64_urls.py @@ -1,9 +1,15 @@ -from django.urls import path, register_converter +from django.urls import include, path, register_converter from . import converters, views register_converter(converters.Base64Converter, 'base64') +subpatterns = [ + path('<base64:value>/', views.empty_view, name='subpattern-base64'), +] + urlpatterns = [ path('base64/<base64:value>/', views.empty_view, name='base64'), + path('base64/<base64:base>/subpatterns/', include(subpatterns)), + path('base64/<base64:base>/namespaced/', include((subpatterns, 'namespaced-base64'))), ] 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/') |