def test_cascade_delete_noorphans(self): sess = create_session() u = User(name='jack', orders=[Order(description='someorder'), Order(description='someotherorder')]) sess.save(u) sess.flush() assert users.count().scalar() == 1 assert orders.count().scalar() == 2 del u.orders[0] sess.delete(u) sess.flush() assert users.count().scalar() == 0 assert orders.count().scalar() == 1
def test_collection_orphans(self): sess = create_session() u = User(name='jack', orders=[Order(description='someorder'), Order(description='someotherorder')]) sess.save(u) sess.flush() assert users.count().scalar() == 1 assert orders.count().scalar() == 2 u.orders[:] = [] sess.flush() assert users.count().scalar() == 1 assert orders.count().scalar() == 0
def test_delete_unloaded_collections(self): """test that unloaded collections are still included in a delete-cascade by default.""" sess = create_session() u = User(name='jack', addresses=[Address(email_address="address1"), Address(email_address="address2")]) sess.save(u) sess.flush() sess.clear() assert addresses.count().scalar() == 2 assert users.count().scalar() == 1 u = sess.query(User).get(u.id) assert 'addresses' not in u.__dict__ sess.delete(u) sess.flush() assert addresses.count().scalar() == 0 assert users.count().scalar() == 0
def test_cascades_onlycollection(self): """test that cascade only reaches instances that are still part of the collection, not those that have been removed""" sess = create_session() u = User(name='jack', orders=[Order(description='someorder'), Order(description='someotherorder')]) sess.save(u) sess.flush() o = u.orders[0] del u.orders[0] sess.delete(u) assert u in sess.deleted assert o not in sess.deleted assert o in sess u2 = User(name='newuser', orders=[o]) sess.save(u2) sess.flush() sess.clear() assert users.count().scalar() == 1 assert orders.count().scalar() == 1 self.assertEquals(sess.query(User).all(), [User(name='newuser', orders=[Order(description='someorder')])])