80 lines
1.7 KiB
Python
80 lines
1.7 KiB
Python
import pickle
|
|
import unittest
|
|
from pymongo.mongo_client import MongoClient
|
|
from mongoengine import Document, StringField, IntField
|
|
from mongoengine.connection import connect
|
|
|
|
__author__ = 'stas'
|
|
|
|
|
|
class Person(Document):
|
|
name = StringField()
|
|
age = IntField()
|
|
|
|
|
|
class TestQuerysetPickable(unittest.TestCase):
|
|
"""
|
|
Test for adding pickling support for QuerySet instances
|
|
See issue https://github.com/MongoEngine/mongoengine/issues/442
|
|
"""
|
|
def setUp(self):
|
|
super(TestQuerysetPickable, self).setUp()
|
|
|
|
connection = connect(db="test") # type: pymongo.mongo_client.MongoClient
|
|
|
|
connection.drop_database("test")
|
|
|
|
self.john = Person.objects.create(
|
|
name="John",
|
|
age=21
|
|
)
|
|
|
|
def test_picke_simple_qs(self):
|
|
|
|
qs = Person.objects.all()
|
|
|
|
pickle.dumps(qs)
|
|
|
|
def _get_loaded(self, qs):
|
|
s = pickle.dumps(qs)
|
|
|
|
return pickle.loads(s)
|
|
|
|
def test_unpickle(self):
|
|
qs = Person.objects.all()
|
|
|
|
loadedQs = self._get_loaded(qs)
|
|
|
|
self.assertEqual(qs.count(), loadedQs.count())
|
|
|
|
# can update loadedQs
|
|
loadedQs.update(age=23)
|
|
|
|
# check
|
|
self.assertEqual(Person.objects.first().age, 23)
|
|
|
|
def test_pickle_support_filtration(self):
|
|
Person.objects.create(
|
|
name="Alice",
|
|
age=22
|
|
)
|
|
|
|
Person.objects.create(
|
|
name="Bob",
|
|
age=23
|
|
)
|
|
|
|
qs = Person.objects.filter(age__gte=22)
|
|
self.assertEqual(qs.count(), 2)
|
|
|
|
loaded = self._get_loaded(qs)
|
|
|
|
self.assertEqual(loaded.count(), 2)
|
|
self.assertEqual(loaded.filter(name="Bob").first().age, 23)
|
|
|
|
|
|
|
|
|
|
|
|
|