def get_fake(self, document, faker, depth): return create_fake( self.embedded_document_class, __parent__=document, __name__=self.name, __faker__=faker, __depth__=depth)
def test_faker(self): doc = create_fake(self.Doc) assert doc.int == 13 assert doc.str == 'string' with pytest.raises(AttributeError): doc.int = 666
def test_simple(db): doc = create_fake(SimpleDoc) assert doc.__db__ is None assert hasattr(doc, 'oid') assert hasattr(doc, 'b') assert hasattr(doc, 's') assert hasattr(doc, 'i') assert hasattr(doc, 'e') assert hasattr(doc, 'email') assert not hasattr(doc, 'not_set') assert isinstance(doc.oid, ObjectId) assert isinstance(doc.b, bool) assert isinstance(doc.s, str) assert isinstance(doc.i, int) assert isinstance(doc.e, str) assert isinstance(doc.email, str) assert len(doc.s) > 0 assert '@' in doc.e assert '@' in doc.email assert db(SimpleDoc).count_documents() == 0
def test_to__skip_not_loaded(db): doc = create_fake(Doc) db.insert_one(doc) doc = db(Doc).find_one(doc.id, {'s': False}) raw = to_mongo(doc, skip_not_loaded=True) assert raw == { '_id': doc.id, 'i': doc.i, 'e': { 'ii': doc.e.ii, 'ss': doc.e.ss, } } doc = db(Doc).find_one(doc.id, {'e.ss': False}) raw = to_mongo(doc, skip_not_loaded=True) assert raw == { '_id': doc.id, 'i': doc.i, 's': doc.s, # 'e': { # TODO: must create part of embedded document # 'ii': doc.e.ii, # } }
def get_fake(self, document, faker, depth): """ Try create referenced document. """ return create_fake(self.reference_document_class, __db__=document.__db__, __faker__=faker, __depth__=depth)
def test_faker_save(self, db): doc = create_fake(self.Doc, db) assert doc.int == 13 assert doc.str == 'string' raw = db.db[self.Doc.__collection__].find_one() assert raw['int'] == 13 assert raw['str'] == 'string'
def test_reference_circle(db): doc = create_fake(WithReferenceCircleDoc, __db__=db, __depth__=2) assert db(WithReferenceCircleDoc).count() == 3 assert hasattr(doc, 'self') assert hasattr(doc.self, 'self') assert not hasattr(doc.self.self, 'self')
def test_reference_circle(db): doc = create_fake(WithReferenceCircleDoc, __db__=db, __depth__=2) assert db(WithReferenceCircleDoc).count_documents() == 3 assert hasattr(doc, 'self') assert hasattr(doc.self, 'self') assert not hasattr(doc.self.self, 'self')
def test_reference(db): doc = create_fake(WithReferenceDoc) assert hasattr(doc, 'ref') assert hasattr(doc.ref, 's') assert isinstance(doc.ref.s, str) assert db(WithReferenceDoc).count_documents() == 0 assert db(SimpleDoc).count_documents() == 0
def test_reference_save(db): doc = create_fake(WithReferenceDoc, __db__=db) assert hasattr(doc, 'ref') assert hasattr(doc.ref, 's') assert isinstance(doc.ref.s, str) assert db(WithReferenceDoc).count_documents() == 1 assert db(SimpleDoc).count_documents() == 1
def test_reference_save(db): doc = create_fake(WithReferenceDoc, __db__=db) assert hasattr(doc, 'ref') assert hasattr(doc.ref, 's') assert isinstance(doc.ref.s, str) assert db(WithReferenceDoc).count() == 1 assert db(SimpleDoc).count() == 1
def test_fake(): doc = create_fake(Doc) assert isinstance(doc.e, (EDocOne, EDocTwo)) if isinstance(doc.e, EDocOne): assert isinstance(doc.e.i, int) elif isinstance(doc.e, EDocTwo): assert isinstance(doc.e.s, str) else: raise AssertionError(doc.e, type(doc.e))
def test_to__include(): doc = create_fake(Doc) doc.extra_doc_value = 'not serialized' raw = to_mongo(doc, include=['i', 'e.ss']) assert raw == { 'i': doc.i, 'e': { 'ss': doc.e.ss, } }
def test_to__not_loaded_error(db): doc = create_fake(Doc) db.insert_one(doc) doc = db(Doc).find_one(doc.id, {'s': False}) with pytest.raises(NotLoadedError): to_mongo(doc) doc = db(Doc).find_one(doc.id, {'e.ss': False}) with pytest.raises(NotLoadedError): to_mongo(doc)
def get_fake(self, document, faker, depth): """ Try create referenced document. """ res = create_fake(self.reference_document_class, __db__=document.__db__, __faker__=faker, __depth__=depth) if res is AttributeNotSet and self.smart_null: return None else: return res
def get_fake(self, document, faker, depth): type_name = random.choice(list(self.types)) ed_class = self.get_embedded_document_class( document=document, value={self.type_field: type_name}, ) return create_fake(ed_class, __parent__=document, __name__=self.name, __faker__=faker, __depth__=depth, **{self.type_field: type_name})
def test_to__exclude(): doc = create_fake(Doc) doc.extra_doc_value = 'not serialized' raw = to_mongo(doc, exclude=['i']) assert raw == { '_id': doc.id, 's': doc.s, 'e': { 'ii': doc.e.ii, 'ss': doc.e.ss, } }
def test_faker(): class Doc(Document): __collection__ = 'docs' int = fields.StaticField(13) str = fields.StaticField('string') doc = create_fake(Doc) assert doc.int == 13 assert doc.str == 'string' with pytest.raises(AttributeError): doc.int = 666
async def test(): doc = create_fake(Doc) b = doc.b await db.insert_one(doc) await db.db['testdocs'].update_one({'_id': doc.id}, {'$set': { 'b': not doc.b }}) assert doc.b == b new_doc = await db.reload(doc, projection={'b': True}) assert new_doc is doc assert doc.b != b assert 'i' in doc.__not_loaded__
async def test(): doc = create_fake(Doc) b = doc.b await db.insert_one(doc) await db.db['testdocs'].update_one({'_id': doc.id}, {'$set': { 'b': not doc.b }}) assert doc.b == b new_doc = await db.reload(doc, new_instance=True) assert new_doc is not doc assert doc.b == b assert new_doc.b != b
def test_complex_fake_dict(): class Doc(Document): i = IntegerField() s = StringField() def __fake__(self, values, faker, depth): assert values['i'] == 13 assert 's' not in values new_values = values.copy() new_values['i'] += 1 new_values['s'] = 'string' return new_values doc = create_fake(Doc, i=13) assert doc.i == 14 assert doc.s == 'string'
def test_complex_fake_generator(): class Doc(Document): i = IntegerField() s = StringField() def __fake__(self, values, faker, depth): assert values['i'] == 13 assert 's' not in values new_values = values.copy() new_values['i'] += 1 yield new_values self.s = 'string' yield doc = create_fake(Doc, i=13) assert doc.i == 14 assert doc.s == 'string'
def test_simple_save(db): doc = create_fake(SimpleDoc, __db__=db) assert doc.__db__ is db assert hasattr(doc, 'oid') assert hasattr(doc, 'b') assert hasattr(doc, 's') assert hasattr(doc, 'i') assert isinstance(doc.oid, ObjectId) assert isinstance(doc.b, bool) assert isinstance(doc.s, str) assert isinstance(doc.i, int) assert len(doc.s) > 0 assert db(SimpleDoc).count() == 1 assert db(SimpleDoc).find_one(doc.id)
def test_simple_save(db): doc = create_fake(SimpleDoc, __db__=db) assert doc.__db__ is db assert hasattr(doc, 'oid') assert hasattr(doc, 'b') assert hasattr(doc, 's') assert hasattr(doc, 'i') assert not hasattr(doc, 'not_set') assert isinstance(doc.oid, ObjectId) assert isinstance(doc.b, bool) assert isinstance(doc.s, str) assert isinstance(doc.i, int) assert len(doc.s) > 0 assert db(SimpleDoc).count_documents() == 1 assert db(SimpleDoc).find_one(doc.id)
def test_reference(db): doc = create_fake(Doc, db) assert isinstance(doc, Doc) assert isinstance(doc.ref, DocRef) assert doc.ref.id
def test_faker(self): doc = create_fake(self.Doc) assert isinstance(doc.td, timedelta) assert isinstance(doc.tdd, timedelta)
def test_embedded(db): doc = create_fake(WithEmbeddedDoc) assert hasattr(doc, 'emb') assert isinstance(doc.emb, EmbeddedDoc) assert isinstance(doc.emb.name, str)
def test_embedded_depth_limit(db): doc = create_fake(WithEmbeddedDoc, __depth__=0) assert hasattr(doc, 'emb') assert not hasattr(doc.emb, 'name')
def test_fake(): doc = create_fake(Doc) assert isinstance(doc.e, EDoc) assert isinstance(doc.e.i, int) assert isinstance(doc.e.s, str) assert isinstance(doc.e.e, EDoc)