Skip to content

Commit

Permalink
Merge branch 'develop' into tsys-release-2024-05-28
Browse files Browse the repository at this point in the history
  • Loading branch information
web-mi committed May 28, 2024
2 parents d0f8dd1 + ba6cee4 commit 02aaf39
Show file tree
Hide file tree
Showing 10 changed files with 149 additions and 21 deletions.
1 change: 0 additions & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@
<commons-lang3.version>3.11</commons-lang3.version>
<liquibase-maven-plugin.version>4.23.2</liquibase-maven-plugin.version>
<h2.version>1.4.200</h2.version>
<powermock-module-junit4.version>2.0.9</powermock-module-junit4.version>
<ehcache.version>2.10.6</ehcache.version>
<easy-random-core.version>5.0.0</easy-random-core.version>
<spring-boot-autoconfigure.version>3.0.6</spring-boot-autoconfigure.version>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,16 @@ private List<TopicDTO> getTopics() {
}

private List<TopicDTO> getTopics(List<AgencyTopic> agencyTopics) {
return agencyTopics.stream().map(AgencyTopic::getTopicData).toList();
return agencyTopics.stream().map(agencyTopic -> createTopicDTO(agencyTopic)).toList();
}

private TopicDTO createTopicDTO(AgencyTopic agencyTopic) {
return new TopicDTO().id(agencyTopic.getTopicId())
.name(agencyTopic.getTopicData().getName())
.description(agencyTopic.getTopicData().getDescription())
.status(agencyTopic.getTopicData().getStatus())
.internalIdentifier(agencyTopic.getTopicData().getInternalIdentifier());

}

private AgencyLinks createAgencyLinks() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
@@ -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<TopicDTO> 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()));
}

}
Original file line number Diff line number Diff line change
@@ -1,36 +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;

@Cacheable(cacheNames = CacheManagerConfig.TOPICS_CACHE)
public List<TopicDTO> 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<TopicDTO> getAllTopics() {
return topicCachingService.getAllTopics(TenantContext.getCurrentTenant());
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,20 @@
import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertTrue;

import com.google.common.collect.Lists;
import de.caritas.cob.agencyservice.api.model.AgencyAdminFullResponseDTO;
import de.caritas.cob.agencyservice.api.model.AgencyAdminResponseDTO;
import de.caritas.cob.agencyservice.api.model.AgencyDTO;
import de.caritas.cob.agencyservice.api.model.AgencyLinks;
import de.caritas.cob.agencyservice.api.model.DataProtectionContactDTO;
import de.caritas.cob.agencyservice.api.model.HalLink.MethodEnum;
import de.caritas.cob.agencyservice.api.model.TopicDTO;
import de.caritas.cob.agencyservice.api.repository.agency.Agency;
import de.caritas.cob.agencyservice.api.repository.agency.DataProtectionResponsibleEntity;
import de.caritas.cob.agencyservice.api.repository.agency.Gender;
import de.caritas.cob.agencyservice.api.repository.agencytopic.AgencyTopic;
import de.caritas.cob.agencyservice.api.util.JsonConverter;
import org.assertj.core.groups.Tuple;
import org.jeasy.random.EasyRandom;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
Expand All @@ -33,6 +37,7 @@ public void init() {
this.agency.setDataProtectionAgencyResponsibleContactData(JsonConverter.convertToJson(new DataProtectionContactDTO()));
this.agency.setDataProtectionOfficerContactData(JsonConverter.convertToJson(new DataProtectionContactDTO()));
this.agency.setDataProtectionAlternativeContactData(JsonConverter.convertToJson(new DataProtectionContactDTO()));
this.agency.setAgencyTopics(Lists.newArrayList(AgencyTopic.builder().topicId(1L).topicData(new TopicDTO().id(1L).name("topic name")).build()));
this.agency.setTenantId(TENANT_ID);
this.agencyAdminFullResponseDTOBuilder = new AgencyAdminFullResponseDTOBuilder(agency);
this.agency.setCounsellingRelations(AgencyDTO.CounsellingRelationsEnum.PARENTAL_COUNSELLING.getValue() + "," + AgencyDTO.CounsellingRelationsEnum.RELATIVE_COUNSELLING.getValue());
Expand Down Expand Up @@ -62,6 +67,8 @@ private void assertBaseDTOAttributesAreMapped(AgencyAdminFullResponseDTO result)
assertEquals(String.valueOf(agency.getCreateDate()), result.getEmbedded().getCreateDate());
assertEquals(String.valueOf(agency.getUpdateDate()), result.getEmbedded().getUpdateDate());
assertEquals(String.valueOf(agency.getDeleteDate()), result.getEmbedded().getDeleteDate());
assertThat(result.getEmbedded().getTopics()).extracting("id", "name").containsExactly(
Tuple.tuple(1L, "topic name"));
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package de.caritas.cob.agencyservice.api.service;


import static org.assertj.core.api.Assertions.assertThat;
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
assertThat(actualTopics).isEqualTo(expectedTopics);
Mockito.verify(topicControllerApi, Mockito.times(1)).getAllTopics();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package de.caritas.cob.agencyservice.api.service;

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());
}
}

0 comments on commit 02aaf39

Please sign in to comment.