diff options
Diffstat (limited to 'tests/test_generics.py')
| -rw-r--r-- | tests/test_generics.py | 56 | 
1 files changed, 36 insertions, 20 deletions
| diff --git a/tests/test_generics.py b/tests/test_generics.py index 2690fb47..94023c30 100644 --- a/tests/test_generics.py +++ b/tests/test_generics.py @@ -6,12 +6,26 @@ from django.test import TestCase  from django.utils import six  from rest_framework import generics, renderers, serializers, status  from rest_framework.test import APIRequestFactory -from tests.models import BasicModel, Comment, SlugBasedModel +from tests.models import BasicModel, RESTFrameworkModel  from tests.models import ForeignKeySource, ForeignKeyTarget  factory = APIRequestFactory() +# Models +class SlugBasedModel(RESTFrameworkModel): +    text = models.CharField(max_length=100) +    slug = models.SlugField(max_length=32) + + +# Model for regression test for #285 +class Comment(RESTFrameworkModel): +    email = models.EmailField() +    content = models.CharField(max_length=200) +    created = models.DateTimeField(auto_now_add=True) + + +# Serializers  class BasicSerializer(serializers.ModelSerializer):      class Meta:          model = BasicModel @@ -22,6 +36,15 @@ class ForeignKeySerializer(serializers.ModelSerializer):          model = ForeignKeySource +class SlugSerializer(serializers.ModelSerializer): +    slug = serializers.ReadOnlyField() + +    class Meta: +        model = SlugBasedModel +        fields = ('text', 'slug') + + +# Views  class RootView(generics.ListCreateAPIView):      queryset = BasicModel.objects.all()      serializer_class = BasicSerializer @@ -37,14 +60,6 @@ class FKInstanceView(generics.RetrieveUpdateDestroyAPIView):      serializer_class = ForeignKeySerializer -class SlugSerializer(serializers.ModelSerializer): -    slug = serializers.ReadOnlyField() - -    class Meta: -        model = SlugBasedModel -        fields = ('text', 'slug') - -  class SlugBasedInstanceView(InstanceView):      """      A model with a slug-field. @@ -54,6 +69,7 @@ class SlugBasedInstanceView(InstanceView):      lookup_field = 'slug' +# Tests  class TestRootView(TestCase):      def setUp(self):          """ @@ -127,13 +143,13 @@ class TestRootView(TestCase):          self.assertEqual(created.text, 'foobar') -EXPECTED_QUERYS_FOR_PUT = 3 if django.VERSION < (1, 6) else 2 +EXPECTED_QUERIES_FOR_PUT = 3 if django.VERSION < (1, 6) else 2  class TestInstanceView(TestCase):      def setUp(self):          """ -        Create 3 BasicModel intances. +        Create 3 BasicModel instances.          """          items = ['foo', 'bar', 'baz', 'filtered out']          for item in items: @@ -173,7 +189,7 @@ class TestInstanceView(TestCase):          """          data = {'text': 'foobar'}          request = factory.put('/1', data, format='json') -        with self.assertNumQueries(EXPECTED_QUERYS_FOR_PUT): +        with self.assertNumQueries(EXPECTED_QUERIES_FOR_PUT):              response = self.view(request, pk='1').render()          self.assertEqual(response.status_code, status.HTTP_200_OK)          self.assertEqual(dict(response.data), {'id': 1, 'text': 'foobar'}) @@ -187,7 +203,7 @@ class TestInstanceView(TestCase):          data = {'text': 'foobar'}          request = factory.patch('/1', data, format='json') -        with self.assertNumQueries(EXPECTED_QUERYS_FOR_PUT): +        with self.assertNumQueries(EXPECTED_QUERIES_FOR_PUT):              response = self.view(request, pk=1).render()          self.assertEqual(response.status_code, status.HTTP_200_OK)          self.assertEqual(response.data, {'id': 1, 'text': 'foobar'}) @@ -222,7 +238,7 @@ class TestInstanceView(TestCase):          """          data = {'id': 999, 'text': 'foobar'}          request = factory.put('/1', data, format='json') -        with self.assertNumQueries(EXPECTED_QUERYS_FOR_PUT): +        with self.assertNumQueries(EXPECTED_QUERIES_FOR_PUT):              response = self.view(request, pk=1).render()          self.assertEqual(response.status_code, status.HTTP_200_OK)          self.assertEqual(response.data, {'id': 1, 'text': 'foobar'}) @@ -288,9 +304,10 @@ class TestOverriddenGetObject(TestCase):      Test cases for a RetrieveUpdateDestroyAPIView that does NOT use the      queryset/model mechanism but instead overrides get_object()      """ +      def setUp(self):          """ -        Create 3 BasicModel intances. +        Create 3 BasicModel instances.          """          items = ['foo', 'bar', 'baz']          for item in items: @@ -363,11 +380,11 @@ class ClassB(models.Model):  class ClassA(models.Model):      name = models.CharField(max_length=255) -    childs = models.ManyToManyField(ClassB, blank=True, null=True) +    children = models.ManyToManyField(ClassB, blank=True, null=True)  class ClassASerializer(serializers.ModelSerializer): -    childs = serializers.PrimaryKeyRelatedField( +    children = serializers.PrimaryKeyRelatedField(          many=True, queryset=ClassB.objects.all()      ) @@ -380,8 +397,8 @@ class ExampleView(generics.ListCreateAPIView):      queryset = ClassA.objects.all() -class TestM2MBrowseableAPI(TestCase): -    def test_m2m_in_browseable_api(self): +class TestM2MBrowsableAPI(TestCase): +    def test_m2m_in_browsable_api(self):          """          Test for particularly ugly regression with m2m in browsable API          """ @@ -424,7 +441,6 @@ class DynamicSerializerView(generics.ListCreateAPIView):  class TestFilterBackendAppliedToViews(TestCase): -      def setUp(self):          """          Create 3 BasicModel instances to filter on. | 
