mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-02-23 15:02:55 +03:00
fix URLPathVersioning reverse fallback (#7247)
* fix URLPathVersioning reverse fallback * add test for URLPathVersioning reverse fallback * Update tests/test_versioning.py --------- Co-authored-by: Jorn van Wier <jorn.van.wier@thunderbyte.ai> Co-authored-by: Asif Saif Uddin <auvipy@gmail.com>
This commit is contained in:
parent
332e9560ab
commit
a25aac7d67
|
@ -81,8 +81,10 @@ class URLPathVersioning(BaseVersioning):
|
||||||
|
|
||||||
def reverse(self, viewname, args=None, kwargs=None, request=None, format=None, **extra):
|
def reverse(self, viewname, args=None, kwargs=None, request=None, format=None, **extra):
|
||||||
if request.version is not None:
|
if request.version is not None:
|
||||||
kwargs = {} if (kwargs is None) else kwargs
|
kwargs = {
|
||||||
kwargs[self.version_param] = request.version
|
self.version_param: request.version,
|
||||||
|
**(kwargs or {})
|
||||||
|
}
|
||||||
|
|
||||||
return super().reverse(
|
return super().reverse(
|
||||||
viewname, args, kwargs, request, format, **extra
|
viewname, args, kwargs, request, format, **extra
|
||||||
|
|
|
@ -152,6 +152,8 @@ class TestURLReversing(URLPatternsTestCase, APITestCase):
|
||||||
path('v1/', include((included, 'v1'), namespace='v1')),
|
path('v1/', include((included, 'v1'), namespace='v1')),
|
||||||
path('another/', dummy_view, name='another'),
|
path('another/', dummy_view, name='another'),
|
||||||
re_path(r'^(?P<version>[v1|v2]+)/another/$', dummy_view, name='another'),
|
re_path(r'^(?P<version>[v1|v2]+)/another/$', dummy_view, name='another'),
|
||||||
|
re_path(r'^(?P<foo>.+)/unversioned/$', dummy_view, name='unversioned'),
|
||||||
|
|
||||||
]
|
]
|
||||||
|
|
||||||
def test_reverse_unversioned(self):
|
def test_reverse_unversioned(self):
|
||||||
|
@ -198,6 +200,14 @@ class TestURLReversing(URLPatternsTestCase, APITestCase):
|
||||||
response = view(request)
|
response = view(request)
|
||||||
assert response.data == {'url': 'http://testserver/another/'}
|
assert response.data == {'url': 'http://testserver/another/'}
|
||||||
|
|
||||||
|
# Test fallback when kwargs is not None
|
||||||
|
request = factory.get('/v1/endpoint/')
|
||||||
|
request.versioning_scheme = scheme()
|
||||||
|
request.version = 'v1'
|
||||||
|
|
||||||
|
reversed_url = reverse('unversioned', request=request, kwargs={'foo': 'bar'})
|
||||||
|
assert reversed_url == 'http://testserver/bar/unversioned/'
|
||||||
|
|
||||||
def test_reverse_namespace_versioning(self):
|
def test_reverse_namespace_versioning(self):
|
||||||
class FakeResolverMatch(ResolverMatch):
|
class FakeResolverMatch(ResolverMatch):
|
||||||
namespace = 'v1'
|
namespace = 'v1'
|
||||||
|
|
Loading…
Reference in New Issue
Block a user