diff --git a/src/main/java/org/folio/search/integration/KafkaMessageListener.java b/src/main/java/org/folio/search/integration/KafkaMessageListener.java index 567feedd6..659d0d22e 100644 --- a/src/main/java/org/folio/search/integration/KafkaMessageListener.java +++ b/src/main/java/org/folio/search/integration/KafkaMessageListener.java @@ -3,6 +3,7 @@ import static org.apache.commons.collections4.MapUtils.getString; import static org.apache.commons.lang3.RegExUtils.replaceAll; import static org.folio.search.configuration.RetryTemplateConfiguration.KAFKA_RETRY_TEMPLATE_NAME; +import static org.folio.search.configuration.SearchCacheNames.REFERENCE_DATA_CACHE; import static org.folio.search.domain.dto.ResourceEventType.CREATE; import static org.folio.search.domain.dto.ResourceEventType.DELETE; import static org.folio.search.domain.dto.ResourceEventType.REINDEX; @@ -33,6 +34,7 @@ import org.folio.search.service.config.ConfigSynchronizationService; import org.folio.search.utils.KafkaConstants; import org.folio.spring.service.SystemUserScopedExecutionService; +import org.springframework.cache.annotation.CacheEvict; import org.springframework.kafka.annotation.KafkaListener; import org.springframework.stereotype.Component; @@ -163,6 +165,7 @@ public void handleConsortiumInstanceEvents(List> consumerRecords) { log.info("Processing classification-type events from Kafka [number of events: {}]", consumerRecords.size()); var batch = consumerRecords.stream() diff --git a/src/test/java/org/folio/search/controller/ConfigIT.java b/src/test/java/org/folio/search/controller/ConfigIT.java index a170e0ecc..ee9bf2592 100644 --- a/src/test/java/org/folio/search/controller/ConfigIT.java +++ b/src/test/java/org/folio/search/controller/ConfigIT.java @@ -4,6 +4,7 @@ import static org.awaitility.Awaitility.await; import static org.awaitility.Durations.ONE_MINUTE; import static org.awaitility.Durations.TWO_SECONDS; +import static org.folio.search.configuration.SearchCacheNames.REFERENCE_DATA_CACHE; import static org.folio.search.domain.dto.TenantConfiguredFeature.SEARCH_ALL_FIELDS; import static org.folio.search.sample.SampleInstances.getSemanticWebAsMap; import static org.folio.search.support.base.ApiEndpoints.featureConfigPath; @@ -25,6 +26,7 @@ import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.UUID; import lombok.SneakyThrows; import org.folio.search.domain.dto.BrowseConfig; @@ -291,6 +293,21 @@ void browseConfigs_synchronised_whenDeleteClassificationTypeEventReceived() { okapi.wireMockServer().removeStub(stub); } + @Test + void referenceDataCacheInvalidates_whenClassificationTypeEventReceived() { + var cacheKey = "cache-test-key"; + var referenceDataCache = Objects.requireNonNull(cacheManager.getCache(REFERENCE_DATA_CACHE)); + referenceDataCache.put(cacheKey, UUID.randomUUID()); + assertThat(referenceDataCache.get(cacheKey)).isNotNull(); + + kafkaTemplate.send(inventoryClassificationTopic(), randomId(), new ResourceEvent() + .resourceName(ResourceType.CLASSIFICATION_TYPE.getValue()) + ); + + await().atMost(ONE_MINUTE).pollInterval(TWO_SECONDS) + .untilAsserted(() -> assertThat(referenceDataCache.get(cacheKey)).isNull()); + } + @SneakyThrows private Map getIndexedInstanceById(String id) { final var searchRequest = new SearchRequest() diff --git a/src/test/java/org/folio/search/support/base/BaseIntegrationTest.java b/src/test/java/org/folio/search/support/base/BaseIntegrationTest.java index 1054833e9..9845b91e9 100644 --- a/src/test/java/org/folio/search/support/base/BaseIntegrationTest.java +++ b/src/test/java/org/folio/search/support/base/BaseIntegrationTest.java @@ -76,6 +76,7 @@ public abstract class BaseIntegrationTest { protected static KafkaTemplate kafkaTemplate; protected static OkapiConfiguration okapi; protected static RestHighLevelClient elasticClient; + protected static CacheManager cacheManager; @RegisterExtension static OkapiExtension okapiExtension = @@ -85,12 +86,14 @@ public abstract class BaseIntegrationTest { static void setUpDefaultTenant( @Autowired MockMvc mockMvc, @Autowired KafkaTemplate kafkaTemplate, - @Autowired RestHighLevelClient restHighLevelClient) { + @Autowired RestHighLevelClient restHighLevelClient, + @Autowired CacheManager cacheManager) { setEnvProperty("folio-test"); BaseIntegrationTest.mockMvc = mockMvc; BaseIntegrationTest.kafkaTemplate = kafkaTemplate; BaseIntegrationTest.inventoryApi = new InventoryApi(kafkaTemplate); BaseIntegrationTest.elasticClient = restHighLevelClient; + BaseIntegrationTest.cacheManager = cacheManager; } @BeforeAll