diff options
Diffstat (limited to 'tests/test_relations.py')
| -rw-r--r-- | tests/test_relations.py | 50 | 
1 files changed, 48 insertions, 2 deletions
| diff --git a/tests/test_relations.py b/tests/test_relations.py index fbe176e2..b82a1f2a 100644 --- a/tests/test_relations.py +++ b/tests/test_relations.py @@ -1,11 +1,28 @@  from .utils import mock_reverse, fail_reverse, BadType, MockObject, MockQueryset -from django.core.exceptions import ImproperlyConfigured +from django.conf.urls import patterns, url, include +from django.core.exceptions import ImproperlyConfigured, ObjectDoesNotExist  from django.utils.datastructures import MultiValueDict  from rest_framework import serializers  from rest_framework.fields import empty -from rest_framework.test import APISimpleTestCase +from rest_framework.test import APISimpleTestCase, APIRequestFactory +from rest_framework.versioning import NamespaceVersioning  import pytest +factory = APIRequestFactory() +request = factory.get('/')  # Just to ensure we have a request in the serializer context + +dummy_view = lambda request, pk: None + +included_patterns = [ +    url(r'^example/(?P<pk>\d+)/$', dummy_view, name='example-detail') +] + +urlpatterns = patterns( +    '', +    url(r'^v1/', include(included_patterns, namespace='v1')), +    url(r'^example/(?P<pk>\d+)/$', dummy_view, name='example-detail') +) +  class TestStringRelatedField(APISimpleTestCase):      def setUp(self): @@ -48,6 +65,35 @@ class TestPrimaryKeyRelatedField(APISimpleTestCase):          assert representation == self.instance.pk +class TestHyperlinkedRelatedField(APISimpleTestCase): +    urls = 'tests.test_relations' + +    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('/') +        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/') + +  class TestHyperlinkedIdentityField(APISimpleTestCase):      def setUp(self):          self.instance = MockObject(pk=1, name='foo') | 
