diff options
Diffstat (limited to 'test/ext/test_baked.py')
-rw-r--r-- | test/ext/test_baked.py | 117 |
1 files changed, 88 insertions, 29 deletions
diff --git a/test/ext/test_baked.py b/test/ext/test_baked.py index 34b128244..fa2722fcd 100644 --- a/test/ext/test_baked.py +++ b/test/ext/test_baked.py @@ -16,6 +16,9 @@ class BakedTest(_fixtures.FixtureTest): run_inserts = 'once' run_deletes = None + def setup(self): + self.bakery = baked.bakery() + class StateChangeTest(BakedTest): @classmethod @@ -24,9 +27,6 @@ class StateChangeTest(BakedTest): mapper(User, cls.tables.users) - def setup(self): - self._cache = {} - def _assert_cache_key(self, key, elements): eq_( key, @@ -37,7 +37,7 @@ class StateChangeTest(BakedTest): User = self.classes.User session = Session() l1 = lambda: session.query(User) - q1 = BakedQuery(l1, bakery=self._cache) + q1 = self.bakery(l1) self._assert_cache_key( q1._cache_key, [l1] @@ -49,7 +49,7 @@ class StateChangeTest(BakedTest): session = Session() l1 = lambda: session.query(User) l2 = lambda q: q.filter(User.name == bindparam('name')) - q1 = BakedQuery(l1, bakery=self._cache) + q1 = self.bakery(l1) self._assert_cache_key( q1._cache_key, [l1] @@ -70,7 +70,7 @@ class StateChangeTest(BakedTest): session = Session() l1 = lambda: session.query(User) l2 = lambda q: q.filter(User.name == bindparam('name')) - q1 = BakedQuery(l1, bakery=self._cache) + q1 = self.bakery(l1) self._assert_cache_key( q1._cache_key, [l1] @@ -88,7 +88,7 @@ class StateChangeTest(BakedTest): session = Session() l1 = lambda: session.query(User) l2 = lambda q: q.filter(User.name == bindparam('name')) - q1 = BakedQuery(l1, bakery=self._cache) + q1 = self.bakery(l1) q2 = q1.with_criteria(l2) is_not_(q2, q1) @@ -107,7 +107,7 @@ class StateChangeTest(BakedTest): session = Session() l1 = lambda: session.query(User) l2 = lambda q: q.filter(User.name == bindparam('name')) - q1 = BakedQuery(l1, bakery=self._cache) + q1 = self.bakery(l1) q2 = q1 + l2 is_not_(q2, q1) @@ -132,7 +132,7 @@ class LikeQueryTest(BakedTest): def test_first_no_result(self): User = self.classes.User - bq = BakedQuery(lambda s: s.query(User)) + bq = self.bakery(lambda s: s.query(User)) bq += lambda q: q.filter(User.name == 'asdf') eq_( @@ -143,7 +143,7 @@ class LikeQueryTest(BakedTest): def test_first_multiple_result(self): User = self.classes.User - bq = BakedQuery(lambda s: s.query(User.id)) + bq = self.bakery(lambda s: s.query(User.id)) bq += lambda q: q.filter(User.name.like('%ed%')).order_by(User.id) eq_( @@ -154,7 +154,7 @@ class LikeQueryTest(BakedTest): def test_one_no_result(self): User = self.classes.User - bq = BakedQuery(lambda s: s.query(User)) + bq = self.bakery(lambda s: s.query(User)) bq += lambda q: q.filter(User.name == 'asdf') assert_raises( @@ -165,7 +165,7 @@ class LikeQueryTest(BakedTest): def test_one_multiple_result(self): User = self.classes.User - bq = BakedQuery(lambda s: s.query(User)) + bq = self.bakery(lambda s: s.query(User)) bq += lambda q: q.filter(User.name.like('%ed%')) assert_raises( @@ -176,7 +176,7 @@ class LikeQueryTest(BakedTest): def test_get(self): User = self.classes.User - bq = BakedQuery(lambda s: s.query(User)) + bq = self.bakery(lambda s: s.query(User)) sess = Session() @@ -211,7 +211,7 @@ class LikeQueryTest(BakedTest): } ) - bq = BakedQuery(lambda s: s.query(AddressUser)) + bq = self.bakery(lambda s: s.query(AddressUser)) sess = Session() @@ -245,7 +245,7 @@ class ResultTest(BakedTest): def test_no_steps(self): User = self.classes.User - bq = BakedQuery( + bq = self.bakery( lambda s: s.query(User.id, User.name).order_by(User.id)) for i in range(3): @@ -258,7 +258,7 @@ class ResultTest(BakedTest): def test_different_limits(self): User = self.classes.User - bq = BakedQuery( + bq = self.bakery( lambda s: s.query(User.id, User.name).order_by(User.id)) bq += lambda q: q.limit(bindparam('limit')).offset(bindparam('offset')) @@ -275,18 +275,77 @@ class ResultTest(BakedTest): exp ) - def test_spoiled_w_params(self): + def test_spoiled_full_w_params(self): User = self.classes.User - bq = BakedQuery( - lambda s: s.query(User.id, User.name).order_by(User.id)) + canary = mock.Mock() - bq += lambda q: q.filter(User.id == bindparam('id')) + def fn1(s): + canary.fn1() + return s.query(User.id, User.name).order_by(User.id) + + def fn2(q): + canary.fn2() + return q.filter(User.id == bindparam('id')) + + def fn3(q): + canary.fn3() + return q + + for x in range(3): + bq = self.bakery(fn1) + + bq += fn2 + + sess = Session() + eq_( + bq.spoil(full=True).add_criteria(fn3)(sess).params(id=7).all(), + [(7, 'jack')] + ) + + eq_( + canary.mock_calls, + [mock.call.fn1(), mock.call.fn2(), mock.call.fn3(), + mock.call.fn1(), mock.call.fn2(), mock.call.fn3(), + mock.call.fn1(), mock.call.fn2(), mock.call.fn3()] + ) + + def test_spoiled_half_w_params(self): + User = self.classes.User + + canary = mock.Mock() + + def fn1(s): + canary.fn1() + return s.query(User.id, User.name).order_by(User.id) + + def fn2(q): + canary.fn2() + return q.filter(User.id == bindparam('id')) + + def fn3(q): + canary.fn3() + return q + + bq = self.bakery(fn1) + + bq += fn2 + + for x in range(3): + bq = self.bakery(fn1) + + bq += fn2 + + sess = Session() + eq_( + bq.spoil().add_criteria(fn3)(sess).params(id=7).all(), + [(7, 'jack')] + ) - sess = Session() eq_( - bq.spoil()(sess).params(id=7).all(), - [(7, 'jack')] + canary.mock_calls, + [mock.call.fn1(), mock.call.fn2(), + mock.call.fn3(), mock.call.fn3(), mock.call.fn3()] ) def test_w_new_entities(self): @@ -297,7 +356,7 @@ class ResultTest(BakedTest): """ User = self.classes.User - bq = BakedQuery( + bq = self.bakery( lambda s: s.query(User.id, User.name)) bq += lambda q: q.from_self().with_entities( @@ -318,7 +377,7 @@ class ResultTest(BakedTest): """ User = self.classes.User - base_bq = BakedQuery( + base_bq = self.bakery( lambda s: s.query(User.id, User.name)) base_bq += lambda q: q.order_by(User.id) @@ -377,7 +436,7 @@ class ResultTest(BakedTest): def test_conditional_step_oneline(self): User = self.classes.User - base_bq = BakedQuery( + base_bq = self.bakery( lambda s: s.query(User.id, User.name)) base_bq += lambda q: q.order_by(User.id) @@ -401,7 +460,7 @@ class ResultTest(BakedTest): User = self.classes.User Address = self.classes.Address - base_bq = BakedQuery( + base_bq = self.bakery( lambda s: s.query(User)) base_bq += lambda q: q.options(subqueryload(User.addresses)) @@ -606,7 +665,7 @@ class LazyLoaderTest(BakedTest): def _test_baked_lazy_loading(self, set_option): User, Address = self.classes.User, self.classes.Address - base_bq = BakedQuery( + base_bq = self.bakery( lambda s: s.query(User)) if set_option: @@ -665,7 +724,7 @@ class LazyLoaderTest(BakedTest): def test_baked_lazy_loading_m2o(self): User, Address = self._m2o_fixture() - base_bq = BakedQuery( + base_bq = self.bakery( lambda s: s.query(Address)) base_bq += lambda q: q.options(baked_lazyload(Address.user)) |