diff options
Diffstat (limited to 'test/orm/dynamic.py')
-rw-r--r-- | test/orm/dynamic.py | 142 |
1 files changed, 86 insertions, 56 deletions
diff --git a/test/orm/dynamic.py b/test/orm/dynamic.py index 2cd616c12..958f5b159 100644 --- a/test/orm/dynamic.py +++ b/test/orm/dynamic.py @@ -16,7 +16,7 @@ class DynamicTest(QueryTest): def test_basic(self): mapper(User, users, properties={ - 'addresses':relation(mapper(Address, addresses), lazy='dynamic') + 'addresses':dynamic_loader(mapper(Address, addresses)) }) sess = create_session() q = sess.query(User) @@ -29,8 +29,11 @@ class DynamicTest(QueryTest): class FlushTest(FixtureTest): def test_basic(self): + class Fixture(Base): + pass + mapper(User, users, properties={ - 'addresses':relation(mapper(Address, addresses), lazy='dynamic') + 'addresses':dynamic_loader(mapper(Address, addresses)) }) sess = create_session() u1 = User(name='jack') @@ -42,88 +45,115 @@ class FlushTest(FixtureTest): sess.flush() sess.clear() + + # test the test fixture a little bit + assert User(name='jack', addresses=[Address(email_address='wrong')]) != sess.query(User).first() + assert User(name='jack', addresses=[Address(email_address='lala@hoho.com')]) == sess.query(User).first() - def go(): - assert [ - User(name='jack', addresses=[Address(email_address='lala@hoho.com')]), - User(name='ed', addresses=[Address(email_address='foo@bar.com')]) - ] == sess.query(User).all() - - # one query for the query(User).all(), one query for each address - # iter(), also one query for a count() on each address (the count() - # is an artifact of the fixtures.Base class, its not intrinsic to the - # property) - self.assert_sql_count(testbase.db, go, 5) - - def test_backref_unsaved_u(self): + assert [ + User(name='jack', addresses=[Address(email_address='lala@hoho.com')]), + User(name='ed', addresses=[Address(email_address='foo@bar.com')]) + ] == sess.query(User).all() + + def test_delete(self): mapper(User, users, properties={ - 'addresses':relation(mapper(Address, addresses), lazy='dynamic', - backref='user') + 'addresses':dynamic_loader(mapper(Address, addresses), backref='user') }) - sess = create_session() - - u = User(name='buffy') - - a = Address(email_address='foo@bar.com') - a.user = u - + sess = create_session(autoflush=True) + u = User(name='ed') + u.addresses.append(Address(email_address='a')) + u.addresses.append(Address(email_address='b')) + u.addresses.append(Address(email_address='c')) + u.addresses.append(Address(email_address='d')) + u.addresses.append(Address(email_address='e')) + u.addresses.append(Address(email_address='f')) sess.save(u) - sess.flush() + + assert Address(email_address='c') == u.addresses[2] + sess.delete(u.addresses[2]) + sess.delete(u.addresses[4]) + sess.delete(u.addresses[3]) + assert [Address(email_address='a'), Address(email_address='b'), Address(email_address='d')] == list(u.addresses) + + sess.close() - def test_backref_unsaved_a(self): + def test_remove_orphans(self): mapper(User, users, properties={ - 'addresses':relation(mapper(Address, addresses), lazy='dynamic', - backref='user') + 'addresses':dynamic_loader(mapper(Address, addresses), cascade="all, delete-orphan", backref='user') }) - sess = create_session() - - u = User(name='buffy') - - a = Address(email_address='foo@bar.com') - a.user = u + sess = create_session(autoflush=True) + u = User(name='ed') + u.addresses.append(Address(email_address='a')) + u.addresses.append(Address(email_address='b')) + u.addresses.append(Address(email_address='c')) + u.addresses.append(Address(email_address='d')) + u.addresses.append(Address(email_address='e')) + u.addresses.append(Address(email_address='f')) + sess.save(u) - self.assert_(list(u.addresses) == [a]) - self.assert_(u.addresses[0] == a) + assert [Address(email_address='a'), Address(email_address='b'), Address(email_address='c'), + Address(email_address='d'), Address(email_address='e'), Address(email_address='f')] == sess.query(Address).all() - sess.save(a) - sess.flush() + assert Address(email_address='c') == u.addresses[2] - self.assert_(list(u.addresses) == [a]) - - a.user = None - self.assert_(list(u.addresses) == [a]) + try: + del u.addresses[3] + assert False + except TypeError, e: + assert str(e) == "object doesn't support item deletion" + + for a in u.addresses.filter(Address.email_address.in_('c', 'e', 'f')): + u.addresses.remove(a) + + assert [Address(email_address='a'), Address(email_address='b'), Address(email_address='d')] == list(u.addresses) - sess.flush() - self.assert_(list(u.addresses) == []) + assert [Address(email_address='a'), Address(email_address='b'), Address(email_address='d')] == sess.query(Address).all() + sess.close() - def test_backref_unsaved_u(self): +def create_backref_test(autoflush, saveuser): + def test_backref(self): mapper(User, users, properties={ - 'addresses':relation(mapper(Address, addresses), lazy='dynamic', - backref='user') + 'addresses':dynamic_loader(mapper(Address, addresses), backref='user') }) - sess = create_session() + sess = create_session(autoflush=autoflush) u = User(name='buffy') a = Address(email_address='foo@bar.com') a.user = u - self.assert_(list(u.addresses) == [a]) - self.assert_(u.addresses[0] == a) + if saveuser: + sess.save(u) + else: + sess.save(a) - sess.save(u) - sess.flush() + if not autoflush: + sess.flush() + + assert u in sess + assert a in sess - assert list(u.addresses) == [a] + self.assert_(list(u.addresses) == [a]) a.user = None - self.assert_(list(u.addresses) == [a]) + if not autoflush: + self.assert_(list(u.addresses) == [a]) - sess.flush() + if not autoflush: + sess.flush() self.assert_(list(u.addresses) == []) - + test_backref.__name__ = "test_%s%s" % ( + (autoflush and "autoflush" or ""), + (saveuser and "_saveuser" or "_savead"), + ) + setattr(FlushTest, test_backref.__name__, test_backref) + +for autoflush in (False, True): + for saveuser in (False, True): + create_backref_test(autoflush, saveuser) + if __name__ == '__main__': testbase.main() |