diff options
| author | Chris Beaven <smileychris@gmail.com> | 2010-12-21 04:40:08 +0000 |
|---|---|---|
| committer | Chris Beaven <smileychris@gmail.com> | 2010-12-21 04:40:08 +0000 |
| commit | b60d5df07266dd4cd4f63afa6986ffb2932facc2 (patch) | |
| tree | a08f75ea3485e70b5b18bde8ea7d44414b78a0bc /tests/regressiontests | |
| parent | c2657d892396c51448432637a855eb9ecac5363c (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.py | 14 | ||||
| -rw-r--r-- | tests/regressiontests/serializers_regress/tests.py | 28 |
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)) |
