public <K> DecorateFunction<K, T> withCache(Cache<K, T> cache) { return Decorators.ofFunction(Cache.decorateSupplier(cache, supplier)); }
@Test public void shouldReturnValueFromDecoratedSupplier() throws Throwable { // Given the cache does not contain the key given(cache.get("testKey")).willReturn(null); Cache<String, String> cacheContext = Cache.of(cache); TestSubscriber<CacheEvent.Type> testSubscriber = toFlowable(cacheContext.getEventPublisher()) .map(CacheEvent::getEventType) .test(); Function<String, String> cachedFunction = Cache.decorateSupplier(cacheContext, () -> "Hello world"); String value = cachedFunction.apply("testKey"); assertThat(value).isEqualTo("Hello world"); assertThat(cacheContext.getMetrics().getNumberOfCacheHits()).isEqualTo(0); assertThat(cacheContext.getMetrics().getNumberOfCacheMisses()).isEqualTo(1); then(cache).should().put("testKey", "Hello world"); testSubscriber .assertValueCount(1) .assertValues(CacheEvent.Type.CACHE_MISS); }