from cache.Cache import Cache from cache.CacheManager import CacheManager from cache.DictionaryCache import DictionaryCache from cache.ListCache import ListCache from tests.TestUsingMemoryBasedSheerka import TestUsingMemoryBasedSheerka class TestCacheManager(TestUsingMemoryBasedSheerka): def test_i_do_not_push_into_sdp_when_cache_only(self): sheerka = self.get_sheerka() context = self.get_context(sheerka) cache_manager = CacheManager(True) cache_manager.register_cache("test", Cache(), persist=True) cache_manager.put("test", "key", "value") cache_manager.commit(context) assert not sheerka.sdp.exists("test", "key") def test_i_do_not_get_value_from_sdp_when_cache_only_is_true(self): sheerka = self.get_sheerka() context = self.get_context(sheerka) with sheerka.sdp.get_transaction(context.event) as transaction: transaction.add("test", "key", "value") cache = Cache(default=lambda k: sheerka.sdp.get("test", k)) cache_manager = CacheManager(True) cache_manager.register_cache("test", cache, persist=True) assert cache_manager.get("test", "key") is None def test_i_can_get_value_from_sdp_when_cache_only_is_false(self): sheerka = self.get_sheerka() context = self.get_context(sheerka) with sheerka.sdp.get_transaction(context.event) as transaction: transaction.add("test", "key", "value") cache = Cache(default=lambda k: sheerka.sdp.get("test", k)) cache_manager = CacheManager(False) cache_manager.register_cache("test", cache, persist=True) assert cache_manager.get("test", "key") == "value" def test_i_can_commit_simple_cache(self): sheerka = self.get_sheerka() context = self.get_context(sheerka) cache_manager = CacheManager(False) cache_manager.register_cache("test", Cache(), persist=True) cache = cache_manager.caches["test"].cache cache_manager.put("test", "key", "value") cache_manager.commit(context) assert sheerka.sdp.get("test", "key") == "value" cache.update("key", "value", "key", "another_value") cache_manager.commit(context) assert sheerka.sdp.get("test", "key") == "another_value" cache.update("key", "another_value", "key2", "another_value") cache_manager.commit(context) assert sheerka.sdp.get("test", "key") is None assert sheerka.sdp.get("test", "key2") == "another_value" def test_i_can_commit_list_cache(self): sheerka = self.get_sheerka() context = self.get_context(sheerka) cache_manager = CacheManager(False) cache_manager.register_cache("test", ListCache(), persist=True) cache = cache_manager.caches["test"].cache cache.put("key", "value") cache_manager.commit(context) assert sheerka.sdp.get("test", "key") == ["value"] cache.put("key", "value2") cache_manager.commit(context) assert sheerka.sdp.get("test", "key") == ["value", "value2"] cache.update("key", "value2", "key2", "value2") cache_manager.commit(context) assert sheerka.sdp.get("test", "key") == ["value"] assert sheerka.sdp.get("test", "key2") == ["value2"] cache.update("key2", "value2", "key3", "value2") cache_manager.commit(context) assert sheerka.sdp.get("test", "key") == ["value"] assert sheerka.sdp.get("test", "key2") is None assert sheerka.sdp.get("test", "key3") == ["value2"] def test_i_can_commit_dictionary_cache(self): sheerka = self.get_sheerka() context = self.get_context(sheerka) cache_manager = CacheManager(False) cache_manager.register_cache("test", DictionaryCache(), persist=True) cache = cache_manager.caches["test"].cache cache.put(False, {"key": "value", "key2": "value2"}) cache_manager.commit(context) assert sheerka.sdp.get("test") == {"key": "value", "key2": "value2"} assert sheerka.sdp.get("test", "key") == "value" cache.put(False, {"key": "value", "key2": "value2", "key3": "value3"}) cache_manager.commit(context) assert sheerka.sdp.get("test") == {"key": "value", "key2": "value2", "key3": "value3"}