MCPcopy
hub / github.com/sqlalchemy/sqlalchemy / test_many_to_many_cascade

Method test_many_to_many_cascade

test/orm/test_merge.py:944–1000  ·  view source on GitHub ↗
(self)

Source from the content-addressed store, hash-verified

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

Callers

nothing calls this directly

Calls 12

load_trackerMethod · 0.95
relationshipFunction · 0.90
fixture_sessionFunction · 0.90
eq_Function · 0.90
map_imperativelyMethod · 0.80
ItemClass · 0.70
OrderClass · 0.70
appendMethod · 0.45
addMethod · 0.45
commitMethod · 0.45
getMethod · 0.45
mergeMethod · 0.45

Tested by

no test coverage detected