- Added to_json and from_json to Document (MongoEngine/mongoengine#1) - Added to_json and from_json to QuerySet (MongoEngine/mongoengine#131)
82 lines
2.8 KiB
Python
82 lines
2.8 KiB
Python
import sys
|
|
sys.path[0:0] = [""]
|
|
|
|
import unittest
|
|
import uuid
|
|
|
|
from nose.plugins.skip import SkipTest
|
|
from datetime import datetime
|
|
from bson import ObjectId
|
|
|
|
import pymongo
|
|
|
|
from mongoengine import *
|
|
|
|
__all__ = ("TestJson",)
|
|
|
|
|
|
class TestJson(unittest.TestCase):
|
|
|
|
def setUp(self):
|
|
connect(db='mongoenginetest')
|
|
|
|
def test_json_simple(self):
|
|
|
|
class Embedded(EmbeddedDocument):
|
|
string = StringField()
|
|
|
|
class Doc(Document):
|
|
string = StringField()
|
|
embedded_field = EmbeddedDocumentField(Embedded)
|
|
|
|
doc = Doc(string="Hi", embedded_field=Embedded(string="Hi"))
|
|
|
|
self.assertEqual(doc, Doc.from_json(doc.to_json()))
|
|
|
|
def test_json_complex(self):
|
|
|
|
if pymongo.version_tuple[0] <= 2 and pymongo.version_tuple[1] <= 3:
|
|
raise SkipTest("Need pymongo 2.4 as has a fix for DBRefs")
|
|
|
|
class EmbeddedDoc(EmbeddedDocument):
|
|
pass
|
|
|
|
class Simple(Document):
|
|
pass
|
|
|
|
class Doc(Document):
|
|
string_field = StringField(default='1')
|
|
int_field = IntField(default=1)
|
|
float_field = FloatField(default=1.1)
|
|
boolean_field = BooleanField(default=True)
|
|
datetime_field = DateTimeField(default=datetime.now)
|
|
embedded_document_field = EmbeddedDocumentField(EmbeddedDoc,
|
|
default=lambda: EmbeddedDoc())
|
|
list_field = ListField(default=lambda: [1, 2, 3])
|
|
dict_field = DictField(default=lambda: {"hello": "world"})
|
|
objectid_field = ObjectIdField(default=ObjectId)
|
|
reference_field = ReferenceField(Simple, default=lambda:
|
|
Simple().save())
|
|
map_field = MapField(IntField(), default=lambda: {"simple": 1})
|
|
decimal_field = DecimalField(default=1.0)
|
|
complex_datetime_field = ComplexDateTimeField(default=datetime.now)
|
|
url_field = URLField(default="http://mongoengine.org")
|
|
dynamic_field = DynamicField(default=1)
|
|
generic_reference_field = GenericReferenceField(
|
|
default=lambda: Simple().save())
|
|
sorted_list_field = SortedListField(IntField(),
|
|
default=lambda: [1, 2, 3])
|
|
email_field = EmailField(default="ross@example.com")
|
|
geo_point_field = GeoPointField(default=lambda: [1, 2])
|
|
sequence_field = SequenceField()
|
|
uuid_field = UUIDField(default=uuid.uuid4)
|
|
generic_embedded_document_field = GenericEmbeddedDocumentField(
|
|
default=lambda: EmbeddedDoc())
|
|
|
|
doc = Doc()
|
|
self.assertEqual(doc, Doc.from_json(doc.to_json()))
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|