Example #1
0
    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
Example #2
0
    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)()
Example #3
0
    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())
Example #4
0
    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
Example #5
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
Example #6
0
    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
Example #7
0
    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
Example #8
0
    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
Example #9
0
    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'}
Example #10
0
    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"}
Example #11
0
    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
Example #12
0
 def decorator(self, mocker, mock_cache):
     with patch("aiocache.decorators._get_cache", return_value=mock_cache):
         yield multi_cached(keys_from_attr="keys")
Example #13
0
    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=[])