mirror of
https://github.com/django/django.git
synced 2024-11-18 15:34:16 +00:00
d7bc37d611
Thanks Peter Schmidt for the report and the initial patch. Thanks to Oktay Sancak for writing the original failing test and Alvin Savoy for supporting contributing back to the community.
91 lines
3.1 KiB
Python
91 lines
3.1 KiB
Python
from __future__ import unicode_literals
|
|
|
|
from django.core.urlresolvers import NoReverseMatch, reverse_lazy
|
|
from django.contrib.auth.views import logout
|
|
from django.shortcuts import resolve_url
|
|
from django.test import TestCase, ignore_warnings, override_settings
|
|
from django.utils.deprecation import RemovedInDjango20Warning
|
|
from django.utils import six
|
|
|
|
from .models import UnimportantThing
|
|
|
|
|
|
@override_settings(ROOT_URLCONF='resolve_url.urls')
|
|
class ResolveUrlTests(TestCase):
|
|
"""
|
|
Tests for the ``resolve_url`` function.
|
|
"""
|
|
|
|
def test_url_path(self):
|
|
"""
|
|
Tests that passing a URL path to ``resolve_url`` will result in the
|
|
same url.
|
|
"""
|
|
self.assertEqual('/something/', resolve_url('/something/'))
|
|
|
|
def test_relative_path(self):
|
|
"""
|
|
Tests that passing a relative URL path to ``resolve_url`` will result
|
|
in the same url.
|
|
"""
|
|
self.assertEqual('../', resolve_url('../'))
|
|
self.assertEqual('../relative/', resolve_url('../relative/'))
|
|
self.assertEqual('./', resolve_url('./'))
|
|
self.assertEqual('./relative/', resolve_url('./relative/'))
|
|
|
|
def test_full_url(self):
|
|
"""
|
|
Tests that passing a full URL to ``resolve_url`` will result in the
|
|
same url.
|
|
"""
|
|
url = 'http://example.com/'
|
|
self.assertEqual(url, resolve_url(url))
|
|
|
|
def test_model(self):
|
|
"""
|
|
Tests that passing a model to ``resolve_url`` will result in
|
|
``get_absolute_url`` being called on that model instance.
|
|
"""
|
|
m = UnimportantThing(importance=1)
|
|
self.assertEqual(m.get_absolute_url(), resolve_url(m))
|
|
|
|
def test_view_function(self):
|
|
"""
|
|
Tests that passing a view name to ``resolve_url`` will result in the
|
|
URL path mapping to that view name.
|
|
"""
|
|
resolved_url = resolve_url(logout)
|
|
self.assertEqual('/accounts/logout/', resolved_url)
|
|
|
|
def test_lazy_reverse(self):
|
|
"""
|
|
Tests that passing the result of reverse_lazy is resolved to a real URL
|
|
string.
|
|
"""
|
|
resolved_url = resolve_url(reverse_lazy('logout'))
|
|
self.assertIsInstance(resolved_url, six.text_type)
|
|
self.assertEqual('/accounts/logout/', resolved_url)
|
|
|
|
@ignore_warnings(category=RemovedInDjango20Warning)
|
|
def test_valid_view_name(self):
|
|
"""
|
|
Tests that passing a view function to ``resolve_url`` will result in
|
|
the URL path mapping to that view.
|
|
"""
|
|
resolved_url = resolve_url('django.contrib.auth.views.logout')
|
|
self.assertEqual('/accounts/logout/', resolved_url)
|
|
|
|
def test_domain(self):
|
|
"""
|
|
Tests that passing a domain to ``resolve_url`` returns the same domain.
|
|
"""
|
|
self.assertEqual(resolve_url('example.com'), 'example.com')
|
|
|
|
def test_non_view_callable_raises_no_reverse_match(self):
|
|
"""
|
|
Tests that passing a non-view callable into ``resolve_url`` raises a
|
|
``NoReverseMatch`` exception.
|
|
"""
|
|
with self.assertRaises(NoReverseMatch):
|
|
resolve_url(lambda: 'asdf')
|