109 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			109 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 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_names(self):
 | |
|         """
 | |
|         Going to test reported issue:
 | |
|             https://github.com/MongoEngine/mongoengine/issues/654
 | |
|         where the reporter asks for the availability to perform
 | |
|         a to_json with the original class names and not the abreviated
 | |
|         mongodb document keys
 | |
|         """
 | |
|         class Embedded(EmbeddedDocument):
 | |
|             string = StringField(db_field='s')
 | |
| 
 | |
|         class Doc(Document):
 | |
|             string = StringField(db_field='s')
 | |
|             embedded = EmbeddedDocumentField(Embedded, db_field='e')
 | |
| 
 | |
|         doc = Doc(string="Hello", embedded=Embedded(string="Inner Hello"))
 | |
|         doc_json = doc.to_json(sort_keys=True, use_db_field=False, separators=(',', ':'))
 | |
| 
 | |
|         expected_json = """{"embedded":{"string":"Inner Hello"},"string":"Hello"}"""
 | |
| 
 | |
|         self.assertEqual(doc_json, expected_json)
 | |
| 
 | |
|     def test_json_simple(self):
 | |
| 
 | |
|         class Embedded(EmbeddedDocument):
 | |
|             string = StringField()
 | |
| 
 | |
|         class Doc(Document):
 | |
|             string = StringField()
 | |
|             embedded_field = EmbeddedDocumentField(Embedded)
 | |
| 
 | |
|             def __eq__(self, other):
 | |
|                 return (self.string == other.string and
 | |
|                         self.embedded_field == other.embedded_field)
 | |
| 
 | |
|         doc = Doc(string="Hi", embedded_field=Embedded(string="Hi"))
 | |
| 
 | |
|         doc_json = doc.to_json(sort_keys=True, separators=(',', ':'))
 | |
|         expected_json = """{"embedded_field":{"string":"Hi"},"string":"Hi"}"""
 | |
|         self.assertEqual(doc_json, expected_json)
 | |
| 
 | |
|         self.assertEqual(doc, Doc.from_json(doc.to_json()))
 | |
| 
 | |
|     def test_json_complex(self):
 | |
|         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())
 | |
| 
 | |
|             def __eq__(self, other):
 | |
|                 import json
 | |
|                 return json.loads(self.to_json()) == json.loads(other.to_json())
 | |
| 
 | |
|         doc = Doc()
 | |
|         self.assertEqual(doc, Doc.from_json(doc.to_json()))
 | |
| 
 | |
| 
 | |
| if __name__ == '__main__':
 | |
|     unittest.main()
 |