diff options
Diffstat (limited to 'tests/test_versioning.py')
| -rw-r--r-- | tests/test_versioning.py | 41 | 
1 files changed, 39 insertions, 2 deletions
| diff --git a/tests/test_versioning.py b/tests/test_versioning.py index c44f727d..e7c8485e 100644 --- a/tests/test_versioning.py +++ b/tests/test_versioning.py @@ -1,9 +1,13 @@ +from .utils import MockObject, MockQueryset  from django.conf.urls import include, url +from django.core.exceptions import ObjectDoesNotExist +from rest_framework import serializers  from rest_framework import status, versioning  from rest_framework.decorators import APIView  from rest_framework.response import Response  from rest_framework.reverse import reverse -from rest_framework.test import APIRequestFactory, APITestCase +from rest_framework.test import APIRequestFactory, APITestCase, APISimpleTestCase +from rest_framework.versioning import NamespaceVersioning  class RequestVersionView(APIView): @@ -29,15 +33,18 @@ class RequestInvalidVersionView(APIView):  factory = APIRequestFactory()  mock_view = lambda request: None +dummy_view = lambda request, pk: None  included_patterns = [      url(r'^namespaced/$', mock_view, name='another'), +    url(r'^example/(?P<pk>\d+)/$', dummy_view, name='example-detail')  ]  urlpatterns = [      url(r'^v1/', include(included_patterns, namespace='v1')),      url(r'^another/$', mock_view, name='another'), -    url(r'^(?P<version>[^/]+)/another/$', mock_view, name='another') +    url(r'^(?P<version>[^/]+)/another/$', mock_view, name='another'), +    url(r'^example/(?P<pk>\d+)/$', dummy_view, name='example-detail')  ] @@ -221,3 +228,33 @@ class TestInvalidVersion:          request.resolver_match = FakeResolverMatch          response = view(request, version='v3')          assert response.status_code == status.HTTP_404_NOT_FOUND + + +class TestHyperlinkedRelatedField(APISimpleTestCase): +    urls = 'tests.test_versioning' + +    def setUp(self): + +        class HyperlinkedMockQueryset(MockQueryset): +            def get(self, **lookup): +                for item in self.items: +                    if item.pk == int(lookup.get('pk', -1)): +                        return item +                raise ObjectDoesNotExist() + +        self.queryset = HyperlinkedMockQueryset([ +            MockObject(pk=1, name='foo'), +            MockObject(pk=2, name='bar'), +            MockObject(pk=3, name='baz') +        ]) +        self.field = serializers.HyperlinkedRelatedField( +            view_name='example-detail', +            queryset=self.queryset +        ) +        request = factory.post('/', urlconf='tests.test_versioning') +        request.versioning_scheme = NamespaceVersioning() +        self.field._context = {'request': request} + +    def test_bug_2489(self): +        self.field.to_internal_value('/example/3/') +        self.field.to_internal_value('/v1/example/3/') | 
