class TestBasicMapperExtension(TestCase): def setUp(self): self.datastore = DS.DataStore( 'mim:///', database='test_db') self.session = ORMSession(bind=self.datastore) class BasicMapperExtension(MapperExtension): def after_insert(self, instance, state): assert 'clean'==state.status def before_insert(self, instance, state): assert 'new'==state.status def before_update(self, instance, state): assert 'dirty'==state.status def after_update(self, instance, state): assert 'clean'==state.status class Basic(MappedClass): class __mongometa__: name='basic' session = self.session extensions = [BasicMapperExtension] _id = FieldProperty(S.ObjectId) a = FieldProperty(int) b = FieldProperty([int]) c = FieldProperty(dict( d=int, e=int)) Mapper.compile_all() self.Basic = Basic self.session.remove(self.Basic) def tearDown(self): self.session.clear() self.datastore.conn.drop_all() def test_mapper_extension(self): doc = self.Basic() doc.a = 5 self.session.flush() doc.a = 6 self.session.flush()
class TestBasicMapping(TestCase): def setUp(self): self.datastore = DS.DataStore( 'mim:///', database='test_db') self.session = ORMSession(bind=self.datastore) class Basic(MappedClass): class __mongometa__: name='basic' session = self.session _id = FieldProperty(S.ObjectId) a = FieldProperty(int) b = FieldProperty([int]) c = FieldProperty(dict( d=int, e=int)) d = FieldPropertyWithMissingNone(str, if_missing=S.Missing) e = FieldProperty(str, if_missing=S.Missing) Mapper.compile_all() self.Basic = Basic self.session.remove(self.Basic) def tearDown(self): self.session.clear() self.datastore.conn.drop_all() def test_repr(self): doc = self.Basic(a=1, b=[2,3], c=dict(d=4, e=5)) repr(self.session) def test_create(self): doc = self.Basic() assert state(doc).status == 'new' self.session.flush() assert state(doc).status == 'clean' doc.a = 5 assert state(doc).status == 'dirty' self.session.flush() assert state(doc).status == 'clean' c = doc.c c.e = 5 assert state(doc).status == 'dirty' assert repr(state(doc)).startswith('<ObjectState') def test_mapped_object(self): doc = self.Basic(a=1, b=[2,3], c=dict(d=4, e=5)) self.assertEqual(doc.a, doc['a']) self.assertEqual(doc.d, None) self.assertRaises(AttributeError, getattr, doc, 'e') self.assertRaises(AttributeError, getattr, doc, 'foo') self.assertRaises(KeyError, doc.__getitem__, 'foo') doc['d'] = 'test' self.assertEqual(doc.d, doc['d']) doc['e'] = 'test' self.assertEqual(doc.e, doc['e']) del doc.d self.assertEqual(doc.d, None) del doc.e self.assertRaises(AttributeError, getattr, doc, 'e') doc['a'] = 5 self.assertEqual(doc.a, doc['a']) self.assertEqual(doc.a, 5) self.assert_('a' in doc) doc.delete() def test_mapper(self): m = mapper(self.Basic) self.assertEqual(repr(m), '<Mapper Basic:basic>') doc = self.Basic(a=1, b=[2,3], c=dict(d=4, e=5)) self.session.flush() q = self.Basic.query.find() self.assertEqual(q.count(), 1) m.remove({}) q = self.Basic.query.find() self.assertEqual(q.count(), 0) def test_query(self): doc = self.Basic(a=1, b=[2,3], c=dict(d=4, e=5)) self.session.flush() q = self.Basic.query.find(dict(a=1)) self.assertEqual(q.count(), 1) doc.a = 5 self.session.flush() q = self.Basic.query.find(dict(a=1)) self.assertEqual(q.count(), 0) self.assertEqual(doc.query.find(dict(a=1)).count(), 0) doc = self.Basic.query.get(a=5) self.assert_(doc is not None) self.Basic.query.remove({}) self.assertEqual(self.Basic.query.find().count(), 0) def test_delete(self): doc = self.Basic(a=1, b=[2,3], c=dict(d=4, e=5)) self.session.flush() q = self.Basic.query.find() self.assertEqual(q.count(), 1) doc.delete() q = self.Basic.query.find() self.assertEqual(q.count(), 1) self.session.flush() q = self.Basic.query.find() self.assertEqual(q.count(), 0) doc = self.Basic(a=1, b=[2,3], c=dict(d=4, e=5)) self.session.flush() q = self.Basic.query.find() self.assertEqual(q.count(), 1) def test_imap(self): doc = self.Basic(a=1, b=[2,3], c=dict(d=4, e=5)) self.session.flush() doc1 = self.Basic.query.get(_id=doc._id) self.assert_(doc is doc1) self.session.expunge(doc) doc1 = self.Basic.query.get(_id=doc._id) self.assert_(doc is not doc1) self.session.expunge(doc) self.session.expunge(doc) self.session.expunge(doc)