diff options
| author | Alex Gaynor <alex.gaynor@gmail.com> | 2010-08-09 21:16:59 +0000 |
|---|---|---|
| committer | Alex Gaynor <alex.gaynor@gmail.com> | 2010-08-09 21:16:59 +0000 |
| commit | c7bd48cb9f645e5ff07d1e68b86130e3bb2b043f (patch) | |
| tree | a0459672ce695501236fa89879615a2896b42637 /tests | |
| parent | 9b263c61f805947a06473fd5ca170e8b970aae32 (diff) | |
[soc2010/query-refactor] Improved the ListField implementation, and added an EmbeddedModelField.
git-svn-id: http://code.djangoproject.com/svn/django/branches/soc2010/query-refactor@13564 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/regressiontests/mongodb/models.py | 20 | ||||
| -rw-r--r-- | tests/regressiontests/mongodb/tests.py | 57 |
2 files changed, 75 insertions, 2 deletions
diff --git a/tests/regressiontests/mongodb/models.py b/tests/regressiontests/mongodb/models.py index f0d950dcbb..9b7e25108e 100644 --- a/tests/regressiontests/mongodb/models.py +++ b/tests/regressiontests/mongodb/models.py @@ -31,3 +31,23 @@ class Post(models.Model): magic_numbers = models.ListField( models.IntegerField() ) + + +class Revision(models.Model): + number = models.IntegerField() + content = models.TextField() + + +class AuthenticatedRevision(Revision): + # This is a really stupid way to add optional authentication, but it serves + # its purpose. + author = models.CharField(max_length=100) + + +class WikiPage(models.Model): + id = models.NativeAutoField(primary_key=True) + title = models.CharField(max_length=255) + + revisions = models.ListField( + models.EmbeddedModel(Revision) + ) diff --git a/tests/regressiontests/mongodb/tests.py b/tests/regressiontests/mongodb/tests.py index 81b780b8ff..fff6f248db 100644 --- a/tests/regressiontests/mongodb/tests.py +++ b/tests/regressiontests/mongodb/tests.py @@ -1,8 +1,9 @@ +from django.core.exceptions import ValidationError from django.db import connection, UnsupportedDatabaseOperation from django.db.models import Count, Sum, F, Q from django.test import TestCase -from models import Artist, Group, Post +from models import Artist, Group, Post, WikiPage, Revision, AuthenticatedRevision class MongoTestCase(TestCase): @@ -398,6 +399,9 @@ class MongoTestCase(TestCase): ) def test_list_field(self): + p = Post() + self.assertEqual(p.tags, []) + p = Post.objects.create( title="Django ORM grows MongoDB support", tags=["python", "django", "mongodb", "web"] @@ -428,7 +432,7 @@ class MongoTestCase(TestCase): lambda p: p.title ) - self.assertRaises(ValueError, + self.assertRaises(ValidationError, lambda: Post.objects.create(magic_numbers=["a"]) ) @@ -448,3 +452,52 @@ class MongoTestCase(TestCase): ], lambda p: p.title, ) + + def test_embedded_model(self): + page = WikiPage(title="Django") + page.revisions.append( + Revision(number=1, content="Django is a Python") + ) + page.revisions.append( + Revision(number=2, content="Django is a Python web framework.") + ) + + page.save() + + page = WikiPage.objects.get(pk=page.pk) + self.assertEqual(len(page.revisions), 2) + self.assertEqual( + [(r.number, r.content) for r in page.revisions], + [(1, "Django is a Python"), (2, "Django is a Python web framework.")] + ) + + self.assertEqual(Revision.objects.count(), 0) + + self.assertRaises(ValidationError, + lambda: WikiPage.objects.create(title="Python", revisions=14) + ) + self.assertRaises(ValidationError, + lambda: WikiPage.objects.create(title="Python", revisions=[14]) + ) + + page = WikiPage.objects.create(title="Python", revisions=[ + Revision(number=1, content="Python was created by Guido van Rossum.") + ]) + page = WikiPage.objects.get(pk=page.pk) + self.assertEqual(len(page.revisions), 1) + + page.revisions.append( + AuthenticatedRevision(number=2, content="Python is a trap.", author="Rasmus Lerdorf"), + ) + + page.save() + self.assertEqual(len(page.revisions), 2) + self.assertEqual(page.revisions[-1].author, "Rasmus Lerdorf") + + page = WikiPage.objects.get(pk=page.pk) + self.assertEqual(len(page.revisions), 2) + self.assertTrue(isinstance(page.revisions[-1], AuthenticatedRevision)) + self.assertEqual(page.revisions[-1].author, "Rasmus Lerdorf") + + page.revisions.append(14) + self.assertRaises(ValidationError, page.save) |
