aboutsummaryrefslogtreecommitdiffstats
path: root/tests/test_serializer_bulk_update.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_serializer_bulk_update.py')
-rw-r--r--tests/test_serializer_bulk_update.py401
1 files changed, 123 insertions, 278 deletions
diff --git a/tests/test_serializer_bulk_update.py b/tests/test_serializer_bulk_update.py
index 3341ce59..fb881a75 100644
--- a/tests/test_serializer_bulk_update.py
+++ b/tests/test_serializer_bulk_update.py
@@ -1,278 +1,123 @@
-# """
-# Tests to cover bulk create and update using serializers.
-# """
-# from __future__ import unicode_literals
-# from django.test import TestCase
-# from rest_framework import serializers
-
-
-# class BulkCreateSerializerTests(TestCase):
-# """
-# Creating multiple instances using serializers.
-# """
-
-# def setUp(self):
-# class BookSerializer(serializers.Serializer):
-# id = serializers.IntegerField()
-# title = serializers.CharField(max_length=100)
-# author = serializers.CharField(max_length=100)
-
-# self.BookSerializer = BookSerializer
-
-# def test_bulk_create_success(self):
-# """
-# Correct bulk update serialization should return the input data.
-# """
-
-# data = [
-# {
-# 'id': 0,
-# 'title': 'The electric kool-aid acid test',
-# 'author': 'Tom Wolfe'
-# }, {
-# 'id': 1,
-# 'title': 'If this is a man',
-# 'author': 'Primo Levi'
-# }, {
-# 'id': 2,
-# 'title': 'The wind-up bird chronicle',
-# 'author': 'Haruki Murakami'
-# }
-# ]
-
-# serializer = self.BookSerializer(data=data, many=True)
-# self.assertEqual(serializer.is_valid(), True)
-# self.assertEqual(serializer.object, data)
-
-# def test_bulk_create_errors(self):
-# """
-# Correct bulk update serialization should return the input data.
-# """
-
-# data = [
-# {
-# 'id': 0,
-# 'title': 'The electric kool-aid acid test',
-# 'author': 'Tom Wolfe'
-# }, {
-# 'id': 1,
-# 'title': 'If this is a man',
-# 'author': 'Primo Levi'
-# }, {
-# 'id': 'foo',
-# 'title': 'The wind-up bird chronicle',
-# 'author': 'Haruki Murakami'
-# }
-# ]
-# expected_errors = [
-# {},
-# {},
-# {'id': ['Enter a whole number.']}
-# ]
-
-# serializer = self.BookSerializer(data=data, many=True)
-# self.assertEqual(serializer.is_valid(), False)
-# self.assertEqual(serializer.errors, expected_errors)
-
-# def test_invalid_list_datatype(self):
-# """
-# Data containing list of incorrect data type should return errors.
-# """
-# data = ['foo', 'bar', 'baz']
-# serializer = self.BookSerializer(data=data, many=True)
-# self.assertEqual(serializer.is_valid(), False)
-
-# expected_errors = [
-# {'non_field_errors': ['Invalid data']},
-# {'non_field_errors': ['Invalid data']},
-# {'non_field_errors': ['Invalid data']}
-# ]
-
-# self.assertEqual(serializer.errors, expected_errors)
-
-# def test_invalid_single_datatype(self):
-# """
-# Data containing a single incorrect data type should return errors.
-# """
-# data = 123
-# serializer = self.BookSerializer(data=data, many=True)
-# self.assertEqual(serializer.is_valid(), False)
-
-# expected_errors = {'non_field_errors': ['Expected a list of items.']}
-
-# self.assertEqual(serializer.errors, expected_errors)
-
-# def test_invalid_single_object(self):
-# """
-# Data containing only a single object, instead of a list of objects
-# should return errors.
-# """
-# data = {
-# 'id': 0,
-# 'title': 'The electric kool-aid acid test',
-# 'author': 'Tom Wolfe'
-# }
-# serializer = self.BookSerializer(data=data, many=True)
-# self.assertEqual(serializer.is_valid(), False)
-
-# expected_errors = {'non_field_errors': ['Expected a list of items.']}
-
-# self.assertEqual(serializer.errors, expected_errors)
-
-
-# class BulkUpdateSerializerTests(TestCase):
-# """
-# Updating multiple instances using serializers.
-# """
-
-# def setUp(self):
-# class Book(object):
-# """
-# A data type that can be persisted to a mock storage backend
-# with `.save()` and `.delete()`.
-# """
-# object_map = {}
-
-# def __init__(self, id, title, author):
-# self.id = id
-# self.title = title
-# self.author = author
-
-# def save(self):
-# Book.object_map[self.id] = self
-
-# def delete(self):
-# del Book.object_map[self.id]
-
-# class BookSerializer(serializers.Serializer):
-# id = serializers.IntegerField()
-# title = serializers.CharField(max_length=100)
-# author = serializers.CharField(max_length=100)
-
-# def restore_object(self, attrs, instance=None):
-# if instance:
-# instance.id = attrs['id']
-# instance.title = attrs['title']
-# instance.author = attrs['author']
-# return instance
-# return Book(**attrs)
-
-# self.Book = Book
-# self.BookSerializer = BookSerializer
-
-# data = [
-# {
-# 'id': 0,
-# 'title': 'The electric kool-aid acid test',
-# 'author': 'Tom Wolfe'
-# }, {
-# 'id': 1,
-# 'title': 'If this is a man',
-# 'author': 'Primo Levi'
-# }, {
-# 'id': 2,
-# 'title': 'The wind-up bird chronicle',
-# 'author': 'Haruki Murakami'
-# }
-# ]
-
-# for item in data:
-# book = Book(item['id'], item['title'], item['author'])
-# book.save()
-
-# def books(self):
-# """
-# Return all the objects in the mock storage backend.
-# """
-# return self.Book.object_map.values()
-
-# def test_bulk_update_success(self):
-# """
-# Correct bulk update serialization should return the input data.
-# """
-# data = [
-# {
-# 'id': 0,
-# 'title': 'The electric kool-aid acid test',
-# 'author': 'Tom Wolfe'
-# }, {
-# 'id': 2,
-# 'title': 'Kafka on the shore',
-# 'author': 'Haruki Murakami'
-# }
-# ]
-# serializer = self.BookSerializer(self.books(), data=data, many=True, allow_add_remove=True)
-# self.assertEqual(serializer.is_valid(), True)
-# self.assertEqual(serializer.data, data)
-# serializer.save()
-# new_data = self.BookSerializer(self.books(), many=True).data
-
-# self.assertEqual(data, new_data)
-
-# def test_bulk_update_and_create(self):
-# """
-# Bulk update serialization may also include created items.
-# """
-# data = [
-# {
-# 'id': 0,
-# 'title': 'The electric kool-aid acid test',
-# 'author': 'Tom Wolfe'
-# }, {
-# 'id': 3,
-# 'title': 'Kafka on the shore',
-# 'author': 'Haruki Murakami'
-# }
-# ]
-# serializer = self.BookSerializer(self.books(), data=data, many=True, allow_add_remove=True)
-# self.assertEqual(serializer.is_valid(), True)
-# self.assertEqual(serializer.data, data)
-# serializer.save()
-# new_data = self.BookSerializer(self.books(), many=True).data
-# self.assertEqual(data, new_data)
-
-# def test_bulk_update_invalid_create(self):
-# """
-# Bulk update serialization without allow_add_remove may not create items.
-# """
-# data = [
-# {
-# 'id': 0,
-# 'title': 'The electric kool-aid acid test',
-# 'author': 'Tom Wolfe'
-# }, {
-# 'id': 3,
-# 'title': 'Kafka on the shore',
-# 'author': 'Haruki Murakami'
-# }
-# ]
-# expected_errors = [
-# {},
-# {'non_field_errors': ['Cannot create a new item, only existing items may be updated.']}
-# ]
-# serializer = self.BookSerializer(self.books(), data=data, many=True)
-# self.assertEqual(serializer.is_valid(), False)
-# self.assertEqual(serializer.errors, expected_errors)
-
-# def test_bulk_update_error(self):
-# """
-# Incorrect bulk update serialization should return error data.
-# """
-# data = [
-# {
-# 'id': 0,
-# 'title': 'The electric kool-aid acid test',
-# 'author': 'Tom Wolfe'
-# }, {
-# 'id': 'foo',
-# 'title': 'Kafka on the shore',
-# 'author': 'Haruki Murakami'
-# }
-# ]
-# expected_errors = [
-# {},
-# {'id': ['Enter a whole number.']}
-# ]
-# serializer = self.BookSerializer(self.books(), data=data, many=True, allow_add_remove=True)
-# self.assertEqual(serializer.is_valid(), False)
-# self.assertEqual(serializer.errors, expected_errors)
+"""
+Tests to cover bulk create and update using serializers.
+"""
+from __future__ import unicode_literals
+from django.test import TestCase
+from django.utils import six
+from rest_framework import serializers
+
+
+class BulkCreateSerializerTests(TestCase):
+ """
+ Creating multiple instances using serializers.
+ """
+
+ def setUp(self):
+ class BookSerializer(serializers.Serializer):
+ id = serializers.IntegerField()
+ title = serializers.CharField(max_length=100)
+ author = serializers.CharField(max_length=100)
+
+ self.BookSerializer = BookSerializer
+
+ def test_bulk_create_success(self):
+ """
+ Correct bulk update serialization should return the input data.
+ """
+
+ data = [
+ {
+ 'id': 0,
+ 'title': 'The electric kool-aid acid test',
+ 'author': 'Tom Wolfe'
+ }, {
+ 'id': 1,
+ 'title': 'If this is a man',
+ 'author': 'Primo Levi'
+ }, {
+ 'id': 2,
+ 'title': 'The wind-up bird chronicle',
+ 'author': 'Haruki Murakami'
+ }
+ ]
+
+ serializer = self.BookSerializer(data=data, many=True)
+ self.assertEqual(serializer.is_valid(), True)
+ self.assertEqual(serializer.validated_data, data)
+
+ def test_bulk_create_errors(self):
+ """
+ Incorrect bulk create serialization should return errors.
+ """
+
+ data = [
+ {
+ 'id': 0,
+ 'title': 'The electric kool-aid acid test',
+ 'author': 'Tom Wolfe'
+ }, {
+ 'id': 1,
+ 'title': 'If this is a man',
+ 'author': 'Primo Levi'
+ }, {
+ 'id': 'foo',
+ 'title': 'The wind-up bird chronicle',
+ 'author': 'Haruki Murakami'
+ }
+ ]
+ expected_errors = [
+ {},
+ {},
+ {'id': ['A valid integer is required.']}
+ ]
+
+ serializer = self.BookSerializer(data=data, many=True)
+ self.assertEqual(serializer.is_valid(), False)
+ self.assertEqual(serializer.errors, expected_errors)
+
+ def test_invalid_list_datatype(self):
+ """
+ Data containing list of incorrect data type should return errors.
+ """
+ data = ['foo', 'bar', 'baz']
+ serializer = self.BookSerializer(data=data, many=True)
+ self.assertEqual(serializer.is_valid(), False)
+
+ text_type_string = six.text_type.__name__
+ message = 'Invalid data. Expected a dictionary, but got %s.' % text_type_string
+ expected_errors = [
+ {'non_field_errors': [message]},
+ {'non_field_errors': [message]},
+ {'non_field_errors': [message]}
+ ]
+
+ self.assertEqual(serializer.errors, expected_errors)
+
+ def test_invalid_single_datatype(self):
+ """
+ Data containing a single incorrect data type should return errors.
+ """
+ data = 123
+ serializer = self.BookSerializer(data=data, many=True)
+ self.assertEqual(serializer.is_valid(), False)
+
+ expected_errors = {'non_field_errors': ['Expected a list of items but got type `int`.']}
+
+ self.assertEqual(serializer.errors, expected_errors)
+
+ def test_invalid_single_object(self):
+ """
+ Data containing only a single object, instead of a list of objects
+ should return errors.
+ """
+ data = {
+ 'id': 0,
+ 'title': 'The electric kool-aid acid test',
+ 'author': 'Tom Wolfe'
+ }
+ serializer = self.BookSerializer(data=data, many=True)
+ self.assertEqual(serializer.is_valid(), False)
+
+ expected_errors = {'non_field_errors': ['Expected a list of items but got type `dict`.']}
+
+ self.assertEqual(serializer.errors, expected_errors)