summaryrefslogtreecommitdiff
path: root/tests/regressiontests/urlpatterns_reverse
diff options
context:
space:
mode:
authorBrian Rosner <brosner@gmail.com>2009-11-16 01:58:00 +0000
committerBrian Rosner <brosner@gmail.com>2009-11-16 01:58:00 +0000
commit6c61ca3d74ae438c34f404676470234e8213d7c2 (patch)
treed1ba558c1b61ca2c19c5cc68428a94aaa57a5280 /tests/regressiontests/urlpatterns_reverse
parentc169f8cb174c9a8858cc8af207f98b9329f53e82 (diff)
Fixed #5034 -- honor request.urlconf in reverse and resolve.
This enables {% url %} to honor request.urlconf set from process_request middleware methods. Thanks SmileyChris for the initial patch work. git-svn-id: http://code.djangoproject.com/svn/django/trunk@11740 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'tests/regressiontests/urlpatterns_reverse')
-rw-r--r--tests/regressiontests/urlpatterns_reverse/middleware.py7
-rw-r--r--tests/regressiontests/urlpatterns_reverse/tests.py37
-rw-r--r--tests/regressiontests/urlpatterns_reverse/urlconf_inner.py12
-rw-r--r--tests/regressiontests/urlpatterns_reverse/urlconf_outer.py9
4 files changed, 65 insertions, 0 deletions
diff --git a/tests/regressiontests/urlpatterns_reverse/middleware.py b/tests/regressiontests/urlpatterns_reverse/middleware.py
new file mode 100644
index 0000000000..7bb9aa924f
--- /dev/null
+++ b/tests/regressiontests/urlpatterns_reverse/middleware.py
@@ -0,0 +1,7 @@
+from django.core.urlresolvers import set_urlconf
+
+import urlconf_inner
+
+class ChangeURLconfMiddleware(object):
+ def process_request(self, request):
+ request.urlconf = urlconf_inner.__name__
diff --git a/tests/regressiontests/urlpatterns_reverse/tests.py b/tests/regressiontests/urlpatterns_reverse/tests.py
index d4f281ba81..34c9db25d3 100644
--- a/tests/regressiontests/urlpatterns_reverse/tests.py
+++ b/tests/regressiontests/urlpatterns_reverse/tests.py
@@ -16,11 +16,16 @@ ImproperlyConfigured: The included urlconf regressiontests.urlpatterns_reverse.n
import unittest
+from django.conf import settings
from django.core.urlresolvers import reverse, resolve, NoReverseMatch, Resolver404
from django.http import HttpResponseRedirect, HttpResponsePermanentRedirect
from django.shortcuts import redirect
from django.test import TestCase
+import urlconf_outer
+import urlconf_inner
+import middleware
+
test_data = (
('places', '/places/3/', [3], {}),
('places', '/places/3/', ['3'], {}),
@@ -239,3 +244,35 @@ class NamespaceTests(TestCase):
self.assertEquals('/other1/inner/37/42/', reverse('nodefault:urlobject-view', args=[37,42], current_app='other-ns1'))
self.assertEquals('/other1/inner/42/37/', reverse('nodefault:urlobject-view', kwargs={'arg1':42, 'arg2':37}, current_app='other-ns1'))
+
+class RequestURLconfTests(TestCase):
+ def setUp(self):
+ self.root_urlconf = settings.ROOT_URLCONF
+ self.middleware_classes = settings.MIDDLEWARE_CLASSES
+ settings.ROOT_URLCONF = urlconf_outer.__name__
+
+ def tearDown(self):
+ settings.ROOT_URLCONF = self.root_urlconf
+ settings.MIDDLEWARE_CLASSES = self.middleware_classes
+
+ def test_urlconf(self):
+ response = self.client.get('/test/me/')
+ self.assertEqual(response.status_code, 200)
+ self.assertEqual(response.content, 'outer:/test/me/,'
+ 'inner:/inner_urlconf/second_test/')
+ response = self.client.get('/inner_urlconf/second_test/')
+ self.assertEqual(response.status_code, 200)
+ response = self.client.get('/second_test/')
+ self.assertEqual(response.status_code, 404)
+
+ def test_urlconf_overridden(self):
+ settings.MIDDLEWARE_CLASSES += (
+ '%s.ChangeURLconfMiddleware' % middleware.__name__,
+ )
+ response = self.client.get('/test/me/')
+ self.assertEqual(response.status_code, 404)
+ response = self.client.get('/inner_urlconf/second_test/')
+ self.assertEqual(response.status_code, 404)
+ response = self.client.get('/second_test/')
+ self.assertEqual(response.status_code, 200)
+ self.assertEqual(response.content, 'outer:,inner:/second_test/')
diff --git a/tests/regressiontests/urlpatterns_reverse/urlconf_inner.py b/tests/regressiontests/urlpatterns_reverse/urlconf_inner.py
new file mode 100644
index 0000000000..d188e06421
--- /dev/null
+++ b/tests/regressiontests/urlpatterns_reverse/urlconf_inner.py
@@ -0,0 +1,12 @@
+from django.conf.urls.defaults import *
+from django.template import Template, Context
+from django.http import HttpResponse
+
+def inner_view(request):
+ content = Template('{% url outer as outer_url %}outer:{{ outer_url }},'
+ '{% url inner as inner_url %}inner:{{ inner_url }}').render(Context())
+ return HttpResponse(content)
+
+urlpatterns = patterns('',
+ url(r'^second_test/$', inner_view, name='inner'),
+) \ No newline at end of file
diff --git a/tests/regressiontests/urlpatterns_reverse/urlconf_outer.py b/tests/regressiontests/urlpatterns_reverse/urlconf_outer.py
new file mode 100644
index 0000000000..506e03666e
--- /dev/null
+++ b/tests/regressiontests/urlpatterns_reverse/urlconf_outer.py
@@ -0,0 +1,9 @@
+from django.conf.urls.defaults import *
+
+import urlconf_inner
+
+
+urlpatterns = patterns('',
+ url(r'^test/me/$', urlconf_inner.inner_view, name='outer'),
+ url(r'^inner_urlconf/', include(urlconf_inner.__name__))
+) \ No newline at end of file