mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	Moved more serializers_regress to serializers tests
This commit is contained in:
		| @@ -159,6 +159,26 @@ class Player(models.Model): | |||||||
|         return '%s (%d) playing for %s' % (self.name, self.rank, self.team.to_string()) |         return '%s (%d) playing for %s' % (self.name, self.rank, self.team.to_string()) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class BaseModel(models.Model): | ||||||
|  |     parent_data = models.IntegerField() | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class ProxyBaseModel(BaseModel): | ||||||
|  |     class Meta: | ||||||
|  |         proxy = True | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class ProxyProxyBaseModel(ProxyBaseModel): | ||||||
|  |     class Meta: | ||||||
|  |         proxy = True | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class ComplexModel(models.Model): | ||||||
|  |     field1 = models.CharField(max_length=10) | ||||||
|  |     field2 = models.CharField(max_length=10) | ||||||
|  |     field3 = models.CharField(max_length=10) | ||||||
|  |  | ||||||
|  |  | ||||||
| # ******** Models for test_natural.py *********** | # ******** Models for test_natural.py *********** | ||||||
|  |  | ||||||
| class NaturalKeyAnchorManager(models.Manager): | class NaturalKeyAnchorManager(models.Manager): | ||||||
|   | |||||||
| @@ -4,8 +4,10 @@ from __future__ import unicode_literals | |||||||
| from datetime import datetime | from datetime import datetime | ||||||
|  |  | ||||||
| from django.core import serializers | from django.core import serializers | ||||||
|  | from django.core.serializers import SerializerDoesNotExist | ||||||
| from django.core.serializers.base import ProgressBar | from django.core.serializers.base import ProgressBar | ||||||
| from django.db import connection, transaction | from django.db import connection, transaction | ||||||
|  | from django.http import HttpResponse | ||||||
| from django.test import ( | from django.test import ( | ||||||
|     SimpleTestCase, mock, override_settings, skipUnlessDBFeature, |     SimpleTestCase, mock, override_settings, skipUnlessDBFeature, | ||||||
| ) | ) | ||||||
| @@ -14,8 +16,8 @@ from django.utils.functional import curry | |||||||
| from django.utils.six import StringIO | from django.utils.six import StringIO | ||||||
|  |  | ||||||
| from .models import ( | from .models import ( | ||||||
|     Actor, Article, Author, AuthorProfile, Category, Movie, Player, Score, |     Actor, Article, Author, AuthorProfile, BaseModel, Category, ComplexModel, | ||||||
|     Team, |     Movie, Player, ProxyBaseModel, ProxyProxyBaseModel, Score, Team, | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -51,6 +53,10 @@ class SerializerRegistrationTests(SimpleTestCase): | |||||||
|         self.assertNotIn('xml', public_formats) |         self.assertNotIn('xml', public_formats) | ||||||
|         self.assertIn('json3', public_formats) |         self.assertIn('json3', public_formats) | ||||||
|  |  | ||||||
|  |     def test_unregister_unknown_serializer(self): | ||||||
|  |         with self.assertRaises(SerializerDoesNotExist): | ||||||
|  |             serializers.unregister_serializer("nonsense") | ||||||
|  |  | ||||||
|     def test_builtin_serializers(self): |     def test_builtin_serializers(self): | ||||||
|         "Requesting a list of serializer formats popuates the registry" |         "Requesting a list of serializer formats popuates the registry" | ||||||
|         all_formats = set(serializers.get_serializer_formats()) |         all_formats = set(serializers.get_serializer_formats()) | ||||||
| @@ -65,8 +71,29 @@ class SerializerRegistrationTests(SimpleTestCase): | |||||||
|         self.assertIn('python', all_formats) |         self.assertIn('python', all_formats) | ||||||
|         self.assertNotIn('python', public_formats) |         self.assertNotIn('python', public_formats) | ||||||
|  |  | ||||||
|  |     def test_get_unknown_serializer(self): | ||||||
|  |         """ | ||||||
|  |         #15889: get_serializer('nonsense') raises a SerializerDoesNotExist | ||||||
|  |         """ | ||||||
|  |         with self.assertRaises(SerializerDoesNotExist): | ||||||
|  |             serializers.get_serializer("nonsense") | ||||||
|  |  | ||||||
|  |         with self.assertRaises(KeyError): | ||||||
|  |             serializers.get_serializer("nonsense") | ||||||
|  |  | ||||||
|  |         # SerializerDoesNotExist is instantiated with the nonexistent format | ||||||
|  |         with self.assertRaises(SerializerDoesNotExist) as cm: | ||||||
|  |             serializers.get_serializer("nonsense") | ||||||
|  |         self.assertEqual(cm.exception.args, ("nonsense",)) | ||||||
|  |  | ||||||
|  |     def test_get_unknown_deserializer(self): | ||||||
|  |         with self.assertRaises(SerializerDoesNotExist): | ||||||
|  |             serializers.get_deserializer("nonsense") | ||||||
|  |  | ||||||
|  |  | ||||||
| class SerializersTestBase(object): | class SerializersTestBase(object): | ||||||
|  |     serializer_name = None  # Set by subclasses to the serialization format name | ||||||
|  |  | ||||||
|     @staticmethod |     @staticmethod | ||||||
|     def _comparison_value(value): |     def _comparison_value(value): | ||||||
|         return value |         return value | ||||||
| @@ -108,6 +135,38 @@ class SerializersTestBase(object): | |||||||
|         models = list(serializers.deserialize(self.serializer_name, serial_str)) |         models = list(serializers.deserialize(self.serializer_name, serial_str)) | ||||||
|         self.assertEqual(len(models), 2) |         self.assertEqual(len(models), 2) | ||||||
|  |  | ||||||
|  |     def test_serialize_to_stream(self): | ||||||
|  |         obj = ComplexModel(field1='first', field2='second', field3='third') | ||||||
|  |         obj.save_base(raw=True) | ||||||
|  |  | ||||||
|  |         # Serialize the test database to a stream | ||||||
|  |         for stream in (StringIO(), HttpResponse()): | ||||||
|  |             serializers.serialize(self.serializer_name, [obj], indent=2, stream=stream) | ||||||
|  |  | ||||||
|  |             # Serialize normally for a comparison | ||||||
|  |             string_data = serializers.serialize(self.serializer_name, [obj], indent=2) | ||||||
|  |  | ||||||
|  |             # Check that the two are the same | ||||||
|  |             if isinstance(stream, StringIO): | ||||||
|  |                 self.assertEqual(string_data, stream.getvalue()) | ||||||
|  |             else: | ||||||
|  |                 self.assertEqual(string_data, stream.content.decode('utf-8')) | ||||||
|  |  | ||||||
|  |     def test_serialize_specific_fields(self): | ||||||
|  |         obj = ComplexModel(field1='first', field2='second', field3='third') | ||||||
|  |         obj.save_base(raw=True) | ||||||
|  |  | ||||||
|  |         # Serialize then deserialize the test database | ||||||
|  |         serialized_data = serializers.serialize( | ||||||
|  |             self.serializer_name, [obj], indent=2, fields=('field1', 'field3') | ||||||
|  |         ) | ||||||
|  |         result = next(serializers.deserialize(self.serializer_name, serialized_data)) | ||||||
|  |  | ||||||
|  |         # Check that the deserialized object contains data in only the serialized fields. | ||||||
|  |         self.assertEqual(result.object.field1, 'first') | ||||||
|  |         self.assertEqual(result.object.field2, '') | ||||||
|  |         self.assertEqual(result.object.field3, 'third') | ||||||
|  |  | ||||||
|     def test_altering_serialized_output(self): |     def test_altering_serialized_output(self): | ||||||
|         """ |         """ | ||||||
|         Tests the ability to create new objects by |         Tests the ability to create new objects by | ||||||
| @@ -294,6 +353,18 @@ class SerializersTestBase(object): | |||||||
|             deserial_obj.save(force_insert=False) |             deserial_obj.save(force_insert=False) | ||||||
|             mock_model.save_base.assert_called_with(deserial_obj.object, raw=True, using=None, force_insert=False) |             mock_model.save_base.assert_called_with(deserial_obj.object, raw=True, using=None, force_insert=False) | ||||||
|  |  | ||||||
|  |     @skipUnlessDBFeature('can_defer_constraint_checks') | ||||||
|  |     def test_serialize_proxy_model(self): | ||||||
|  |         BaseModel.objects.create(parent_data=1) | ||||||
|  |         base_objects = BaseModel.objects.all() | ||||||
|  |         proxy_objects = ProxyBaseModel.objects.all() | ||||||
|  |         proxy_proxy_objects = ProxyProxyBaseModel.objects.all() | ||||||
|  |         base_data = serializers.serialize("json", base_objects) | ||||||
|  |         proxy_data = serializers.serialize("json", proxy_objects) | ||||||
|  |         proxy_proxy_data = serializers.serialize("json", proxy_proxy_objects) | ||||||
|  |         self.assertEqual(base_data, proxy_data.replace('proxy', '')) | ||||||
|  |         self.assertEqual(base_data, proxy_proxy_data.replace('proxy', '')) | ||||||
|  |  | ||||||
|  |  | ||||||
| class SerializersTransactionTestBase(object): | class SerializersTransactionTestBase(object): | ||||||
|  |  | ||||||
|   | |||||||
| @@ -261,11 +261,6 @@ class FKToUUID(models.Model): | |||||||
|     data = models.ForeignKey(UUIDData, models.CASCADE) |     data = models.ForeignKey(UUIDData, models.CASCADE) | ||||||
|  |  | ||||||
|  |  | ||||||
| class ComplexModel(models.Model): |  | ||||||
|     field1 = models.CharField(max_length=10) |  | ||||||
|     field2 = models.CharField(max_length=10) |  | ||||||
|     field3 = models.CharField(max_length=10) |  | ||||||
|  |  | ||||||
| # Tests for handling fields with pre_save functions, or | # Tests for handling fields with pre_save functions, or | ||||||
| # models with save functions that modify data | # models with save functions that modify data | ||||||
|  |  | ||||||
| @@ -314,16 +309,6 @@ class ExplicitInheritBaseModel(BaseModel): | |||||||
|     child_data = models.IntegerField() |     child_data = models.IntegerField() | ||||||
|  |  | ||||||
|  |  | ||||||
| class ProxyBaseModel(BaseModel): |  | ||||||
|     class Meta: |  | ||||||
|         proxy = True |  | ||||||
|  |  | ||||||
|  |  | ||||||
| class ProxyProxyBaseModel(ProxyBaseModel): |  | ||||||
|     class Meta: |  | ||||||
|         proxy = True |  | ||||||
|  |  | ||||||
|  |  | ||||||
| class LengthModel(models.Model): | class LengthModel(models.Model): | ||||||
|     data = models.IntegerField() |     data = models.IntegerField() | ||||||
|  |  | ||||||
|   | |||||||
| @@ -13,16 +13,15 @@ import decimal | |||||||
| import uuid | import uuid | ||||||
|  |  | ||||||
| from django.core import serializers | from django.core import serializers | ||||||
| from django.core.serializers import SerializerDoesNotExist |  | ||||||
| from django.db import connection, models | from django.db import connection, models | ||||||
| from django.http import HttpResponse | from django.http import HttpResponse | ||||||
| from django.test import TestCase, skipUnlessDBFeature | from django.test import TestCase | ||||||
| from django.utils import six | from django.utils import six | ||||||
| from django.utils.functional import curry | from django.utils.functional import curry | ||||||
|  |  | ||||||
| from .models import ( | from .models import ( | ||||||
|     Anchor, AutoNowDateTimeData, BaseModel, BigIntegerData, BinaryData, |     Anchor, AutoNowDateTimeData, BigIntegerData, BinaryData, | ||||||
|     BooleanData, BooleanPKData, CharData, CharPKData, ComplexModel, DateData, |     BooleanData, BooleanPKData, CharData, CharPKData, DateData, | ||||||
|     DateTimeData, DecimalData, DecimalPKData, EmailData, EmailPKData, |     DateTimeData, DecimalData, DecimalPKData, EmailData, EmailPKData, | ||||||
|     ExplicitInheritBaseModel, FileData, FilePathData, FilePathPKData, FKData, |     ExplicitInheritBaseModel, FileData, FilePathData, FilePathPKData, FKData, | ||||||
|     FKDataToField, FKDataToO2O, FKSelfData, FKToUUID, |     FKDataToField, FKDataToO2O, FKSelfData, FKToUUID, | ||||||
| @@ -31,9 +30,8 @@ from .models import ( | |||||||
|     IntegerData, IntegerPKData, Intermediate, LengthModel, M2MData, |     IntegerData, IntegerPKData, Intermediate, LengthModel, M2MData, | ||||||
|     M2MIntermediateData, M2MSelfData, ModifyingSaveData, |     M2MIntermediateData, M2MSelfData, ModifyingSaveData, | ||||||
|     NullBooleanData, O2OData, PositiveIntegerData, PositiveIntegerPKData, |     NullBooleanData, O2OData, PositiveIntegerData, PositiveIntegerPKData, | ||||||
|     PositiveSmallIntegerData, PositiveSmallIntegerPKData, ProxyBaseModel, |     PositiveSmallIntegerData, PositiveSmallIntegerPKData, SlugData, SlugPKData, | ||||||
|     ProxyProxyBaseModel, SlugData, SlugPKData, SmallData, SmallPKData, Tag, |     SmallData, SmallPKData, Tag, TextData, TimeData, UniqueAnchor, UUIDData, | ||||||
|     TextData, TimeData, UniqueAnchor, UUIDData, |  | ||||||
| ) | ) | ||||||
|  |  | ||||||
| # A set of functions that can be used to recreate | # A set of functions that can be used to recreate | ||||||
| @@ -387,42 +385,8 @@ if connection.features.allows_auto_pk_0: | |||||||
|     ]) |     ]) | ||||||
|  |  | ||||||
|  |  | ||||||
| @skipUnlessDBFeature('can_defer_constraint_checks') |  | ||||||
| class SerializerTests(TestCase): | class SerializerTests(TestCase): | ||||||
|     def test_get_unknown_serializer(self): |     pass | ||||||
|         """ |  | ||||||
|         #15889: get_serializer('nonsense') raises a SerializerDoesNotExist |  | ||||||
|         """ |  | ||||||
|         with self.assertRaises(SerializerDoesNotExist): |  | ||||||
|             serializers.get_serializer("nonsense") |  | ||||||
|  |  | ||||||
|         with self.assertRaises(KeyError): |  | ||||||
|             serializers.get_serializer("nonsense") |  | ||||||
|  |  | ||||||
|         # SerializerDoesNotExist is instantiated with the nonexistent format |  | ||||||
|         with self.assertRaises(SerializerDoesNotExist) as cm: |  | ||||||
|             serializers.get_serializer("nonsense") |  | ||||||
|         self.assertEqual(cm.exception.args, ("nonsense",)) |  | ||||||
|  |  | ||||||
|     def test_unregister_unknown_serializer(self): |  | ||||||
|         with self.assertRaises(SerializerDoesNotExist): |  | ||||||
|             serializers.unregister_serializer("nonsense") |  | ||||||
|  |  | ||||||
|     def test_get_unknown_deserializer(self): |  | ||||||
|         with self.assertRaises(SerializerDoesNotExist): |  | ||||||
|             serializers.get_deserializer("nonsense") |  | ||||||
|  |  | ||||||
|     def test_serialize_proxy_model(self): |  | ||||||
|         BaseModel.objects.create(parent_data=1) |  | ||||||
|         base_objects = BaseModel.objects.all() |  | ||||||
|         proxy_objects = ProxyBaseModel.objects.all() |  | ||||||
|         proxy_proxy_objects = ProxyProxyBaseModel.objects.all() |  | ||||||
|         base_data = serializers.serialize("json", base_objects) |  | ||||||
|         proxy_data = serializers.serialize("json", proxy_objects) |  | ||||||
|         proxy_proxy_data = serializers.serialize("json", proxy_proxy_objects) |  | ||||||
|         self.assertEqual(base_data, proxy_data.replace('proxy', '')) |  | ||||||
|         self.assertEqual(base_data, proxy_proxy_data.replace('proxy', '')) |  | ||||||
|  |  | ||||||
|  |  | ||||||
| def serializerTest(format, self): | def serializerTest(format, self): | ||||||
|  |  | ||||||
| @@ -457,41 +421,6 @@ def serializerTest(format, self): | |||||||
|         self.assertEqual(count, klass.objects.count()) |         self.assertEqual(count, klass.objects.count()) | ||||||
|  |  | ||||||
|  |  | ||||||
| def fieldsTest(format, self): |  | ||||||
|     obj = ComplexModel(field1='first', field2='second', field3='third') |  | ||||||
|     obj.save_base(raw=True) |  | ||||||
|  |  | ||||||
|     # Serialize then deserialize the test database |  | ||||||
|     serialized_data = serializers.serialize(format, [obj], indent=2, fields=('field1', 'field3')) |  | ||||||
|     result = next(serializers.deserialize(format, serialized_data)) |  | ||||||
|  |  | ||||||
|     # Check that the deserialized object contains data in only the serialized fields. |  | ||||||
|     self.assertEqual(result.object.field1, 'first') |  | ||||||
|     self.assertEqual(result.object.field2, '') |  | ||||||
|     self.assertEqual(result.object.field3, 'third') |  | ||||||
|  |  | ||||||
|  |  | ||||||
| def streamTest(format, self): |  | ||||||
|     obj = ComplexModel(field1='first', field2='second', field3='third') |  | ||||||
|     obj.save_base(raw=True) |  | ||||||
|  |  | ||||||
|     # Serialize the test database to a stream |  | ||||||
|     for stream in (six.StringIO(), HttpResponse()): |  | ||||||
|         serializers.serialize(format, [obj], indent=2, stream=stream) |  | ||||||
|  |  | ||||||
|         # Serialize normally for a comparison |  | ||||||
|         string_data = serializers.serialize(format, [obj], indent=2) |  | ||||||
|  |  | ||||||
|         # Check that the two are the same |  | ||||||
|         if isinstance(stream, six.StringIO): |  | ||||||
|             self.assertEqual(string_data, stream.getvalue()) |  | ||||||
|         else: |  | ||||||
|             self.assertEqual(string_data, stream.content.decode('utf-8')) |  | ||||||
|  |  | ||||||
|  |  | ||||||
| for format in [f for f in serializers.get_serializer_formats() | for format in [f for f in serializers.get_serializer_formats() | ||||||
|                if not isinstance(serializers.get_serializer(f), serializers.BadSerializer) and not f == 'geojson']: |                if not isinstance(serializers.get_serializer(f), serializers.BadSerializer) and not f == 'geojson']: | ||||||
|     setattr(SerializerTests, 'test_' + format + '_serializer', curry(serializerTest, format)) |     setattr(SerializerTests, 'test_' + format + '_serializer', curry(serializerTest, format)) | ||||||
|     setattr(SerializerTests, 'test_' + format + '_serializer_fields', curry(fieldsTest, format)) |  | ||||||
|     if format != 'python': |  | ||||||
|         setattr(SerializerTests, 'test_' + format + '_serializer_stream', curry(streamTest, format)) |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user