From 614be500a8d2b7c9d546c2d6c40d4c8d81177914 Mon Sep 17 00:00:00 2001 From: tkuzynow Date: Thu, 28 Mar 2024 15:35:18 +0100 Subject: [PATCH 1/9] fix: cache topics per tenant --- .../agency/AgencyTopicEnrichmentService.java | 1 + .../api/service/TopicCachingService.java | 37 +++++++++++++++++++ .../api/service/TopicService.java | 23 +++--------- .../AgencyAdminServiceTenantAwareIT.java | 1 + .../AgencyTopicEnrichmentServiceTest.java | 1 + .../api/service/TopicServiceTest.java | 31 ++++++++++++++++ 6 files changed, 76 insertions(+), 18 deletions(-) create mode 100644 src/main/java/de/caritas/cob/agencyservice/api/service/TopicCachingService.java create mode 100644 src/test/java/de/caritas/cob/agencyservice/api/service/TopicServiceTest.java diff --git a/src/main/java/de/caritas/cob/agencyservice/api/admin/service/agency/AgencyTopicEnrichmentService.java b/src/main/java/de/caritas/cob/agencyservice/api/admin/service/agency/AgencyTopicEnrichmentService.java index adb74079..a3bf438c 100644 --- a/src/main/java/de/caritas/cob/agencyservice/api/admin/service/agency/AgencyTopicEnrichmentService.java +++ b/src/main/java/de/caritas/cob/agencyservice/api/admin/service/agency/AgencyTopicEnrichmentService.java @@ -5,6 +5,7 @@ import de.caritas.cob.agencyservice.api.repository.agency.Agency; import de.caritas.cob.agencyservice.api.repository.agencytopic.AgencyTopic; import de.caritas.cob.agencyservice.api.service.TopicService; +import de.caritas.cob.agencyservice.api.tenant.TenantContext; import java.util.List; import java.util.Map; import java.util.stream.Collectors; diff --git a/src/main/java/de/caritas/cob/agencyservice/api/service/TopicCachingService.java b/src/main/java/de/caritas/cob/agencyservice/api/service/TopicCachingService.java new file mode 100644 index 00000000..194f75f9 --- /dev/null +++ b/src/main/java/de/caritas/cob/agencyservice/api/service/TopicCachingService.java @@ -0,0 +1,37 @@ +package de.caritas.cob.agencyservice.api.service; + +import de.caritas.cob.agencyservice.api.service.securityheader.SecurityHeaderSupplier; +import de.caritas.cob.agencyservice.config.CacheManagerConfig; +import de.caritas.cob.agencyservice.config.apiclient.TopicServiceApiControllerFactory; +import de.caritas.cob.agencyservice.topicservice.generated.ApiClient; +import de.caritas.cob.agencyservice.topicservice.generated.web.TopicControllerApi; +import de.caritas.cob.agencyservice.topicservice.generated.web.model.TopicDTO; +import java.util.List; +import lombok.NonNull; +import lombok.RequiredArgsConstructor; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class TopicCachingService { + + private final @NonNull TopicServiceApiControllerFactory topicServiceApiControllerFactory; + private final @NonNull SecurityHeaderSupplier securityHeaderSupplier; + private final @NonNull TenantHeaderSupplier tenantHeaderSupplier; + + @Cacheable(cacheNames = CacheManagerConfig.TOPICS_CACHE) + public List getAllTopics(Long tenantId) { + // tenantId parameter is just used for caching per tenant, it is not required for the actual implementation, because it will be added by the tenantHeaderSupplier + TopicControllerApi controllerApi = topicServiceApiControllerFactory.createControllerApi(); + addDefaultHeaders(controllerApi.getApiClient()); + return controllerApi.getAllTopics(); + } + + private void addDefaultHeaders(ApiClient apiClient) { + var headers = this.securityHeaderSupplier.getKeycloakAndCsrfHttpHeaders(); + tenantHeaderSupplier.addTenantHeader(headers); + headers.forEach((key, value) -> apiClient.addDefaultHeader(key, value.iterator().next())); + } + +} diff --git a/src/main/java/de/caritas/cob/agencyservice/api/service/TopicService.java b/src/main/java/de/caritas/cob/agencyservice/api/service/TopicService.java index a40e3c10..70f7d0e3 100644 --- a/src/main/java/de/caritas/cob/agencyservice/api/service/TopicService.java +++ b/src/main/java/de/caritas/cob/agencyservice/api/service/TopicService.java @@ -1,35 +1,22 @@ package de.caritas.cob.agencyservice.api.service; -import de.caritas.cob.agencyservice.api.service.securityheader.SecurityHeaderSupplier; -import de.caritas.cob.agencyservice.config.CacheManagerConfig; -import de.caritas.cob.agencyservice.config.apiclient.TopicServiceApiControllerFactory; -import de.caritas.cob.agencyservice.topicservice.generated.web.TopicControllerApi; +import de.caritas.cob.agencyservice.api.tenant.TenantContext; + import java.util.List; import lombok.NonNull; import lombok.RequiredArgsConstructor; -import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import de.caritas.cob.agencyservice.topicservice.generated.web.model.TopicDTO; -import de.caritas.cob.agencyservice.topicservice.generated.ApiClient; @Service @RequiredArgsConstructor public class TopicService { - private final @NonNull TopicServiceApiControllerFactory topicServiceApiControllerFactory; - private final @NonNull SecurityHeaderSupplier securityHeaderSupplier; - private final @NonNull TenantHeaderSupplier tenantHeaderSupplier; + private final @NonNull TopicCachingService topicCachingService; - public List getAllTopics() { - TopicControllerApi controllerApi = topicServiceApiControllerFactory.createControllerApi(); - addDefaultHeaders(controllerApi.getApiClient()); - return controllerApi.getAllTopics(); - } - private void addDefaultHeaders(ApiClient apiClient) { - var headers = this.securityHeaderSupplier.getKeycloakAndCsrfHttpHeaders(); - tenantHeaderSupplier.addTenantHeader(headers); - headers.forEach((key, value) -> apiClient.addDefaultHeader(key, value.iterator().next())); + public List getAllTopics() { + return topicCachingService.getAllTopics(TenantContext.getCurrentTenant()); } } diff --git a/src/test/java/de/caritas/cob/agencyservice/api/admin/service/AgencyAdminServiceTenantAwareIT.java b/src/test/java/de/caritas/cob/agencyservice/api/admin/service/AgencyAdminServiceTenantAwareIT.java index cfa90768..0b314c6e 100644 --- a/src/test/java/de/caritas/cob/agencyservice/api/admin/service/AgencyAdminServiceTenantAwareIT.java +++ b/src/test/java/de/caritas/cob/agencyservice/api/admin/service/AgencyAdminServiceTenantAwareIT.java @@ -21,6 +21,7 @@ import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.Mockito; import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase; import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase.Replace; import org.springframework.boot.test.context.SpringBootTest; diff --git a/src/test/java/de/caritas/cob/agencyservice/api/admin/service/agency/AgencyTopicEnrichmentServiceTest.java b/src/test/java/de/caritas/cob/agencyservice/api/admin/service/agency/AgencyTopicEnrichmentServiceTest.java index 0118c575..3a84b672 100644 --- a/src/test/java/de/caritas/cob/agencyservice/api/admin/service/agency/AgencyTopicEnrichmentServiceTest.java +++ b/src/test/java/de/caritas/cob/agencyservice/api/admin/service/agency/AgencyTopicEnrichmentServiceTest.java @@ -13,6 +13,7 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import de.caritas.cob.agencyservice.topicservice.generated.web.model.TopicDTO; +import org.mockito.Mockito; import org.mockito.junit.jupiter.MockitoExtension; @ExtendWith(MockitoExtension.class) diff --git a/src/test/java/de/caritas/cob/agencyservice/api/service/TopicServiceTest.java b/src/test/java/de/caritas/cob/agencyservice/api/service/TopicServiceTest.java new file mode 100644 index 00000000..bda4e84b --- /dev/null +++ b/src/test/java/de/caritas/cob/agencyservice/api/service/TopicServiceTest.java @@ -0,0 +1,31 @@ +package de.caritas.cob.agencyservice.api.service; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.verify; + +import de.caritas.cob.agencyservice.api.tenant.TenantContext; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +@ExtendWith(MockitoExtension.class) +class TopicServiceTest { + + @Mock + private TopicCachingService topicCachingService; + + @Test + void getTopics_Should_CallTopicCachingService() { + // given + TopicService topicService = new TopicService(topicCachingService); + + // when + topicService.getAllTopics(); + + // then + verify(topicCachingService).getAllTopics(TenantContext.getCurrentTenant()); + } + + +} \ No newline at end of file From 449a19a4f2ac663af46aa4871432258d767eaf6b Mon Sep 17 00:00:00 2001 From: tkuzynow Date: Thu, 28 Mar 2024 15:38:59 +0100 Subject: [PATCH 2/9] fix: cache topics per tenant --- .../caritas/cob/agencyservice/api/service/TopicServiceTest.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/test/java/de/caritas/cob/agencyservice/api/service/TopicServiceTest.java b/src/test/java/de/caritas/cob/agencyservice/api/service/TopicServiceTest.java index bda4e84b..a539cf09 100644 --- a/src/test/java/de/caritas/cob/agencyservice/api/service/TopicServiceTest.java +++ b/src/test/java/de/caritas/cob/agencyservice/api/service/TopicServiceTest.java @@ -26,6 +26,4 @@ void getTopics_Should_CallTopicCachingService() { // then verify(topicCachingService).getAllTopics(TenantContext.getCurrentTenant()); } - - } \ No newline at end of file From 3e8c2f7c252b9b39045bf46d22eb5a6a1feac65f Mon Sep 17 00:00:00 2001 From: tkuzynow Date: Thu, 28 Mar 2024 15:39:12 +0100 Subject: [PATCH 3/9] fix: cache topics per tenant --- .../caritas/cob/agencyservice/api/service/TopicServiceTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/test/java/de/caritas/cob/agencyservice/api/service/TopicServiceTest.java b/src/test/java/de/caritas/cob/agencyservice/api/service/TopicServiceTest.java index a539cf09..f6c5f49a 100644 --- a/src/test/java/de/caritas/cob/agencyservice/api/service/TopicServiceTest.java +++ b/src/test/java/de/caritas/cob/agencyservice/api/service/TopicServiceTest.java @@ -1,6 +1,5 @@ package de.caritas.cob.agencyservice.api.service; -import static org.junit.jupiter.api.Assertions.*; import static org.mockito.Mockito.verify; import de.caritas.cob.agencyservice.api.tenant.TenantContext; From 6a38a93a02fc072f4c31c69d3e050373e792b836 Mon Sep 17 00:00:00 2001 From: tkuzynow Date: Wed, 3 Apr 2024 14:30:55 +0200 Subject: [PATCH 4/9] fix: added test for topic caching service --- pom.xml | 1 - .../api/service/TopicCachingServiceTest.java | 58 +++++++++++++++++++ 2 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 src/test/java/de/caritas/cob/agencyservice/api/service/TopicCachingServiceTest.java diff --git a/pom.xml b/pom.xml index 66f90f58..0b11b68f 100644 --- a/pom.xml +++ b/pom.xml @@ -33,7 +33,6 @@ 3.11 4.23.2 1.4.200 - 2.0.9 2.10.6 5.0.0 3.0.6 diff --git a/src/test/java/de/caritas/cob/agencyservice/api/service/TopicCachingServiceTest.java b/src/test/java/de/caritas/cob/agencyservice/api/service/TopicCachingServiceTest.java new file mode 100644 index 00000000..5cdab6b2 --- /dev/null +++ b/src/test/java/de/caritas/cob/agencyservice/api/service/TopicCachingServiceTest.java @@ -0,0 +1,58 @@ +package de.caritas.cob.agencyservice.api.service; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.when; + +import com.google.common.collect.Lists; + +import de.caritas.cob.agencyservice.AgencyServiceApplication; +import de.caritas.cob.agencyservice.api.service.securityheader.SecurityHeaderSupplier; +import de.caritas.cob.agencyservice.config.apiclient.TopicServiceApiControllerFactory; + +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; +import de.caritas.cob.agencyservice.topicservice.generated.web.model.TopicDTO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase; +import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase.Replace; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.HttpHeaders; +import org.springframework.test.context.TestPropertySource; + + +@SpringBootTest(classes = AgencyServiceApplication.class) +@TestPropertySource(properties = "spring.profiles.active=testing") +@AutoConfigureTestDatabase(replace = Replace.ANY) +class TopicCachingServiceTest { + + @MockBean + TopicServiceApiControllerFactory topicServiceApiControllerFactory; + + @MockBean SecurityHeaderSupplier securityHeaderSupplier; + + @MockBean TenantHeaderSupplier tenantHeaderSupplier; + + @MockBean + de.caritas.cob.agencyservice.topicservice.generated.web.TopicControllerApi topicControllerApi; + + @Autowired + TopicCachingService topicCachingService; + + @Test + void getAllTopics_Should_CallTopicControllerApiToGetTopics_AndCacheResponsePerTenant() { + // given + when(securityHeaderSupplier.getKeycloakAndCsrfHttpHeaders()).thenReturn(new HttpHeaders()); + when(topicServiceApiControllerFactory.createControllerApi()).thenReturn(topicControllerApi); + var expectedTopics = Lists.newArrayList(new TopicDTO(), new TopicDTO()); + when(topicControllerApi.getAllTopics()).thenReturn(expectedTopics); + + // when + var actualTopics = topicCachingService.getAllTopics(1L); + topicCachingService.getAllTopics(1L); + + // then + assertEquals(expectedTopics, actualTopics); + Mockito.verify(topicControllerApi, Mockito.times(1)).getAllTopics(); + } +} \ No newline at end of file From 35b2447ba3dce1033eb079fc636969e265dd360f Mon Sep 17 00:00:00 2001 From: tkuzynow Date: Thu, 28 Mar 2024 15:35:18 +0100 Subject: [PATCH 5/9] fix: cache topics per tenant --- .../agency/AgencyTopicEnrichmentService.java | 1 + .../api/service/TopicCachingService.java | 37 +++++++++++++++++++ .../api/service/TopicService.java | 23 +++--------- .../AgencyAdminServiceTenantAwareIT.java | 1 + .../AgencyTopicEnrichmentServiceTest.java | 1 + .../api/service/TopicServiceTest.java | 31 ++++++++++++++++ 6 files changed, 76 insertions(+), 18 deletions(-) create mode 100644 src/main/java/de/caritas/cob/agencyservice/api/service/TopicCachingService.java create mode 100644 src/test/java/de/caritas/cob/agencyservice/api/service/TopicServiceTest.java diff --git a/src/main/java/de/caritas/cob/agencyservice/api/admin/service/agency/AgencyTopicEnrichmentService.java b/src/main/java/de/caritas/cob/agencyservice/api/admin/service/agency/AgencyTopicEnrichmentService.java index adb74079..a3bf438c 100644 --- a/src/main/java/de/caritas/cob/agencyservice/api/admin/service/agency/AgencyTopicEnrichmentService.java +++ b/src/main/java/de/caritas/cob/agencyservice/api/admin/service/agency/AgencyTopicEnrichmentService.java @@ -5,6 +5,7 @@ import de.caritas.cob.agencyservice.api.repository.agency.Agency; import de.caritas.cob.agencyservice.api.repository.agencytopic.AgencyTopic; import de.caritas.cob.agencyservice.api.service.TopicService; +import de.caritas.cob.agencyservice.api.tenant.TenantContext; import java.util.List; import java.util.Map; import java.util.stream.Collectors; diff --git a/src/main/java/de/caritas/cob/agencyservice/api/service/TopicCachingService.java b/src/main/java/de/caritas/cob/agencyservice/api/service/TopicCachingService.java new file mode 100644 index 00000000..194f75f9 --- /dev/null +++ b/src/main/java/de/caritas/cob/agencyservice/api/service/TopicCachingService.java @@ -0,0 +1,37 @@ +package de.caritas.cob.agencyservice.api.service; + +import de.caritas.cob.agencyservice.api.service.securityheader.SecurityHeaderSupplier; +import de.caritas.cob.agencyservice.config.CacheManagerConfig; +import de.caritas.cob.agencyservice.config.apiclient.TopicServiceApiControllerFactory; +import de.caritas.cob.agencyservice.topicservice.generated.ApiClient; +import de.caritas.cob.agencyservice.topicservice.generated.web.TopicControllerApi; +import de.caritas.cob.agencyservice.topicservice.generated.web.model.TopicDTO; +import java.util.List; +import lombok.NonNull; +import lombok.RequiredArgsConstructor; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class TopicCachingService { + + private final @NonNull TopicServiceApiControllerFactory topicServiceApiControllerFactory; + private final @NonNull SecurityHeaderSupplier securityHeaderSupplier; + private final @NonNull TenantHeaderSupplier tenantHeaderSupplier; + + @Cacheable(cacheNames = CacheManagerConfig.TOPICS_CACHE) + public List getAllTopics(Long tenantId) { + // tenantId parameter is just used for caching per tenant, it is not required for the actual implementation, because it will be added by the tenantHeaderSupplier + TopicControllerApi controllerApi = topicServiceApiControllerFactory.createControllerApi(); + addDefaultHeaders(controllerApi.getApiClient()); + return controllerApi.getAllTopics(); + } + + private void addDefaultHeaders(ApiClient apiClient) { + var headers = this.securityHeaderSupplier.getKeycloakAndCsrfHttpHeaders(); + tenantHeaderSupplier.addTenantHeader(headers); + headers.forEach((key, value) -> apiClient.addDefaultHeader(key, value.iterator().next())); + } + +} diff --git a/src/main/java/de/caritas/cob/agencyservice/api/service/TopicService.java b/src/main/java/de/caritas/cob/agencyservice/api/service/TopicService.java index a40e3c10..70f7d0e3 100644 --- a/src/main/java/de/caritas/cob/agencyservice/api/service/TopicService.java +++ b/src/main/java/de/caritas/cob/agencyservice/api/service/TopicService.java @@ -1,35 +1,22 @@ package de.caritas.cob.agencyservice.api.service; -import de.caritas.cob.agencyservice.api.service.securityheader.SecurityHeaderSupplier; -import de.caritas.cob.agencyservice.config.CacheManagerConfig; -import de.caritas.cob.agencyservice.config.apiclient.TopicServiceApiControllerFactory; -import de.caritas.cob.agencyservice.topicservice.generated.web.TopicControllerApi; +import de.caritas.cob.agencyservice.api.tenant.TenantContext; + import java.util.List; import lombok.NonNull; import lombok.RequiredArgsConstructor; -import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import de.caritas.cob.agencyservice.topicservice.generated.web.model.TopicDTO; -import de.caritas.cob.agencyservice.topicservice.generated.ApiClient; @Service @RequiredArgsConstructor public class TopicService { - private final @NonNull TopicServiceApiControllerFactory topicServiceApiControllerFactory; - private final @NonNull SecurityHeaderSupplier securityHeaderSupplier; - private final @NonNull TenantHeaderSupplier tenantHeaderSupplier; + private final @NonNull TopicCachingService topicCachingService; - public List getAllTopics() { - TopicControllerApi controllerApi = topicServiceApiControllerFactory.createControllerApi(); - addDefaultHeaders(controllerApi.getApiClient()); - return controllerApi.getAllTopics(); - } - private void addDefaultHeaders(ApiClient apiClient) { - var headers = this.securityHeaderSupplier.getKeycloakAndCsrfHttpHeaders(); - tenantHeaderSupplier.addTenantHeader(headers); - headers.forEach((key, value) -> apiClient.addDefaultHeader(key, value.iterator().next())); + public List getAllTopics() { + return topicCachingService.getAllTopics(TenantContext.getCurrentTenant()); } } diff --git a/src/test/java/de/caritas/cob/agencyservice/api/admin/service/AgencyAdminServiceTenantAwareIT.java b/src/test/java/de/caritas/cob/agencyservice/api/admin/service/AgencyAdminServiceTenantAwareIT.java index cfa90768..0b314c6e 100644 --- a/src/test/java/de/caritas/cob/agencyservice/api/admin/service/AgencyAdminServiceTenantAwareIT.java +++ b/src/test/java/de/caritas/cob/agencyservice/api/admin/service/AgencyAdminServiceTenantAwareIT.java @@ -21,6 +21,7 @@ import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.Mockito; import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase; import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase.Replace; import org.springframework.boot.test.context.SpringBootTest; diff --git a/src/test/java/de/caritas/cob/agencyservice/api/admin/service/agency/AgencyTopicEnrichmentServiceTest.java b/src/test/java/de/caritas/cob/agencyservice/api/admin/service/agency/AgencyTopicEnrichmentServiceTest.java index 0118c575..3a84b672 100644 --- a/src/test/java/de/caritas/cob/agencyservice/api/admin/service/agency/AgencyTopicEnrichmentServiceTest.java +++ b/src/test/java/de/caritas/cob/agencyservice/api/admin/service/agency/AgencyTopicEnrichmentServiceTest.java @@ -13,6 +13,7 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import de.caritas.cob.agencyservice.topicservice.generated.web.model.TopicDTO; +import org.mockito.Mockito; import org.mockito.junit.jupiter.MockitoExtension; @ExtendWith(MockitoExtension.class) diff --git a/src/test/java/de/caritas/cob/agencyservice/api/service/TopicServiceTest.java b/src/test/java/de/caritas/cob/agencyservice/api/service/TopicServiceTest.java new file mode 100644 index 00000000..bda4e84b --- /dev/null +++ b/src/test/java/de/caritas/cob/agencyservice/api/service/TopicServiceTest.java @@ -0,0 +1,31 @@ +package de.caritas.cob.agencyservice.api.service; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.verify; + +import de.caritas.cob.agencyservice.api.tenant.TenantContext; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +@ExtendWith(MockitoExtension.class) +class TopicServiceTest { + + @Mock + private TopicCachingService topicCachingService; + + @Test + void getTopics_Should_CallTopicCachingService() { + // given + TopicService topicService = new TopicService(topicCachingService); + + // when + topicService.getAllTopics(); + + // then + verify(topicCachingService).getAllTopics(TenantContext.getCurrentTenant()); + } + + +} \ No newline at end of file From 1cf1ac7f2821eecb0270ee00da8a2ce02984e19d Mon Sep 17 00:00:00 2001 From: tkuzynow Date: Thu, 28 Mar 2024 15:38:59 +0100 Subject: [PATCH 6/9] fix: cache topics per tenant --- .../caritas/cob/agencyservice/api/service/TopicServiceTest.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/test/java/de/caritas/cob/agencyservice/api/service/TopicServiceTest.java b/src/test/java/de/caritas/cob/agencyservice/api/service/TopicServiceTest.java index bda4e84b..a539cf09 100644 --- a/src/test/java/de/caritas/cob/agencyservice/api/service/TopicServiceTest.java +++ b/src/test/java/de/caritas/cob/agencyservice/api/service/TopicServiceTest.java @@ -26,6 +26,4 @@ void getTopics_Should_CallTopicCachingService() { // then verify(topicCachingService).getAllTopics(TenantContext.getCurrentTenant()); } - - } \ No newline at end of file From 329b51a4353bc96b91307038a4afae00a90e6266 Mon Sep 17 00:00:00 2001 From: tkuzynow Date: Thu, 28 Mar 2024 15:39:12 +0100 Subject: [PATCH 7/9] fix: cache topics per tenant --- .../caritas/cob/agencyservice/api/service/TopicServiceTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/test/java/de/caritas/cob/agencyservice/api/service/TopicServiceTest.java b/src/test/java/de/caritas/cob/agencyservice/api/service/TopicServiceTest.java index a539cf09..f6c5f49a 100644 --- a/src/test/java/de/caritas/cob/agencyservice/api/service/TopicServiceTest.java +++ b/src/test/java/de/caritas/cob/agencyservice/api/service/TopicServiceTest.java @@ -1,6 +1,5 @@ package de.caritas.cob.agencyservice.api.service; -import static org.junit.jupiter.api.Assertions.*; import static org.mockito.Mockito.verify; import de.caritas.cob.agencyservice.api.tenant.TenantContext; From e9436755aa50984b7f0c121444476d37e608a6dc Mon Sep 17 00:00:00 2001 From: tkuzynow Date: Wed, 3 Apr 2024 14:30:55 +0200 Subject: [PATCH 8/9] fix: added test for topic caching service --- pom.xml | 1 - .../api/service/TopicCachingServiceTest.java | 58 +++++++++++++++++++ 2 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 src/test/java/de/caritas/cob/agencyservice/api/service/TopicCachingServiceTest.java diff --git a/pom.xml b/pom.xml index 66f90f58..0b11b68f 100644 --- a/pom.xml +++ b/pom.xml @@ -33,7 +33,6 @@ 3.11 4.23.2 1.4.200 - 2.0.9 2.10.6 5.0.0 3.0.6 diff --git a/src/test/java/de/caritas/cob/agencyservice/api/service/TopicCachingServiceTest.java b/src/test/java/de/caritas/cob/agencyservice/api/service/TopicCachingServiceTest.java new file mode 100644 index 00000000..5cdab6b2 --- /dev/null +++ b/src/test/java/de/caritas/cob/agencyservice/api/service/TopicCachingServiceTest.java @@ -0,0 +1,58 @@ +package de.caritas.cob.agencyservice.api.service; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.when; + +import com.google.common.collect.Lists; + +import de.caritas.cob.agencyservice.AgencyServiceApplication; +import de.caritas.cob.agencyservice.api.service.securityheader.SecurityHeaderSupplier; +import de.caritas.cob.agencyservice.config.apiclient.TopicServiceApiControllerFactory; + +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; +import de.caritas.cob.agencyservice.topicservice.generated.web.model.TopicDTO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase; +import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase.Replace; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.HttpHeaders; +import org.springframework.test.context.TestPropertySource; + + +@SpringBootTest(classes = AgencyServiceApplication.class) +@TestPropertySource(properties = "spring.profiles.active=testing") +@AutoConfigureTestDatabase(replace = Replace.ANY) +class TopicCachingServiceTest { + + @MockBean + TopicServiceApiControllerFactory topicServiceApiControllerFactory; + + @MockBean SecurityHeaderSupplier securityHeaderSupplier; + + @MockBean TenantHeaderSupplier tenantHeaderSupplier; + + @MockBean + de.caritas.cob.agencyservice.topicservice.generated.web.TopicControllerApi topicControllerApi; + + @Autowired + TopicCachingService topicCachingService; + + @Test + void getAllTopics_Should_CallTopicControllerApiToGetTopics_AndCacheResponsePerTenant() { + // given + when(securityHeaderSupplier.getKeycloakAndCsrfHttpHeaders()).thenReturn(new HttpHeaders()); + when(topicServiceApiControllerFactory.createControllerApi()).thenReturn(topicControllerApi); + var expectedTopics = Lists.newArrayList(new TopicDTO(), new TopicDTO()); + when(topicControllerApi.getAllTopics()).thenReturn(expectedTopics); + + // when + var actualTopics = topicCachingService.getAllTopics(1L); + topicCachingService.getAllTopics(1L); + + // then + assertEquals(expectedTopics, actualTopics); + Mockito.verify(topicControllerApi, Mockito.times(1)).getAllTopics(); + } +} \ No newline at end of file From 66e359d23b31a932a7f8de678047de5053ef93d3 Mon Sep 17 00:00:00 2001 From: tkuzynow Date: Wed, 3 Apr 2024 16:53:31 +0200 Subject: [PATCH 9/9] fix: make postcode optional for agency search --- .../agencyservice/api/service/TopicCachingServiceTest.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/test/java/de/caritas/cob/agencyservice/api/service/TopicCachingServiceTest.java b/src/test/java/de/caritas/cob/agencyservice/api/service/TopicCachingServiceTest.java index 5cdab6b2..4e773062 100644 --- a/src/test/java/de/caritas/cob/agencyservice/api/service/TopicCachingServiceTest.java +++ b/src/test/java/de/caritas/cob/agencyservice/api/service/TopicCachingServiceTest.java @@ -1,6 +1,7 @@ package de.caritas.cob.agencyservice.api.service; -import static org.junit.jupiter.api.Assertions.*; + +import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.when; import com.google.common.collect.Lists; @@ -52,7 +53,7 @@ void getAllTopics_Should_CallTopicControllerApiToGetTopics_AndCacheResponsePerTe topicCachingService.getAllTopics(1L); // then - assertEquals(expectedTopics, actualTopics); + assertThat(actualTopics).isEqualTo(expectedTopics); Mockito.verify(topicControllerApi, Mockito.times(1)).getAllTopics(); } } \ No newline at end of file