Initial commit

This commit is contained in:
Harry Marr
2009-11-15 15:53:42 +00:00
commit af38a92ec9
6 changed files with 288 additions and 0 deletions

54
tests/document.py Normal file
View File

@@ -0,0 +1,54 @@
import unittest
from mongomap.document import Document
from mongomap.fields import StringField, IntField
class DocumentTest(unittest.TestCase):
def test_definition(self):
"""Ensure that document may be defined using fields.
"""
name_field = StringField()
age_field = IntField()
class Person(Document):
name = name_field
age = age_field
non_field = True
self.assertEqual(Person._fields['name'], name_field)
self.assertEqual(Person._fields['age'], age_field)
self.assertFalse('non_field' in Person._fields)
# Test iteration over fields
fields = list(Person())
self.assertTrue('name' in fields and 'age' in fields)
def test_inheritance(self):
"""Ensure that document may inherit fields from a superclass document.
"""
class Person(Document):
name = StringField()
class Employee(Person):
salary = IntField()
self.assertTrue('name' in Employee._fields)
self.assertTrue('salary' in Employee._fields)
self.assertEqual(Employee._meta['collection'],
Person._meta['collection'])
def test_creation(self):
"""Ensure that document may be created using keyword arguments.
"""
class Person(Document):
name = StringField()
age = IntField()
person = Person(name="Test User", age=30)
self.assertEqual(person.name, "Test User")
self.assertEqual(person.age, 30)
if __name__ == '__main__':
unittest.main()

55
tests/fields.py Normal file
View File

@@ -0,0 +1,55 @@
import unittest
from mongomap.document import Document
from mongomap.fields import *
class FieldTest(unittest.TestCase):
def test_default_values(self):
"""Ensure that default field values are used when creating a document.
"""
class Person(Document):
name = StringField()
age = IntField(default=30)
userid = StringField(default=lambda: 'test')
person = Person(name='Test Person')
self.assertEqual(person._data['age'], 30)
self.assertEqual(person._data['userid'], 'test')
def test_string_validation(self):
"""Ensure that invalid values cannot be assigned to string fields.
"""
class Person(Document):
name = StringField(max_length=20)
userid = StringField(r'[0-9a-z_]+$')
person = Person()
# Test regex validation on userid
self.assertRaises(ValidationError, person.__setattr__, 'userid',
'test.User')
person.userid = 'test_user'
self.assertEqual(person.userid, 'test_user')
# Test max length validation on name
self.assertRaises(ValidationError, person.__setattr__, 'name',
'Name that is more than twenty characters')
person.name = 'Shorter name'
self.assertEqual(person.name, 'Shorter name')
def test_int_validation(self):
"""Ensure that invalid values cannot be assigned to int fields.
"""
class Person(Document):
age = IntField(min_value=0, max_value=110)
person = Person()
person.age = 50
self.assertRaises(ValidationError, person.__setattr__, 'age', -1)
self.assertRaises(ValidationError, person.__setattr__, 'age', 120)
self.assertRaises(ValidationError, person.__setattr__, 'age', 'ten')
if __name__ == '__main__':
unittest.main()