From df2d95b83f7d9b05025e5f5bc0bbd1e5e85c0725 Mon Sep 17 00:00:00 2001 From: Vladimirs Date: Wed, 29 Jan 2025 12:01:43 +0200 Subject: [PATCH] bug: caching data verticle filter fix --- .../io/neonbee/cache/CachingDataVerticle.java | 4 +-- .../cache/CachingDataVerticleTest.java | 36 +++++++++++++++++++ 2 files changed, 38 insertions(+), 2 deletions(-) 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()); + } }