1
+ from .utils import MockObject , MockQueryset
1
2
from django .conf .urls import include , url
3
+ from django .core .exceptions import ObjectDoesNotExist
4
+ from rest_framework import serializers
2
5
from rest_framework import status , versioning
3
6
from rest_framework .decorators import APIView
4
7
from rest_framework .response import Response
5
8
from rest_framework .reverse import reverse
6
- from rest_framework .test import APIRequestFactory , APITestCase
9
+ from rest_framework .test import APIRequestFactory , APITestCase , APISimpleTestCase
10
+ from rest_framework .versioning import NamespaceVersioning
7
11
8
12
9
13
class RequestVersionView (APIView ):
@@ -29,15 +33,18 @@ def get(self, request, *args, **kwargs):
29
33
factory = APIRequestFactory ()
30
34
31
35
mock_view = lambda request : None
36
+ dummy_view = lambda request , pk : None
32
37
33
38
included_patterns = [
34
39
url (r'^namespaced/$' , mock_view , name = 'another' ),
40
+ url (r'^example/(?P<pk>\d+)/$' , dummy_view , name = 'example-detail' )
35
41
]
36
42
37
43
urlpatterns = [
38
44
url (r'^v1/' , include (included_patterns , namespace = 'v1' )),
39
45
url (r'^another/$' , mock_view , name = 'another' ),
40
- url (r'^(?P<version>[^/]+)/another/$' , mock_view , name = 'another' )
46
+ url (r'^(?P<version>[^/]+)/another/$' , mock_view , name = 'another' ),
47
+ url (r'^example/(?P<pk>\d+)/$' , dummy_view , name = 'example-detail' )
41
48
]
42
49
43
50
@@ -221,3 +228,33 @@ class FakeResolverMatch:
221
228
request .resolver_match = FakeResolverMatch
222
229
response = view (request , version = 'v3' )
223
230
assert response .status_code == status .HTTP_404_NOT_FOUND
231
+
232
+
233
+ class TestHyperlinkedRelatedField (APISimpleTestCase ):
234
+ urls = 'tests.test_versioning'
235
+
236
+ def setUp (self ):
237
+
238
+ class HyperlinkedMockQueryset (MockQueryset ):
239
+ def get (self , ** lookup ):
240
+ for item in self .items :
241
+ if item .pk == int (lookup .get ('pk' , - 1 )):
242
+ return item
243
+ raise ObjectDoesNotExist ()
244
+
245
+ self .queryset = HyperlinkedMockQueryset ([
246
+ MockObject (pk = 1 , name = 'foo' ),
247
+ MockObject (pk = 2 , name = 'bar' ),
248
+ MockObject (pk = 3 , name = 'baz' )
249
+ ])
250
+ self .field = serializers .HyperlinkedRelatedField (
251
+ view_name = 'example-detail' ,
252
+ queryset = self .queryset
253
+ )
254
+ request = factory .post ('/' , urlconf = 'tests.test_versioning' )
255
+ request .versioning_scheme = NamespaceVersioning ()
256
+ self .field ._context = {'request' : request }
257
+
258
+ def test_bug_2489 (self ):
259
+ self .field .to_internal_value ('/example/3/' )
260
+ self .field .to_internal_value ('/v1/example/3/' )
0 commit comments