summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorAlex Gaynor <alex.gaynor@gmail.com>2010-08-09 21:16:59 +0000
committerAlex Gaynor <alex.gaynor@gmail.com>2010-08-09 21:16:59 +0000
commitc7bd48cb9f645e5ff07d1e68b86130e3bb2b043f (patch)
treea0459672ce695501236fa89879615a2896b42637 /tests
parent9b263c61f805947a06473fd5ca170e8b970aae32 (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.py20
-rw-r--r--tests/regressiontests/mongodb/tests.py57
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)