diff --git a/src/main/java/io/neonbee/cache/CachingDataVerticle.java b/src/main/java/io/neonbee/cache/CachingDataVerticle.java index 111c263ed..d09988cd2 100644 --- a/src/main/java/io/neonbee/cache/CachingDataVerticle.java +++ b/src/main/java/io/neonbee/cache/CachingDataVerticle.java @@ -348,8 +348,8 @@ public final Future retrieveData(DataQuery query, DataMap require, DataContex if (lock != null) { lock.release(); // safety-safe, or if data was cached in the meantime! } - })).compose(data -> filterDataFromCache(query, data, context)); - }); + })); + }).compose(data -> filterDataFromCache(query, data, context)); } /** diff --git a/src/test/java/io/neonbee/cache/CachingDataVerticleTest.java b/src/test/java/io/neonbee/cache/CachingDataVerticleTest.java index 96b0328cd..aef9cdb16 100644 --- a/src/test/java/io/neonbee/cache/CachingDataVerticleTest.java +++ b/src/test/java/io/neonbee/cache/CachingDataVerticleTest.java @@ -324,4 +324,40 @@ public Future retrieveDataToCache(DataQuery query, DataMap require, Dat assertDataEquals(requestData(dr), 2, testContext))) .onComplete(testContext.succeedingThenComplete()); } + + @Test + @DisplayName("FilterDataFromCache should be called for each data request even if data is in the cache") + void callFilterDataFromCacheOnEachDataRequest(VertxTestContext testContext) { + CachingDataVerticle testClass = new CachingDataVerticle<>() { + int filterCallCounter; + + @Override + public String getName() { + return "TestCachingVerticle"; + } + + @Override + public Future> requireDataForCaching(DataQuery query, DataContext context) { + return Future.succeededFuture(List.of()); + } + + @Override + public Future retrieveDataToCache(DataQuery query, DataMap require, DataContext context) { + return Future.succeededFuture(1); + } + + @Override + protected Future filterDataFromCache(DataQuery query, Integer data, DataContext context) { + filterCallCounter++; + return Future.succeededFuture(filterCallCounter); + } + + }; + + DataRequest dr = new DataRequest(testClass.getName()); + deployVerticle(testClass) + .compose(id -> assertDataEquals(requestData(dr), 1, testContext)) + .compose(v -> assertDataEquals(requestData(dr), 2, testContext)) + .onComplete(testContext.succeedingThenComplete()); + } }