summaryrefslogtreecommitdiff
path: root/tests/regressiontests
diff options
context:
space:
mode:
authorChris Beaven <smileychris@gmail.com>2010-12-21 04:40:08 +0000
committerChris Beaven <smileychris@gmail.com>2010-12-21 04:40:08 +0000
commitb60d5df07266dd4cd4f63afa6986ffb2932facc2 (patch)
treea08f75ea3485e70b5b18bde8ea7d44414b78a0bc /tests/regressiontests
parentc2657d892396c51448432637a855eb9ecac5363c (diff)
Fixes #13252 -- Use the natural key instead of the primary key when serializing
git-svn-id: http://code.djangoproject.com/svn/django/trunk@14994 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'tests/regressiontests')
-rw-r--r--tests/regressiontests/serializers_regress/models.py14
-rw-r--r--tests/regressiontests/serializers_regress/tests.py28
2 files changed, 42 insertions, 0 deletions
diff --git a/tests/regressiontests/serializers_regress/models.py b/tests/regressiontests/serializers_regress/models.py
index bec0a98202..32c55c0707 100644
--- a/tests/regressiontests/serializers_regress/models.py
+++ b/tests/regressiontests/serializers_regress/models.py
@@ -264,3 +264,17 @@ class LengthModel(models.Model):
def __len__(self):
return self.data
+
+#Tests for natural keys.
+class BookManager(models.Manager):
+ def get_by_natural_key(self, isbn13):
+ return self.get(isbn13=isbn13)
+
+class Book(models.Model):
+ isbn13 = models.CharField(max_length=14)
+ title = models.CharField(max_length=100)
+
+ objects = BookManager()
+
+ def natural_key(self):
+ return (self.isbn13,)
diff --git a/tests/regressiontests/serializers_regress/tests.py b/tests/regressiontests/serializers_regress/tests.py
index 4180143e21..12cc4f9bf2 100644
--- a/tests/regressiontests/serializers_regress/tests.py
+++ b/tests/regressiontests/serializers_regress/tests.py
@@ -414,8 +414,36 @@ def streamTest(format, self):
self.assertEqual(string_data, stream.getvalue())
stream.close()
+def naturalKeyTest(format, self):
+ book1 = {'isbn13': '978-1590597255', 'title': 'The Definitive Guide to '
+ 'Django: Web Development Done Right'}
+ book2 = {'isbn13':'978-1590599969', 'title': 'Practical Django Projects'}
+
+ # Create the books.
+ adrian = Book.objects.create(**book1)
+ james = Book.objects.create(**book2)
+
+ # Serialize the books.
+ string_data = serializers.serialize(format, Book.objects.all(), indent=2,
+ use_natural_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)
+
for format in serializers.get_serializer_formats():
setattr(SerializerTests, 'test_' + format + '_serializer', curry(serializerTest, format))
setattr(SerializerTests, 'test_' + format + '_serializer_fields', curry(fieldsTest, format))
+ setattr(SerializerTests, 'test_' + format + '_serializer_natural_key',
+ curry(naturalKeyTest, format))
if format != 'python':
setattr(SerializerTests, 'test_' + format + '_serializer_stream', curry(streamTest, format))