mirror of
https://github.com/django/django.git
synced 2025-08-04 10:59:45 +00:00
Fixed #23813 -- Added checks for common URL pattern errors
Thanks jwa and lamby for the suggestions, and timgraham and jarshwah for their reviews.
This commit is contained in:
parent
2f53d342f1
commit
fe3fc5210f
11 changed files with 194 additions and 1 deletions
37
tests/check_framework/test_urls.py
Normal file
37
tests/check_framework/test_urls.py
Normal file
|
@ -0,0 +1,37 @@
|
|||
from django.core.checks.urls import check_url_config
|
||||
from django.test import SimpleTestCase
|
||||
from django.test.utils import override_settings
|
||||
|
||||
|
||||
class CheckUrlsTest(SimpleTestCase):
|
||||
@override_settings(ROOT_URLCONF='check_framework.urls_no_warnings')
|
||||
def test_include_no_warnings(self):
|
||||
result = check_url_config(None)
|
||||
self.assertEqual(result, [])
|
||||
|
||||
@override_settings(ROOT_URLCONF='check_framework.urls_include')
|
||||
def test_include_with_dollar(self):
|
||||
result = check_url_config(None)
|
||||
self.assertEqual(len(result), 1)
|
||||
warning = result[0]
|
||||
self.assertEqual(warning.id, 'urls.W001')
|
||||
expected_msg = "Your URL pattern '^include-with-dollar$' uses include with a regex ending with a '$'."
|
||||
self.assertIn(expected_msg, warning.msg)
|
||||
|
||||
@override_settings(ROOT_URLCONF='check_framework.urls_slash')
|
||||
def test_url_beginning_with_slash(self):
|
||||
result = check_url_config(None)
|
||||
self.assertEqual(len(result), 1)
|
||||
warning = result[0]
|
||||
self.assertEqual(warning.id, 'urls.W002')
|
||||
expected_msg = "Your URL pattern '/starting-with-slash/$' has a regex beginning with a '/'"
|
||||
self.assertIn(expected_msg, warning.msg)
|
||||
|
||||
@override_settings(ROOT_URLCONF='check_framework.urls_name')
|
||||
def test_url_pattern_name_with_colon(self):
|
||||
result = check_url_config(None)
|
||||
self.assertEqual(len(result), 1)
|
||||
warning = result[0]
|
||||
self.assertEqual(warning.id, 'urls.W003')
|
||||
expected_msg = "Your URL pattern '^$' [name='name_with:colon'] has a name including a ':'."
|
||||
self.assertIn(expected_msg, warning.msg)
|
7
tests/check_framework/urls_include.py
Normal file
7
tests/check_framework/urls_include.py
Normal file
|
@ -0,0 +1,7 @@
|
|||
from django.conf.urls import include, url
|
||||
|
||||
urlpatterns = [
|
||||
url(r'^', include([
|
||||
url(r'^include-with-dollar$', include([])),
|
||||
])),
|
||||
]
|
13
tests/check_framework/urls_name.py
Normal file
13
tests/check_framework/urls_name.py
Normal file
|
@ -0,0 +1,13 @@
|
|||
from django.conf.urls import include, url
|
||||
from django.http import HttpResponse
|
||||
|
||||
|
||||
def view(request):
|
||||
return HttpResponse('')
|
||||
|
||||
|
||||
urlpatterns = [
|
||||
url('^', include([
|
||||
url(r'^$', view, name='name_with:colon'),
|
||||
])),
|
||||
]
|
15
tests/check_framework/urls_no_warnings.py
Normal file
15
tests/check_framework/urls_no_warnings.py
Normal file
|
@ -0,0 +1,15 @@
|
|||
from django.conf.urls import include, url
|
||||
from django.http import HttpResponse
|
||||
|
||||
|
||||
def view(request):
|
||||
return HttpResponse('')
|
||||
|
||||
|
||||
urlpatterns = [
|
||||
url(r'^foo/', view, name='foo'),
|
||||
# This dollar is ok as it is escaped
|
||||
url(r'^\$', include([
|
||||
url(r'^bar/$', view, name='bar'),
|
||||
])),
|
||||
]
|
13
tests/check_framework/urls_slash.py
Normal file
13
tests/check_framework/urls_slash.py
Normal file
|
@ -0,0 +1,13 @@
|
|||
from django.conf.urls import include, url
|
||||
from django.http import HttpResponse
|
||||
|
||||
|
||||
def view(request):
|
||||
return HttpResponse('')
|
||||
|
||||
|
||||
urlpatterns = [
|
||||
url('^', include([
|
||||
url(r'/starting-with-slash/$', view),
|
||||
])),
|
||||
]
|
Loading…
Add table
Add a link
Reference in a new issue