Raise DoesNotExist when dereferencing unknown document
This commit is contained in:
@@ -31,7 +31,7 @@ from mongoengine import *
|
||||
from mongoengine.connection import get_db
|
||||
from mongoengine.base import _document_registry
|
||||
from mongoengine.base.datastructures import BaseDict, EmbeddedDocumentList
|
||||
from mongoengine.errors import NotRegistered
|
||||
from mongoengine.errors import NotRegistered, DoesNotExist
|
||||
from mongoengine.python_support import PY3, b, bin_type
|
||||
|
||||
__all__ = ("FieldTest", "EmbeddedDocumentListFieldTestCase")
|
||||
@@ -1726,6 +1726,37 @@ class FieldTest(unittest.TestCase):
|
||||
|
||||
self.assertEqual(content, User.objects.first().groups[0].content)
|
||||
|
||||
def test_reference_miss(self):
|
||||
"""Ensure an exception is raised when dereferencing unknow document
|
||||
"""
|
||||
|
||||
class Foo(Document):
|
||||
pass
|
||||
|
||||
class Bar(Document):
|
||||
ref = ReferenceField(Foo)
|
||||
generic_ref = GenericReferenceField()
|
||||
|
||||
Foo.drop_collection()
|
||||
Bar.drop_collection()
|
||||
|
||||
foo = Foo().save()
|
||||
bar = Bar(ref=foo, generic_ref=foo).save()
|
||||
|
||||
# Reference is no longer valid
|
||||
foo.delete()
|
||||
bar = Bar.objects.get()
|
||||
self.assertRaises(DoesNotExist, lambda: getattr(bar, 'ref'))
|
||||
self.assertRaises(DoesNotExist, lambda: getattr(bar, 'generic_ref'))
|
||||
|
||||
# When auto_dereference is disabled, there is no trouble returning DBRef
|
||||
bar = Bar.objects.get()
|
||||
expected = foo.to_dbref()
|
||||
bar._fields['ref']._auto_dereference = False
|
||||
self.assertEqual(bar.ref, expected)
|
||||
bar._fields['generic_ref']._auto_dereference = False
|
||||
self.assertEqual(bar.generic_ref, {'_ref': expected, '_cls': 'Foo'})
|
||||
|
||||
def test_reference_validation(self):
|
||||
"""Ensure that invalid docment objects cannot be assigned to reference
|
||||
fields.
|
||||
|
||||
Reference in New Issue
Block a user