diff options
| author | Jack Cushman <jcushman@law.harvard.edu> | 2019-12-21 13:11:43 -0500 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2020-01-08 10:55:53 +0100 |
| commit | 07f6ff09e431cec48be5e46d843a4bbf10bfeac6 (patch) | |
| tree | 310c81691cf1867230cca3206209e676cb99ed21 /tests/urlpatterns | |
| parent | 196009c72c7144f25bc5e4029ef519db0190bb89 (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.py | 21 | ||||
| -rw-r--r-- | tests/urlpatterns/tests.py | 38 |
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 = ( |
