django-rest-framework/tests/test_reverse.py
piotrszyma 22d206c1e0
Inherit from faked classes in tests to satisfy mypy (#8859)
* tests: inherit FakeResolverMatcher from django.urls.ResolverMatcher in tests/test_versioning.py

* tests: inherit from rest_framework.versioning.BaseVersioning in tests/test_reverse.py

* fix: isort

---------

Co-authored-by: Piotr Szyma <pszyma@opera.com>
2023-01-28 17:18:58 +06:00

55 lines
1.5 KiB
Python

from django.test import TestCase, override_settings
from django.urls import NoReverseMatch, path
from rest_framework.reverse import reverse
from rest_framework.test import APIRequestFactory
from rest_framework.versioning import BaseVersioning
factory = APIRequestFactory()
def null_view(request):
pass
urlpatterns = [
path('view', null_view, name='view'),
]
class MockVersioningScheme(BaseVersioning):
def __init__(self, raise_error=False):
self.raise_error = raise_error
def reverse(self, *args, **kwargs):
if self.raise_error:
raise NoReverseMatch()
return 'http://scheme-reversed/view'
@override_settings(ROOT_URLCONF='tests.test_reverse')
class ReverseTests(TestCase):
"""
Tests for fully qualified URLs when using `reverse`.
"""
def test_reversed_urls_are_fully_qualified(self):
request = factory.get('/view')
url = reverse('view', request=request)
assert url == 'http://testserver/view'
def test_reverse_with_versioning_scheme(self):
request = factory.get('/view')
request.versioning_scheme = MockVersioningScheme()
url = reverse('view', request=request)
assert url == 'http://scheme-reversed/view'
def test_reverse_with_versioning_scheme_fallback_to_default_on_error(self):
request = factory.get('/view')
request.versioning_scheme = MockVersioningScheme(raise_error=True)
url = reverse('view', request=request)
assert url == 'http://testserver/view'