async def test_multi_cached_keys_from_attr(self, memory_mock_cache): keys1 = {'a', 'b'} multi_cached_decorator = multi_cached(keys_from_attr='keys') await multi_cached_decorator(return_dict)(keys=keys1) multi_cached_decorator = multi_cached(keys_from_attr='ids') await multi_cached_decorator(return_dict)(ids=keys1) memory_mock_cache.multi_get.assert_called_with(list(keys1)) assert memory_mock_cache.multi_get.call_count == 2 assert memory_mock_cache.multi_set.call_count == 1
async def test_multi_cached_no_keys_from_attr(self, mocker): module = sys.modules[globals()['__name__']] mocker.spy(module, 'return_dict') multi_cached_decorator = multi_cached("keys") with pytest.raises(KeyError): await multi_cached_decorator(return_dict)()
async def test_multi_cached(self, mocker, memory_mock_cache): module = sys.modules[globals()['__name__']] mocker.spy(module, 'return_dict') multi_cached_decorator = multi_cached('keys') default_keys = {'a', 'd', 'z', 'y'} resp_default = await multi_cached_decorator(return_dict)( keys=default_keys) return_dict.assert_called_with(keys=list(default_keys)) assert len( memory_mock_cache.multi_set.call_args[0][0]) == len(default_keys) assert default_keys == set(resp_default.keys()) keys1 = {'a', 'b', 'c'} resp1 = await multi_cached_decorator(return_dict)(keys=keys1) assert keys1 - default_keys == set(return_dict.call_args[1]['keys']) assert len( memory_mock_cache.multi_set.call_args[0][0]) == len(keys1 - default_keys) assert keys1 == set(resp1.keys()) keys2 = {'a', 'b', 'd', 'e', 'f'} resp2 = await multi_cached_decorator(return_dict)(keys=keys2) assert keys2 - keys1 - default_keys == set( return_dict.call_args[1]['keys']) assert len( memory_mock_cache.multi_set.call_args[0][0]) == len(keys2 - keys1 - default_keys) assert keys2 == set(resp2.keys())
async def test_multi_cached_no_results(self, memory_mock_cache): multi_cached_decorator = multi_cached(keys_from_attr='keys') resp = await multi_cached_decorator(empty_return)([]) assert resp == {} assert memory_mock_cache.multi_get.call_count == 0 assert memory_mock_cache.multi_set.call_count == 0
async def test_multi_cached(self, cache): multi_cached_decorator = multi_cached("keys") default_keys = {pytest.KEY, pytest.KEY_1} await multi_cached_decorator(return_dict)(keys=default_keys) for key in default_keys: assert await cache.get(key) is not None
async def test_multi_cached(self, cache): multi_cached_decorator = multi_cached('keys') default_keys = {'a', 'd', 'z', 'y'} await multi_cached_decorator(return_dict)(keys=default_keys) for key in default_keys: assert await cache.get(key) is not None
async def test_multi_cached_with_cache_exception_set(self, mocker, memory_mock_cache): module = sys.modules[globals()['__name__']] mocker.spy(module, 'return_dict') multi_cached_decorator = multi_cached(keys_from_attr='keys') memory_mock_cache.multi_set = asynctest.CoroutineMock(side_effect=ConnectionRefusedError()) await multi_cached_decorator(return_dict)(keys=[]) assert return_dict.call_count == 1
def test_alias_takes_precedence(self, mock_cache): with patch( "aiocache.decorators.caches.get", MagicMock(return_value=mock_cache)) as mock_get: mc = multi_cached( keys_from_attr="keys", alias='default', cache=SimpleMemoryCache, namespace='test') mc(stub_dict) mock_get.assert_called_with('default') assert mc.cache is mock_cache
def test_init(self): mc = multi_cached( keys_from_attr="keys", key_builder=None, ttl=1, cache=SimpleMemoryCache, plugins=None, alias=None, namespace="test") assert mc.ttl == 1 assert mc.key_builder('key') == 'key' assert mc.keys_from_attr == "keys" assert mc.cache is None assert mc._cache == SimpleMemoryCache assert mc._serializer is None assert mc._kwargs == {'namespace': 'test'}
def test_init(self): mc = multi_cached( keys_from_attr="keys", key_builder=None, ttl=1, cache=SimpleMemoryCache, plugins=None, alias=None, namespace="test", ) assert mc.ttl == 1 assert mc.key_builder("key", lambda x: x) == "key" assert mc.keys_from_attr == "keys" assert mc.cache is None assert mc._cache == SimpleMemoryCache assert mc._serializer is None assert mc._kwargs == {"namespace": "test"}
async def test_multi_cached_empty_keys(self, memory_mock_cache): multi_cached_decorator = multi_cached(keys_from_attr='keys') await multi_cached_decorator(arg_return_dict)([]) assert memory_mock_cache.multi_get.call_count == 0 assert memory_mock_cache.multi_set.call_count == 1
def decorator(self, mocker, mock_cache): with patch("aiocache.decorators._get_cache", return_value=mock_cache): yield multi_cached(keys_from_attr="keys")
async def test_multi_cached_func_exception(self, mocker, memory_mock_cache): cached_decorator = multi_cached(keys_from_attr="keys") with pytest.raises(ValueError): await cached_decorator(raise_exception)(keys=[])