Improve tests for querying list(embedded) when using inheritance

This commit is contained in:
Bastien Gérard 2019-05-03 21:59:48 +02:00
parent d98f36ceff
commit f7b7d0f79e
2 changed files with 23 additions and 11 deletions

View File

@ -4,7 +4,7 @@ Changelog
Development Development
=========== ===========
- Fix querying on List(EmbeddedDocument) subclasses fields #1961 - Fix querying on List(EmbeddedDocument) subclasses fields #1961 #1492
- Fix querying on (Generic)EmbeddedDocument subclasses fields #475 - Fix querying on (Generic)EmbeddedDocument subclasses fields #475
- expose `mongoengine.connection.disconnect` and `mongoengine.connection.disconnect_all` - expose `mongoengine.connection.disconnect` and `mongoengine.connection.disconnect_all`
- Fix disconnect function #566 #1599 #605 #607 #1213 #565 - Fix disconnect function #566 #1599 #605 #607 #1213 #565

View File

@ -1,6 +1,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from mongoengine import Document, StringField, ValidationError, EmbeddedDocument, EmbeddedDocumentField, \ from mongoengine import Document, StringField, ValidationError, EmbeddedDocument, EmbeddedDocumentField, \
InvalidQueryError, LookUpError, IntField, GenericEmbeddedDocumentField, ListField, EmbeddedDocumentListField InvalidQueryError, LookUpError, IntField, GenericEmbeddedDocumentField, ListField, EmbeddedDocumentListField, \
ReferenceField
from tests.utils import MongoDBTestCase from tests.utils import MongoDBTestCase
@ -109,20 +110,31 @@ class TestEmbeddedDocumentField(MongoDBTestCase):
self.assertIsNone(only_p.settings.sub_foo) self.assertIsNone(only_p.settings.sub_foo)
def test_query_list_embedded_document_with_inheritance(self): def test_query_list_embedded_document_with_inheritance(self):
class BaseEmbeddedDoc(EmbeddedDocument): class Post(EmbeddedDocument):
s = StringField() title = StringField(max_length=120, required=True)
meta = {'allow_inheritance': True} meta = {'allow_inheritance': True}
class EmbeddedDoc(BaseEmbeddedDoc): class TextPost(Post):
s2 = StringField() content = StringField()
class MyDoc(Document): class MoviePost(Post):
embeds = EmbeddedDocumentListField(BaseEmbeddedDoc) author = StringField()
doc = MyDoc(embeds=[EmbeddedDoc(s='foo', s2='bar')]).save() class Record(Document):
posts = ListField(EmbeddedDocumentField(Post))
self.assertEqual(MyDoc.objects(embeds__s='foo').first(), doc) record_movie = Record(posts=[MoviePost(author='John', title='foo')]).save()
self.assertEqual(MyDoc.objects(embeds__s2='bar').first(), doc) record_text = Record(posts=[TextPost(content='a', title='foo')]).save()
records = list(Record.objects(posts__author=record_movie.posts[0].author))
self.assertEqual(len(records), 1)
self.assertEqual(records[0].id, record_movie.id)
records = list(Record.objects(posts__content=record_text.posts[0].content))
self.assertEqual(len(records), 1)
self.assertEqual(records[0].id, record_text.id)
self.assertEqual(Record.objects(posts__title='foo').count(), 2)
class TestGenericEmbeddedDocumentField(MongoDBTestCase): class TestGenericEmbeddedDocumentField(MongoDBTestCase):