Merge branch 'validation-schema' of https://github.com/n1k0/mongoengine into validation-schema

Conflicts:
	mongoengine/base.py
	mongoengine/fields.py
This commit is contained in:
Ross Lawley
2011-11-01 01:45:32 -07:00
4 changed files with 270 additions and 146 deletions

View File

@@ -359,27 +359,27 @@ class FieldTest(unittest.TestCase):
logs = LogEntry.objects.order_by("date")
count = logs.count()
i = 0
while i == count-1:
self.assertTrue(logs[i].date <= logs[i+1].date)
i +=1
while i == count - 1:
self.assertTrue(logs[i].date <= logs[i + 1].date)
i += 1
logs = LogEntry.objects.order_by("-date")
count = logs.count()
i = 0
while i == count-1:
self.assertTrue(logs[i].date >= logs[i+1].date)
i +=1
while i == count - 1:
self.assertTrue(logs[i].date >= logs[i + 1].date)
i += 1
# Test searching
logs = LogEntry.objects.filter(date__gte=datetime.datetime(1980,1,1))
logs = LogEntry.objects.filter(date__gte=datetime.datetime(1980, 1, 1))
self.assertEqual(logs.count(), 30)
logs = LogEntry.objects.filter(date__lte=datetime.datetime(1980,1,1))
logs = LogEntry.objects.filter(date__lte=datetime.datetime(1980, 1, 1))
self.assertEqual(logs.count(), 30)
logs = LogEntry.objects.filter(
date__lte=datetime.datetime(2011,1,1),
date__gte=datetime.datetime(2000,1,1),
date__lte=datetime.datetime(2011, 1, 1),
date__gte=datetime.datetime(2000, 1, 1),
)
self.assertEqual(logs.count(), 10)
@@ -1130,7 +1130,6 @@ class FieldTest(unittest.TestCase):
Post.drop_collection()
User.drop_collection()
def test_generic_reference_document_not_registered(self):
"""Ensure dereferencing out of the document registry throws a
`NotRegistered` error.
@@ -1157,7 +1156,7 @@ class FieldTest(unittest.TestCase):
user = User.objects.first()
try:
user.bookmarks
raise AssertionError, "Link was removed from the registry"
raise AssertionError("Link was removed from the registry")
except NotRegistered:
pass
@@ -1357,7 +1356,7 @@ class FieldTest(unittest.TestCase):
# Make sure FileField is optional and not required
class DemoFile(Document):
file = FileField()
d = DemoFile.objects.create()
DemoFile.objects.create()
def test_file_uniqueness(self):
"""Ensure that each instance of a FileField is unique
@@ -1617,7 +1616,6 @@ class FieldTest(unittest.TestCase):
c = self.db['mongoengine.counters'].find_one({'_id': 'animal.id'})
self.assertEqual(c['next'], 10)
def test_generic_embedded_document(self):
class Car(EmbeddedDocument):
name = StringField()
@@ -1643,5 +1641,88 @@ class FieldTest(unittest.TestCase):
person = Person.objects.first()
self.assertTrue(isinstance(person.like, Dish))
def test_recursive_validation(self):
"""Ensure that a validation result schema is available.
"""
class Author(EmbeddedDocument):
name = StringField(required=True)
class Comment(EmbeddedDocument):
author = EmbeddedDocumentField(Author, required=True)
content = StringField(required=True)
class Post(Document):
title = StringField(required=True)
comments = ListField(EmbeddedDocumentField(Comment))
bob = Author(name='Bob')
post = Post(title='hello world')
post.comments.append(Comment(content='hello', author=bob))
post.comments.append(Comment(author=bob))
try:
post.validate()
except ValidationError, error:
pass
# ValidationError.errors property
self.assertTrue(hasattr(error, 'errors'))
self.assertTrue(isinstance(error.errors, dict))
self.assertTrue('comments' in error.errors)
self.assertTrue(1 in error.errors['comments'])
self.assertTrue(isinstance(error.errors['comments'][1]['content'],
ValidationError))
# ValidationError.schema property
schema = error.schema
self.assertTrue(isinstance(schema, dict))
self.assertTrue('comments' in schema)
self.assertTrue(1 in schema['comments'])
self.assertTrue('content' in schema['comments'][1])
self.assertEquals(schema['comments'][1]['content'],
u'Field is required ("content")')
post.comments[1].content = 'here we go'
post.validate()
class ValidatorErrorTest(unittest.TestCase):
def test_schema(self):
"""Ensure a ValidationError handles error schema correctly.
"""
error = ValidationError('root')
self.assertEquals(error.schema, {})
# 1st level error schema
error.errors = {'1st': ValidationError('bad 1st'), }
self.assertTrue('1st' in error.schema)
self.assertEquals(error.schema['1st'], 'bad 1st')
# 2nd level error schema
error.errors = {'1st': ValidationError('bad 1st', errors={
'2nd': ValidationError('bad 2nd'),
})}
self.assertTrue('1st' in error.schema)
self.assertTrue(isinstance(error.schema['1st'], dict))
self.assertTrue('2nd' in error.schema['1st'])
self.assertEquals(error.schema['1st']['2nd'], 'bad 2nd')
# moar levels
error.errors = {'1st': ValidationError('bad 1st', errors={
'2nd': ValidationError('bad 2nd', errors={
'3rd': ValidationError('bad 3rd', errors={
'4th': ValidationError('Inception'),
}),
}),
})}
self.assertTrue('1st' in error.schema)
self.assertTrue('2nd' in error.schema['1st'])
self.assertTrue('3rd' in error.schema['1st']['2nd'])
self.assertTrue('4th' in error.schema['1st']['2nd']['3rd'])
self.assertEquals(error.schema['1st']['2nd']['3rd']['4th'],
'Inception')
if __name__ == '__main__':
unittest.main()