diff --git a/tests/test_hyperlinkedserializers.py b/tests/test_hyperlinkedserializers.py index d45485391..db48fe160 100644 --- a/tests/test_hyperlinkedserializers.py +++ b/tests/test_hyperlinkedserializers.py @@ -31,6 +31,14 @@ class PhotoSerializer(serializers.Serializer): return Photo(**attrs) +class ManyToManyHyperlinkedModelSerializer(serializers.HyperlinkedModelSerializer): + rel = serializers.HyperlinkedRelatedField( + many=True, + view_name='anchor-detail', + queryset=Anchor.objects.filter(text='foo'), + ) + + class AlbumSerializer(serializers.ModelSerializer): url = serializers.HyperlinkedIdentityField(view_name='album-detail', lookup_field='title') @@ -64,6 +72,16 @@ class ManyToManyDetail(generics.RetrieveAPIView): model_serializer_class = serializers.HyperlinkedModelSerializer +class FilteredManyToManyList(generics.ListAPIView): + model = ManyToManyModel + model_serializer_class = ManyToManyHyperlinkedModelSerializer + + +class FilteredManyToManyDetail(generics.RetrieveAPIView): + model = ManyToManyModel + model_serializer_class = ManyToManyHyperlinkedModelSerializer + + class BlogPostCommentListCreate(generics.ListCreateAPIView): model = BlogPostComment serializer_class = BlogPostCommentSerializer @@ -101,6 +119,7 @@ urlpatterns = patterns( url(r'^anchor/(?P\d+)/$', AnchorDetail.as_view(), name='anchor-detail'), url(r'^manytomany/$', ManyToManyList.as_view(), name='manytomanymodel-list'), url(r'^manytomany/(?P\d+)/$', ManyToManyDetail.as_view(), name='manytomanymodel-detail'), + url(r'^filteredmanytomany/$', FilteredManyToManyList.as_view(), name='filtered-manytomanymodel-list'), url(r'^posts/(?P\d+)/$', BlogPostDetail.as_view(), name='blogpost-detail'), url(r'^comments/$', BlogPostCommentListCreate.as_view(), name='blogpostcomment-list'), url(r'^comments/(?P\d+)/$', BlogPostCommentDetail.as_view(), name='blogpostcomment-detail'), @@ -195,6 +214,52 @@ class TestManyToManyHyperlinkedView(TestCase): self.assertEqual(response.data, self.data[0]) +class TestFilteredManyToManyHyperlinkedView(TestCase): + urls = 'tests.test_hyperlinkedserializers' + + def setUp(self): + """ + Create 3 BasicModel instances. + """ + items = ['foo', 'bar', 'baz'] + anchors = [] + for item in items: + anchor = Anchor(text=item) + anchor.save() + anchors.append(anchor) + + manytomany = ManyToManyModel() + manytomany.save() + manytomany.rel.add(*anchors) + + self.data = [{ + 'url': 'http://testserver/manytomany/1/', + 'rel': [ + 'http://testserver/anchor/1/', + ] + }] + self.list_view = FilteredManyToManyList.as_view() + self.detail_view = FilteredManyToManyDetail.as_view() + + def test_get_list_view(self): + """ + GET requests to ListCreateAPIView should return list of objects. + """ + request = factory.get('/filteredmanytomany/') + response = self.list_view(request) + self.assertEqual(response.status_code, status.HTTP_200_OK) + self.assertEqual(response.data, self.data) + + def test_get_detail_view(self): + """ + GET requests to ListCreateAPIView should return list of objects. + """ + request = factory.get('/filteredmanytomany/1/') + response = self.detail_view(request, pk=1) + self.assertEqual(response.status_code, status.HTTP_200_OK) + self.assertEqual(response.data, self.data[0]) + + class TestHyperlinkedIdentityFieldLookup(TestCase): urls = 'tests.test_hyperlinkedserializers'