summaryrefslogtreecommitdiff
path: root/tests/urlpatterns
diff options
context:
space:
mode:
authorJack Cushman <jcushman@law.harvard.edu>2019-12-21 13:11:43 -0500
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2020-01-08 10:55:53 +0100
commit07f6ff09e431cec48be5e46d843a4bbf10bfeac6 (patch)
tree310c81691cf1867230cca3206209e676cb99ed21 /tests/urlpatterns
parent196009c72c7144f25bc5e4029ef519db0190bb89 (diff)
Added tests for using the same name for multiple URL patterns.
Diffstat (limited to 'tests/urlpatterns')
-rw-r--r--tests/urlpatterns/path_same_name_urls.py21
-rw-r--r--tests/urlpatterns/tests.py38
2 files changed, 59 insertions, 0 deletions
diff --git a/tests/urlpatterns/path_same_name_urls.py b/tests/urlpatterns/path_same_name_urls.py
new file mode 100644
index 0000000000..8eee949316
--- /dev/null
+++ b/tests/urlpatterns/path_same_name_urls.py
@@ -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'),
+]
diff --git a/tests/urlpatterns/tests.py b/tests/urlpatterns/tests.py
index b149e0d512..95bea58339 100644
--- a/tests/urlpatterns/tests.py
+++ b/tests/urlpatterns/tests.py
@@ -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 = (