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.py331
1 files changed, 167 insertions, 164 deletions
diff --git a/tests/test_serializer_bulk_update.py b/tests/test_serializer_bulk_update.py
index 67a8ed0d..2259ee31 100644
--- a/tests/test_serializer_bulk_update.py
+++ b/tests/test_serializer_bulk_update.py
@@ -3,6 +3,7 @@ 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
@@ -42,11 +43,11 @@ class BulkCreateSerializerTests(TestCase):
serializer = self.BookSerializer(data=data, many=True)
self.assertEqual(serializer.is_valid(), True)
- self.assertEqual(serializer.object, data)
+ self.assertEqual(serializer.validated_data, data)
def test_bulk_create_errors(self):
"""
- Correct bulk update serialization should return the input data.
+ Incorrect bulk create serialization should return errors.
"""
data = [
@@ -67,7 +68,7 @@ class BulkCreateSerializerTests(TestCase):
expected_errors = [
{},
{},
- {'id': ['Enter a whole number.']}
+ {'id': ['A valid integer is required.']}
]
serializer = self.BookSerializer(data=data, many=True)
@@ -82,10 +83,12 @@ class BulkCreateSerializerTests(TestCase):
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': ['Invalid data']},
- {'non_field_errors': ['Invalid data']},
- {'non_field_errors': ['Invalid data']}
+ {'non_field_errors': [message]},
+ {'non_field_errors': [message]},
+ {'non_field_errors': [message]}
]
self.assertEqual(serializer.errors, expected_errors)
@@ -98,7 +101,7 @@ class BulkCreateSerializerTests(TestCase):
serializer = self.BookSerializer(data=data, many=True)
self.assertEqual(serializer.is_valid(), False)
- expected_errors = {'non_field_errors': ['Expected a list of items.']}
+ expected_errors = {'non_field_errors': ['Expected a list of items but got type `int`.']}
self.assertEqual(serializer.errors, expected_errors)
@@ -115,164 +118,164 @@ class BulkCreateSerializerTests(TestCase):
serializer = self.BookSerializer(data=data, many=True)
self.assertEqual(serializer.is_valid(), False)
- expected_errors = {'non_field_errors': ['Expected a list of items.']}
+ expected_errors = {'non_field_errors': ['Expected a list of items but got type `dict`.']}
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)
+# 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)