diff options
author | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2019-12-06 09:32:51 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-12-06 09:32:51 +0100 |
commit | 82a88d2f48e13ef5d472741d5ed1c183230cfe4c (patch) | |
tree | 8f407a9e34c0a7b7d62d3e370bc7592693b08e94 /tests/urlpatterns | |
parent | f138e75910b1e541686c4dce3d8f467f6fc234cb (diff) | |
download | django-82a88d2f48e13ef5d472741d5ed1c183230cfe4c.tar.gz |
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.
Diffstat (limited to 'tests/urlpatterns')
-rw-r--r-- | tests/urlpatterns/path_urls.py | 5 | ||||
-rw-r--r-- | tests/urlpatterns/tests.py | 10 |
2 files changed, 15 insertions, 0 deletions
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<pk>[0-9]+)/$', views.empty_view, name='regex'), re_path(r'^regex_optional/(?P<arg1>\d+)/(?:(?P<arg2>\d+)/)?', views.empty_view, name='regex_optional'), + re_path( + r'^regex_only_optional/(?:(?P<arg1>\d+)/)?', + views.empty_view, + name='regex_only_optional', + ), path('', include('urlpatterns.more_urls')), path('<lang>/<path:url>/', 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<arg1>\d+)/(?:(?P<arg2>\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<arg1>\d+)/)?', + ) + def test_path_lookup_with_inclusion(self): match = resolve('/included_urls/extra/something/') self.assertEqual(match.url_name, 'inner-extra') |