diff options
Diffstat (limited to 'rest_framework/tests/hyperlinkedserializers.py')
| -rw-r--r-- | rest_framework/tests/hyperlinkedserializers.py | 40 | 
1 files changed, 40 insertions, 0 deletions
| diff --git a/rest_framework/tests/hyperlinkedserializers.py b/rest_framework/tests/hyperlinkedserializers.py index 9a61f299..8fc6ba77 100644 --- a/rest_framework/tests/hyperlinkedserializers.py +++ b/rest_framework/tests/hyperlinkedserializers.py @@ -27,6 +27,14 @@ class PhotoSerializer(serializers.Serializer):          return Photo(**attrs) +class AlbumSerializer(serializers.ModelSerializer): +    url = serializers.HyperlinkedIdentityField(view_name='album-detail', lookup_field='title') + +    class Meta: +        model = Album +        fields = ('title', 'url') + +  class BasicList(generics.ListCreateAPIView):      model = BasicModel      model_serializer_class = serializers.HyperlinkedModelSerializer @@ -73,6 +81,8 @@ class PhotoListCreate(generics.ListCreateAPIView):  class AlbumDetail(generics.RetrieveAPIView):      model = Album +    serializer_class = AlbumSerializer +    lookup_field = 'title'  class OptionalRelationDetail(generics.RetrieveUpdateDestroyAPIView): @@ -180,6 +190,36 @@ class TestManyToManyHyperlinkedView(TestCase):          self.assertEqual(response.data, self.data[0]) +class TestHyperlinkedIdentityFieldLookup(TestCase): +    urls = 'rest_framework.tests.hyperlinkedserializers' + +    def setUp(self): +        """ +        Create 3 Album instances. +        """ +        titles = ['foo', 'bar', 'baz'] +        for title in titles: +            album = Album(title=title) +            album.save() +        self.detail_view = AlbumDetail.as_view() +        self.data = { +            'foo': {'title': 'foo', 'url': 'http://testserver/albums/foo/'}, +            'bar': {'title': 'bar', 'url': 'http://testserver/albums/bar/'}, +            'baz': {'title': 'baz', 'url': 'http://testserver/albums/baz/'} +        } + +    def test_lookup_field(self): +        """ +        GET requests to AlbumDetail view should return serialized Albums +        with a url field keyed by `title`. +        """ +        for album in Album.objects.all(): +            request = factory.get('/albums/{0}/'.format(album.title)) +            response = self.detail_view(request, title=album.title) +            self.assertEqual(response.status_code, status.HTTP_200_OK) +            self.assertEqual(response.data, self.data[album.title]) + +  class TestCreateWithForeignKeys(TestCase):      urls = 'rest_framework.tests.hyperlinkedserializers' | 
