MCPcopy Index your code
hub / github.com/MongoEngine/mongoengine / test_migrate_references

Method test_migrate_references

tests/test_dereference.py:229–272  ·  view source on GitHub ↗

Example of migrating ReferenceField storage

(self)

Source from the content-addressed store, hash-verified

227 assert group.members[-1].name == "String!"
228
229 def test_migrate_references(self):
230 """Example of migrating ReferenceField storage"""
231
232 # Create some sample data
233 class User(Document):
234 name = StringField()
235
236 class Group(Document):
237 author = ReferenceField(User, dbref=True)
238 members = ListField(ReferenceField(User, dbref=True))
239
240 User.drop_collection()
241 Group.drop_collection()
242
243 user = User(name="Ross").save()
244 group = Group(author=user, members=[user]).save()
245
246 raw_data = Group._get_collection().find_one()
247 assert isinstance(raw_data["author"], DBRef)
248 assert isinstance(raw_data["members"][0], DBRef)
249 group = Group.objects.first()
250
251 assert group.author == user
252 assert group.members == [user]
253
254 # Migrate the model definition
255 class Group(Document):
256 author = ReferenceField(User, dbref=False)
257 members = ListField(ReferenceField(User, dbref=False))
258
259 # Migrate the data
260 for g in Group.objects():
261 # Explicitly mark as changed so resets
262 g._mark_as_changed("author")
263 g._mark_as_changed("members")
264 g.save()
265
266 group = Group.objects.first()
267 assert group.author == user
268 assert group.members == [user]
269
270 raw_data = Group._get_collection().find_one()
271 assert isinstance(raw_data["author"], ObjectId)
272 assert isinstance(raw_data["members"][0], ObjectId)
273
274 def test_recursive_reference(self):
275 """Ensure that ReferenceFields can reference their own documents."""

Callers

nothing calls this directly

Calls 8

drop_collectionMethod · 0.80
_get_collectionMethod · 0.80
UserClass · 0.70
GroupClass · 0.70
saveMethod · 0.45
firstMethod · 0.45
objectsMethod · 0.45
_mark_as_changedMethod · 0.45

Tested by

no test coverage detected