11import unittest
22
33import pytest
4+ from bson import DBRef
45
56from mongoengine import *
67from mongoengine .connection import get_db
1920
2021class TestContextManagers (MongoDBTestCase ):
2122 def test_set_write_concern (self ):
22- connect ("mongoenginetest" )
23-
2423 class User (Document ):
2524 name = StringField ()
2625
@@ -39,8 +38,6 @@ class User(Document):
3938 assert original_write_concern .document == collection .write_concern .document
4039
4140 def test_set_read_write_concern (self ):
42- connect ("mongoenginetest" )
43-
4441 class User (Document ):
4542 name = StringField ()
4643
@@ -65,7 +62,6 @@ class User(Document):
6562 assert original_write_concern .document == collection .write_concern .document
6663
6764 def test_switch_db_context_manager (self ):
68- connect ("mongoenginetest" )
6965 register_connection ("testdb-1" , "mongoenginetest2" )
7066
7167 class Group (Document ):
@@ -89,7 +85,6 @@ class Group(Document):
8985 assert 1 == Group .objects .count ()
9086
9187 def test_switch_collection_context_manager (self ):
92- connect ("mongoenginetest" )
9388 register_connection (alias = "testdb-1" , db = "mongoenginetest2" )
9489
9590 class Group (Document ):
@@ -117,7 +112,6 @@ class Group(Document):
117112
118113 def test_no_dereference_context_manager_object_id (self ):
119114 """Ensure that DBRef items in ListFields aren't dereferenced."""
120- connect ("mongoenginetest" )
121115
122116 class User (Document ):
123117 name = StringField ()
@@ -136,25 +130,57 @@ class Group(Document):
136130 user = User .objects .first ()
137131 Group (ref = user , members = User .objects , generic = user ).save ()
138132
139- with no_dereference (Group ) as NoDeRefGroup :
140- assert Group ._fields ["members" ]._auto_dereference
141- assert not NoDeRefGroup ._fields ["members" ]._auto_dereference
133+ with no_dereference (Group ):
134+ assert not Group ._fields ["members" ]._auto_dereference
142135
143- with no_dereference (Group ) as Group :
136+ with no_dereference (Group ):
144137 group = Group .objects .first ()
145138 for m in group .members :
146- assert not isinstance (m , User )
147- assert not isinstance (group .ref , User )
148- assert not isinstance (group .generic , User )
139+ assert isinstance (m , DBRef )
140+ assert isinstance (group .ref , DBRef )
141+ assert isinstance (group .generic , dict )
149142
143+ group = Group .objects .first ()
150144 for m in group .members :
151145 assert isinstance (m , User )
152146 assert isinstance (group .ref , User )
153147 assert isinstance (group .generic , User )
154148
155- def test_no_dereference_context_manager_dbref (self ):
149+ def test_no_dereference_context_manager_nested (self ):
156150 """Ensure that DBRef items in ListFields aren't dereferenced."""
157- connect ("mongoenginetest" )
151+
152+ class User (Document ):
153+ name = StringField ()
154+
155+ class Group (Document ):
156+ ref = ReferenceField (User , dbref = False )
157+
158+ User .drop_collection ()
159+ Group .drop_collection ()
160+
161+ for i in range (1 , 51 ):
162+ User (name = "user %s" % i ).save ()
163+
164+ user = User .objects .first ()
165+ Group (ref = user ).save ()
166+
167+ with no_dereference (Group ):
168+ group = Group .objects .first ()
169+ assert isinstance (group .ref , DBRef )
170+
171+ with no_dereference (Group ):
172+ group = Group .objects .first ()
173+ assert isinstance (group .ref , DBRef )
174+
175+ # make sure its still off here
176+ group = Group .objects .first ()
177+ assert isinstance (group .ref , DBRef )
178+
179+ group = Group .objects .first ()
180+ assert isinstance (group .ref , User )
181+
182+ def test_no_dereference_context_manager_dbref (self ):
183+ """Ensure that DBRef items in ListFields aren't dereferenced"""
158184
159185 class User (Document ):
160186 name = StringField ()
@@ -173,16 +199,19 @@ class Group(Document):
173199 user = User .objects .first ()
174200 Group (ref = user , members = User .objects , generic = user ).save ()
175201
176- with no_dereference (Group ) as NoDeRefGroup :
177- assert Group ._fields ["members" ]._auto_dereference
178- assert not NoDeRefGroup ._fields ["members" ]._auto_dereference
202+ with no_dereference (Group ):
203+ assert not Group ._fields ["members" ]._auto_dereference
179204
180- with no_dereference (Group ) as Group :
181- group = Group .objects .first ()
205+ with no_dereference (Group ):
206+ qs = Group .objects
207+ assert qs ._auto_dereference is False
208+ group = qs .first ()
209+ assert not group ._fields ["members" ]._auto_dereference
182210 assert all (not isinstance (m , User ) for m in group .members )
183211 assert not isinstance (group .ref , User )
184212 assert not isinstance (group .generic , User )
185213
214+ group = Group .objects .first ()
186215 assert all (isinstance (m , User ) for m in group .members )
187216 assert isinstance (group .ref , User )
188217 assert isinstance (group .generic , User )
@@ -265,7 +294,6 @@ def test_query_counter_does_not_swallow_exception(self):
265294 raise TypeError ()
266295
267296 def test_query_counter_temporarily_modifies_profiling_level (self ):
268- connect ("mongoenginetest" )
269297 db = get_db ()
270298
271299 def _current_profiling_level ():
@@ -290,7 +318,6 @@ def _set_profiling_level(lvl):
290318 raise
291319
292320 def test_query_counter (self ):
293- connect ("mongoenginetest" )
294321 db = get_db ()
295322
296323 collection = db .query_counter
@@ -380,7 +407,6 @@ class B(Document):
380407 assert q == 3
381408
382409 def test_query_counter_counts_getmore_queries (self ):
383- connect ("mongoenginetest" )
384410 db = get_db ()
385411
386412 collection = db .query_counter
@@ -397,7 +423,6 @@ def test_query_counter_counts_getmore_queries(self):
397423 assert q == 2 # 1st select + 1 getmore
398424
399425 def test_query_counter_ignores_particular_queries (self ):
400- connect ("mongoenginetest" )
401426 db = get_db ()
402427
403428 collection = db .query_counter
0 commit comments