def test_store_purge_keys(): class Type1: pass class Type2: pass class Type3: pass class Type4: pass config = pretend.stub( registry={ "cache_keys": { Type1: lambda o: origin.CacheKeys(cache=[], purge=["type_1"]), Type2: lambda o: origin.CacheKeys(cache=[], purge=["type_2", "foo"]), Type3: lambda o: origin.CacheKeys(cache=[], purge=["type_3", "foo"]), } } ) session = pretend.stub( info={}, new={Type1()}, dirty={Type2()}, deleted={Type3(), Type4()} ) origin.store_purge_keys(config, session, pretend.stub()) assert session.info["warehouse.cache.origin.purges"] == { "type_1", "type_2", "type_3", "foo", }
def test_no_origin_cache(self): class Fake: pass response = pretend.stub() @origin.origin_cache(1) def view(context, request): return response @pretend.call_recorder def raiser(iface): raise ValueError context = Fake() request = pretend.stub( registry={ "cache_keys": { Fake: lambda X: origin.CacheKeys(cache=[], purge=[]), }, }, find_service=raiser, ) assert view(context, request) is response assert raiser.calls == [pretend.call(IOriginCache)]
def test_only_purge(self): key_maker = origin.key_maker_factory( cache_keys=None, purge_keys=["bar", "bar/{obj.attr}"], ) assert key_maker(pretend.stub(attr="bar")) == origin.CacheKeys( cache=[], purge=["bar", "bar/bar"], )
def test_both_cache_and_purge(self): key_maker = origin.key_maker_factory( cache_keys=["foo", "foo/{obj.attr}"], purge_keys=["bar", "bar/{obj.attr}"], ) assert key_maker(pretend.stub(attr="bar")) == origin.CacheKeys( cache=["foo", "foo/bar"], purge=["bar", "bar/bar"], )
def test_response_hook(self, seconds, keys): class Fake: pass class Cache: @staticmethod @pretend.call_recorder def cache( keys, request, response, seconds, stale_while_revalidate, stale_if_error ): pass response = pretend.stub() deco = origin.origin_cache(seconds, keys=keys) @deco def view(context, request): return response key_maker = pretend.call_recorder( lambda obj: origin.CacheKeys(cache=["one", "two"], purge=[]) ) cacher = Cache() context = Fake() callbacks = [] request = pretend.stub( registry={"cache_keys": {Fake: key_maker}}, find_service=lambda iface: cacher, add_response_callback=callbacks.append, ) assert view(context, request) is response assert key_maker.calls == [pretend.call(context)] assert len(callbacks) == 1 callbacks[0](request, response) assert cacher.cache.calls == [ pretend.call( ["one", "two"] + ([] if keys is None else keys), request, response, seconds=seconds, stale_while_revalidate=None, stale_if_error=None, ) ]