(self)
| 942 | assert a2 not in sess2.dirty |
| 943 | |
| 944 | def test_many_to_many_cascade(self): |
| 945 | items, Order, orders, order_items, Item = ( |
| 946 | self.tables.items, |
| 947 | self.classes.Order, |
| 948 | self.tables.orders, |
| 949 | self.tables.order_items, |
| 950 | self.classes.Item, |
| 951 | ) |
| 952 | |
| 953 | self.mapper_registry.map_imperatively( |
| 954 | Order, |
| 955 | orders, |
| 956 | properties={ |
| 957 | "items": relationship( |
| 958 | self.mapper_registry.map_imperatively(Item, items), |
| 959 | secondary=order_items, |
| 960 | ) |
| 961 | }, |
| 962 | ) |
| 963 | |
| 964 | load = self.load_tracker(Order) |
| 965 | self.load_tracker(Item, load) |
| 966 | |
| 967 | with fixture_session(expire_on_commit=False) as sess: |
| 968 | i1 = Item() |
| 969 | i1.description = "item 1" |
| 970 | |
| 971 | i2 = Item() |
| 972 | i2.description = "item 2" |
| 973 | |
| 974 | o = Order() |
| 975 | o.description = "order description" |
| 976 | o.items.append(i1) |
| 977 | o.items.append(i2) |
| 978 | |
| 979 | sess.add(o) |
| 980 | sess.commit() |
| 981 | |
| 982 | eq_(load.called, 0) |
| 983 | |
| 984 | with fixture_session(expire_on_commit=False) as sess2: |
| 985 | o2 = sess2.get(Order, o.id) |
| 986 | eq_(load.called, 1) |
| 987 | |
| 988 | o.items[1].description = "item 2 modified" |
| 989 | sess2.merge(o) |
| 990 | eq_(o2.items[1].description, "item 2 modified") |
| 991 | eq_(load.called, 3) |
| 992 | |
| 993 | with fixture_session(expire_on_commit=False) as sess3: |
| 994 | o3 = sess3.get(Order, o.id) |
| 995 | eq_(load.called, 4) |
| 996 | |
| 997 | o.description = "desc modified" |
| 998 | sess3.merge(o) |
| 999 | eq_(load.called, 6) |
| 1000 | eq_(o3.description, "desc modified") |
| 1001 |
nothing calls this directly
no test coverage detected