MCPcopy Create free account
hub / github.com/sqlalchemy/sqlalchemy / test_validator_w_removes

Method test_validator_w_removes

test/orm/test_validators.py:114–169  ·  view source on GitHub ↗
(self)

Source from the content-addressed store, hash-verified

112 )
113
114 def test_validator_w_removes(self):
115 users, addresses, Address = (
116 self.tables.users,
117 self.tables.addresses,
118 self.classes.Address,
119 )
120 canary = Mock()
121
122 class User(ComparableEntity):
123 @validates("name", include_removes=True)
124 def validate_name(self, key, item, remove):
125 canary(key, item, remove)
126 return item
127
128 @validates("addresses", include_removes=True)
129 def validate_address(self, key, item, remove):
130 canary(key, item, remove)
131 return item
132
133 self.mapper_registry.map_imperatively(
134 User, users, properties={"addresses": relationship(Address)}
135 )
136 self.mapper_registry.map_imperatively(Address, addresses)
137
138 u1 = User()
139 u1.name = "ed"
140 u1.name = "mary"
141 del u1.name
142 a1, a2, a3 = Address(), Address(), Address()
143 u1.addresses.append(a1)
144 u1.addresses.remove(a1)
145 u1.addresses = [a1, a2]
146 u1.addresses = [a2, a3]
147
148 eq_(
149 canary.mock_calls,
150 [
151 call("name", "ed", False),
152 call("name", "mary", False),
153 call("name", "mary", True),
154 # append a1
155 call("addresses", a1, False),
156 # remove a1
157 call("addresses", a1, True),
158 # set to [a1, a2] - this is two appends
159 call("addresses", a1, False),
160 call("addresses", a2, False),
161 # set to [a2, a3] - this is a remove of a1,
162 # append of a3. the appends are first.
163 # in 1.2 due to #3896, we also get 'a2' in the
164 # validates as it is part of the set
165 call("addresses", a2, False),
166 call("addresses", a3, False),
167 call("addresses", a1, True),
168 ],
169 )
170
171 def test_validator_bulk_collection_set(self):

Callers

nothing calls this directly

Calls 8

relationshipFunction · 0.90
eq_Function · 0.90
callFunction · 0.85
map_imperativelyMethod · 0.80
UserClass · 0.70
AddressClass · 0.70
appendMethod · 0.45
removeMethod · 0.45

Tested by

no test coverage detected