aboutsummaryrefslogtreecommitdiffstats
path: root/rest_framework/tests/test_generics.py
diff options
context:
space:
mode:
authorEmanuele Pucciarelli2014-03-30 11:48:17 +0200
committerEmanuele Pucciarelli2014-03-30 11:48:17 +0200
commitd8bf8787923080a64842a12e3e476aff27bfa8fc (patch)
treef813ffdc5c1d571739c93a7a598ed889a26dfb2d /rest_framework/tests/test_generics.py
parentab5082d15c04866401c6f1bc7d77d21e695f996d (diff)
downloaddjango-rest-framework-d8bf8787923080a64842a12e3e476aff27bfa8fc.tar.bz2
Metadata for related fields -- added test case.
Diffstat (limited to 'rest_framework/tests/test_generics.py')
-rw-r--r--rest_framework/tests/test_generics.py73
1 files changed, 73 insertions, 0 deletions
diff --git a/rest_framework/tests/test_generics.py b/rest_framework/tests/test_generics.py
index 996bd5b0..0cadc5de 100644
--- a/rest_framework/tests/test_generics.py
+++ b/rest_framework/tests/test_generics.py
@@ -5,6 +5,7 @@ from django.test import TestCase
from rest_framework import generics, renderers, serializers, status
from rest_framework.test import APIRequestFactory
from rest_framework.tests.models import BasicModel, Comment, SlugBasedModel
+from rest_framework.tests.models import ForeignKeySource, ForeignKeyTarget
from rest_framework.compat import six
factory = APIRequestFactory()
@@ -28,6 +29,13 @@ class InstanceView(generics.RetrieveUpdateDestroyAPIView):
return queryset.exclude(text='filtered out')
+class FKInstanceView(generics.RetrieveUpdateDestroyAPIView):
+ """
+ FK: example description for OPTIONS.
+ """
+ model = ForeignKeySource
+
+
class SlugSerializer(serializers.ModelSerializer):
slug = serializers.Field() # read only
@@ -407,6 +415,71 @@ class TestInstanceView(TestCase):
self.assertFalse(self.objects.filter(id=999).exists())
+class TestFKInstanceView(TestCase):
+ def setUp(self):
+ """
+ Create 3 BasicModel instances.
+ """
+ items = ['foo', 'bar', 'baz']
+ for item in items:
+ t = ForeignKeyTarget(name=item)
+ t.save()
+ ForeignKeySource(name='source_' + item, target=t).save()
+
+ self.objects = ForeignKeySource.objects
+ self.data = [
+ {'id': obj.id, 'name': obj.name}
+ for obj in self.objects.all()
+ ]
+ self.view = FKInstanceView.as_view()
+
+ def test_options_root_view(self):
+ """
+ OPTIONS requests to ListCreateAPIView should return metadata
+ """
+ request = factory.options('/999')
+ with self.assertNumQueries(1):
+ response = self.view(request, pk=999).render()
+ expected = {
+ 'name': 'Fk Instance',
+ 'description': 'FK: example description for OPTIONS.',
+ 'renders': [
+ 'application/json',
+ 'text/html'
+ ],
+ 'parses': [
+ 'application/json',
+ 'application/x-www-form-urlencoded',
+ 'multipart/form-data'
+ ],
+ 'actions': {
+ 'PUT': {
+ 'id': {
+ 'type': 'integer',
+ 'required': False,
+ 'read_only': True,
+ 'label': u'ID'
+ },
+ 'name': {
+ 'type': 'string',
+ 'required': True,
+ 'read_only': False,
+ 'label': 'name',
+ 'max_length': 100
+ },
+ 'target': {
+ 'type': 'field',
+ 'required': True,
+ 'read_only': False,
+ 'label': 'Target object'
+ }
+ }
+ }
+ }
+ self.assertEqual(response.status_code, status.HTTP_200_OK)
+ self.assertEqual(response.data, expected)
+
+
class TestOverriddenGetObject(TestCase):
"""
Test cases for a RetrieveUpdateDestroyAPIView that does NOT use the