Added tests for using the same name for multiple URL patterns.
This commit is contained in:
parent
196009c72c
commit
07f6ff09e4
|
@ -0,0 +1,21 @@
|
|||
from django.urls import path, re_path
|
||||
|
||||
from . import views
|
||||
|
||||
urlpatterns = [
|
||||
# Different number of arguments.
|
||||
path('number_of_args/0/', views.empty_view, name='number_of_args'),
|
||||
path('number_of_args/1/<value>/', views.empty_view, name='number_of_args'),
|
||||
# Different names of the keyword arguments.
|
||||
path('kwargs_names/a/<a>/', views.empty_view, name='kwargs_names'),
|
||||
path('kwargs_names/b/<b>/', views.empty_view, name='kwargs_names'),
|
||||
# Different path converters.
|
||||
path('converter/path/<path:value>/', views.empty_view, name='converter'),
|
||||
path('converter/str/<str:value>/', views.empty_view, name='converter'),
|
||||
path('converter/slug/<slug:value>/', views.empty_view, name='converter'),
|
||||
path('converter/int/<int:value>/', views.empty_view, name='converter'),
|
||||
path('converter/uuid/<uuid:value>/', views.empty_view, name='converter'),
|
||||
# Different regular expressions.
|
||||
re_path(r'^regex/uppercase/([A-Z]+)/', views.empty_view, name='regex'),
|
||||
re_path(r'^regex/lowercase/([a-z]+)/', views.empty_view, name='regex'),
|
||||
]
|
|
@ -200,6 +200,44 @@ class ConverterTests(SimpleTestCase):
|
|||
resolve(url)
|
||||
|
||||
|
||||
@override_settings(ROOT_URLCONF='urlpatterns.path_same_name_urls')
|
||||
class SameNameTests(SimpleTestCase):
|
||||
def test_matching_urls_same_name(self):
|
||||
tests = [
|
||||
('number_of_args', [
|
||||
([], {}, '0/'),
|
||||
([1], {}, '1/1/'),
|
||||
]),
|
||||
('kwargs_names', [
|
||||
([], {'a': 1}, 'a/1/'),
|
||||
([], {'b': 1}, 'b/1/'),
|
||||
]),
|
||||
('converter', [
|
||||
(['a/b'], {}, 'path/a/b/'),
|
||||
(['a b'], {}, 'str/a%20b/'),
|
||||
(['a-b'], {}, 'slug/a-b/'),
|
||||
(['2'], {}, 'int/2/'),
|
||||
(
|
||||
['39da9369-838e-4750-91a5-f7805cd82839'],
|
||||
{},
|
||||
'uuid/39da9369-838e-4750-91a5-f7805cd82839/'
|
||||
),
|
||||
]),
|
||||
('regex', [
|
||||
(['ABC'], {}, 'uppercase/ABC/'),
|
||||
(['abc'], {}, 'lowercase/abc/'),
|
||||
]),
|
||||
]
|
||||
for url_name, cases in tests:
|
||||
for args, kwargs, url_suffix in cases:
|
||||
expected_url = '/%s/%s' % (url_name, url_suffix)
|
||||
with self.subTest(url=expected_url):
|
||||
self.assertEqual(
|
||||
reverse(url_name, args=args, kwargs=kwargs),
|
||||
expected_url,
|
||||
)
|
||||
|
||||
|
||||
class ParameterRestrictionTests(SimpleTestCase):
|
||||
def test_non_identifier_parameter_name_causes_exception(self):
|
||||
msg = (
|
||||
|
|
Loading…
Reference in New Issue