summaryrefslogtreecommitdiff
path: root/tests/urlpatterns_reverse
diff options
context:
space:
mode:
Diffstat (limited to 'tests/urlpatterns_reverse')
-rw-r--r--tests/urlpatterns_reverse/included_namespace_urls.py2
-rw-r--r--tests/urlpatterns_reverse/tests.py47
2 files changed, 49 insertions, 0 deletions
diff --git a/tests/urlpatterns_reverse/included_namespace_urls.py b/tests/urlpatterns_reverse/included_namespace_urls.py
index 8769f112e9..43bba1b6de 100644
--- a/tests/urlpatterns_reverse/included_namespace_urls.py
+++ b/tests/urlpatterns_reverse/included_namespace_urls.py
@@ -7,6 +7,7 @@ from .namespace_urls import URLObject
from .views import view_class_instance
testobj3 = URLObject('testapp', 'test-ns3')
+testobj4 = URLObject('testapp', 'test-ns4')
# test deprecated patterns() function. convert to list of urls() in Django 2.0
with warnings.catch_warnings():
@@ -24,6 +25,7 @@ with warnings.catch_warnings():
url(r'^view_class/(?P<arg1>[0-9]+)/(?P<arg2>[0-9]+)/$', view_class_instance, name='inc-view-class'),
(r'^test3/', include(testobj3.urls)),
+ (r'^test4/', include(testobj4.urls)),
(r'^ns-included3/', include('urlpatterns_reverse.included_urls', namespace='inc-ns3')),
(r'^ns-included4/', include('urlpatterns_reverse.namespace_urls', namespace='inc-ns4')),
)
diff --git a/tests/urlpatterns_reverse/tests.py b/tests/urlpatterns_reverse/tests.py
index f863a089d4..f2137da6ad 100644
--- a/tests/urlpatterns_reverse/tests.py
+++ b/tests/urlpatterns_reverse/tests.py
@@ -574,6 +574,53 @@ class NamespaceTests(SimpleTestCase):
self.assertEqual('/inc70/', reverse('inc-ns5:inner-nothing', args=['70']))
self.assertEqual('/inc78/extra/foobar/', reverse('inc-ns5:inner-extra', args=['78', 'foobar']))
+ def test_nested_app_lookup(self):
+ "A nested current_app should be split in individual namespaces (#24904)"
+ self.assertEqual('/ns-included1/test4/inner/', reverse('inc-ns1:testapp:urlobject-view'))
+ self.assertEqual('/ns-included1/test4/inner/37/42/', reverse('inc-ns1:testapp:urlobject-view', args=[37, 42]))
+ self.assertEqual(
+ '/ns-included1/test4/inner/42/37/',
+ reverse('inc-ns1:testapp:urlobject-view', kwargs={'arg1': 42, 'arg2': 37})
+ )
+ self.assertEqual('/ns-included1/test4/inner/+%5C$*/', reverse('inc-ns1:testapp:urlobject-special-view'))
+
+ self.assertEqual(
+ '/ns-included1/test3/inner/',
+ reverse('inc-ns1:testapp:urlobject-view', current_app='inc-ns1:test-ns3')
+ )
+ self.assertEqual(
+ '/ns-included1/test3/inner/37/42/',
+ reverse('inc-ns1:testapp:urlobject-view', args=[37, 42], current_app='inc-ns1:test-ns3')
+ )
+ self.assertEqual(
+ '/ns-included1/test3/inner/42/37/',
+ reverse('inc-ns1:testapp:urlobject-view', kwargs={'arg1': 42, 'arg2': 37}, current_app='inc-ns1:test-ns3')
+ )
+ self.assertEqual(
+ '/ns-included1/test3/inner/+%5C$*/',
+ reverse('inc-ns1:testapp:urlobject-special-view', current_app='inc-ns1:test-ns3')
+ )
+
+ def test_current_app_no_partial_match(self):
+ "current_app should either match the whole path or shouldn't be used"
+ self.assertEqual(
+ '/ns-included1/test4/inner/',
+ reverse('inc-ns1:testapp:urlobject-view', current_app='non-existant:test-ns3')
+ )
+ self.assertEqual(
+ '/ns-included1/test4/inner/37/42/',
+ reverse('inc-ns1:testapp:urlobject-view', args=[37, 42], current_app='non-existant:test-ns3')
+ )
+ self.assertEqual(
+ '/ns-included1/test4/inner/42/37/',
+ reverse('inc-ns1:testapp:urlobject-view', kwargs={'arg1': 42, 'arg2': 37},
+ current_app='non-existant:test-ns3')
+ )
+ self.assertEqual(
+ '/ns-included1/test4/inner/+%5C$*/',
+ reverse('inc-ns1:testapp:urlobject-special-view', current_app='non-existant:test-ns3')
+ )
+
@override_settings(ROOT_URLCONF=urlconf_outer.__name__)
class RequestURLconfTests(SimpleTestCase):