From 39283c8edbc5991b589d48a8e17152042193f2df Mon Sep 17 00:00:00 2001 From: Xaroth Brook Date: Sat, 26 May 2018 22:56:17 +0200 Subject: Fixed #29415 -- Fixed detection of custom URL converters in included patterns. --- tests/urlpatterns/path_base64_urls.py | 8 +++++++- tests/urlpatterns/tests.py | 30 +++++++++++++++++++++++------- 2 files changed, 30 insertions(+), 8 deletions(-) (limited to 'tests/urlpatterns') 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('/', views.empty_view, name='subpattern-base64'), +] + urlpatterns = [ path('base64//', views.empty_view, name='base64'), + path('base64//subpatterns/', include(subpatterns)), + path('base64//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/') -- cgit v1.2.1