summaryrefslogtreecommitdiff
path: root/tests/serializers/test_natural.py
diff options
context:
space:
mode:
authorClaude Paroz <claude@2xlibre.net>2015-09-26 11:53:20 +0200
committerClaude Paroz <claude@2xlibre.net>2015-09-26 19:58:43 +0200
commitd59d3caf3213686e9c762430a3ab21e28b6e367b (patch)
tree1e612f6716ab01c9237961804c6fe791c94bf0ca /tests/serializers/test_natural.py
parent6dc7af3e01eb1b9f74a8eb1ba8fd07b5e45a3644 (diff)
Separated natural key serialization tests
Diffstat (limited to 'tests/serializers/test_natural.py')
-rw-r--r--tests/serializers/test_natural.py70
1 files changed, 70 insertions, 0 deletions
diff --git a/tests/serializers/test_natural.py b/tests/serializers/test_natural.py
new file mode 100644
index 0000000000..6682e5cdd8
--- /dev/null
+++ b/tests/serializers/test_natural.py
@@ -0,0 +1,70 @@
+from __future__ import unicode_literals
+
+from django.core import serializers
+from django.db import connection
+from django.test import TestCase
+
+from .models import FKDataNaturalKey, NaturalKeyAnchor
+from .tests import register_tests
+
+
+class NaturalKeySerializerTests(TestCase):
+ pass
+
+
+def natural_key_serializer_test(format, self):
+ # Create all the objects defined in the test data
+ with connection.constraint_checks_disabled():
+ objects = [
+ NaturalKeyAnchor.objects.create(id=1100, data="Natural Key Anghor"),
+ FKDataNaturalKey.objects.create(id=1101, data_id=1100),
+ FKDataNaturalKey.objects.create(id=1102, data_id=None),
+ ]
+ # Serialize the test database
+ serialized_data = serializers.serialize(format, objects, indent=2,
+ use_natural_foreign_keys=True)
+
+ for obj in serializers.deserialize(format, serialized_data):
+ obj.save()
+
+ # Assert that the deserialized data is the same
+ # as the original source
+ for obj in objects:
+ instance = obj.__class__.objects.get(id=obj.pk)
+ self.assertEqual(obj.data, instance.data,
+ "Objects with PK=%d not equal; expected '%s' (%s), got '%s' (%s)" % (
+ obj.pk, obj.data, type(obj.data), instance, type(instance.data))
+ )
+
+
+def natural_key_test(format, self):
+ book1 = {'data': '978-1590597255', 'title': 'The Definitive Guide to '
+ 'Django: Web Development Done Right'}
+ book2 = {'data': '978-1590599969', 'title': 'Practical Django Projects'}
+
+ # Create the books.
+ adrian = NaturalKeyAnchor.objects.create(**book1)
+ james = NaturalKeyAnchor.objects.create(**book2)
+
+ # Serialize the books.
+ string_data = serializers.serialize(format, NaturalKeyAnchor.objects.all(),
+ indent=2, use_natural_foreign_keys=True,
+ use_natural_primary_keys=True)
+
+ # Delete one book (to prove that the natural key generation will only
+ # restore the primary keys of books found in the database via the
+ # get_natural_key manager method).
+ james.delete()
+
+ # Deserialize and test.
+ books = list(serializers.deserialize(format, string_data))
+ self.assertEqual(len(books), 2)
+ self.assertEqual(books[0].object.title, book1['title'])
+ self.assertEqual(books[0].object.pk, adrian.pk)
+ self.assertEqual(books[1].object.title, book2['title'])
+ self.assertEqual(books[1].object.pk, None)
+
+
+# Dynamically register tests for each serializer
+register_tests(NaturalKeySerializerTests, 'test_%s_natural_key_serializer', natural_key_serializer_test)
+register_tests(NaturalKeySerializerTests, 'test_%s_serializer_natural_keys', natural_key_test)