From cf72b9a8b755652cec4ad19a27488e3a79c2e401 Mon Sep 17 00:00:00 2001
From: Tom Christie <tom@tomchristie.com>
Date: Fri, 19 Sep 2014 16:43:13 +0100
Subject: [PATCH] Moar tests

---
 rest_framework/serializers.py  |  2 ++
 tests/test_model_serializer.py | 33 +++++++++++++++++++++++++++++++++
 2 files changed, 35 insertions(+)

diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py
index d2740fc2a..d9f9c8cbc 100644
--- a/rest_framework/serializers.py
+++ b/rest_framework/serializers.py
@@ -24,6 +24,7 @@ from rest_framework.utils.field_mapping import (
     lookup_class
 )
 import copy
+import inspect
 
 # Note: We do the following so that users of the framework can use this style:
 #
@@ -268,6 +269,7 @@ class ListSerializer(BaseSerializer):
     def __init__(self, *args, **kwargs):
         self.child = kwargs.pop('child', copy.deepcopy(self.child))
         assert self.child is not None, '`child` is a required argument.'
+        assert not inspect.isclass(self.child), '`child` has not been instantiated.'
         self.context = kwargs.pop('context', {})
         kwargs.pop('partial', None)
 
diff --git a/tests/test_model_serializer.py b/tests/test_model_serializer.py
index d518dd581..d9f9efbe7 100644
--- a/tests/test_model_serializer.py
+++ b/tests/test_model_serializer.py
@@ -473,3 +473,36 @@ class TestIntegration(TestCase):
             'through': []
         }
         self.assertEqual(serializer.data, expected)
+
+
+# Tests for bulk create using `ListSerializer`.
+
+class BulkCreateModel(models.Model):
+    name = models.CharField(max_length=10)
+
+
+class TestBulkCreate(TestCase):
+    def test_bulk_create(self):
+        class BasicModelSerializer(serializers.ModelSerializer):
+            class Meta:
+                model = BulkCreateModel
+                fields = ('name',)
+
+        class BulkCreateSerializer(serializers.ListSerializer):
+            child = BasicModelSerializer()
+
+        data = [{'name': 'a'}, {'name': 'b'}, {'name': 'c'}]
+        serializer = BulkCreateSerializer(data=data)
+        assert serializer.is_valid()
+
+        # Objects are returned by save().
+        instances = serializer.save()
+        assert len(instances) == 3
+        assert [item.name for item in instances] == ['a', 'b', 'c']
+
+        # Objects have been created in the database.
+        assert BulkCreateModel.objects.count() == 3
+        assert list(BulkCreateModel.objects.values_list('name', flat=True)) == ['a', 'b', 'c']
+
+        # Serializer returns correct data.
+        assert serializer.data == data