From 82a88d2f48e13ef5d472741d5ed1c183230cfe4c Mon Sep 17 00:00:00 2001 From: Mariusz Felisiak Date: Fri, 6 Dec 2019 09:32:51 +0100 Subject: Fixed #31061 -- Ignored positional args in django.urls.resolve() when all optional named parameters are missing. Regression in 76b993a117b61c41584e95149a67d8a1e9f49dd1. Thanks Claude Paroz for the report and Carlton Gibson for reviews. --- tests/urlpatterns/path_urls.py | 5 +++++ tests/urlpatterns/tests.py | 10 ++++++++++ 2 files changed, 15 insertions(+) (limited to 'tests/urlpatterns') diff --git a/tests/urlpatterns/path_urls.py b/tests/urlpatterns/path_urls.py index b40801b39d..afc15f30af 100644 --- a/tests/urlpatterns/path_urls.py +++ b/tests/urlpatterns/path_urls.py @@ -12,6 +12,11 @@ urlpatterns = [ path('included_urls/', include('urlpatterns.included_urls')), re_path(r'^regex/(?P[0-9]+)/$', views.empty_view, name='regex'), re_path(r'^regex_optional/(?P\d+)/(?:(?P\d+)/)?', views.empty_view, name='regex_optional'), + re_path( + r'^regex_only_optional/(?:(?P\d+)/)?', + views.empty_view, + name='regex_only_optional', + ), path('', include('urlpatterns.more_urls')), path('//', views.empty_view, name='lang-and-path'), ] diff --git a/tests/urlpatterns/tests.py b/tests/urlpatterns/tests.py index 92c4e6399e..b149e0d512 100644 --- a/tests/urlpatterns/tests.py +++ b/tests/urlpatterns/tests.py @@ -68,6 +68,16 @@ class SimplifiedURLTests(SimpleTestCase): r'^regex_optional/(?P\d+)/(?:(?P\d+)/)?', ) + def test_re_path_with_missing_optional_parameter(self): + match = resolve('/regex_only_optional/') + self.assertEqual(match.url_name, 'regex_only_optional') + self.assertEqual(match.kwargs, {}) + self.assertEqual(match.args, ()) + self.assertEqual( + match.route, + r'^regex_only_optional/(?:(?P\d+)/)?', + ) + def test_path_lookup_with_inclusion(self): match = resolve('/included_urls/extra/something/') self.assertEqual(match.url_name, 'inner-extra') -- cgit v1.3