diff --git a/alfa-service/pom.xml b/alfa-service/pom.xml index 93c8b05cf47e11929e6e9dd39f0cb4001c893e81..d920278d4eed0f17ec70ab99e22acd59369beab3 100644 --- a/alfa-service/pom.xml +++ b/alfa-service/pom.xml @@ -24,7 +24,8 @@ unter der Lizenz sind dem Lizenztext zu entnehmen. --> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> @@ -135,6 +136,10 @@ <groupId>de.ozgcloud.zufi</groupId> <artifactId>zufi-manager-interface</artifactId> </dependency> + <dependency> + <groupId>de.ozgcloud.collaboration</groupId> + <artifactId>collaboration-manager-interface</artifactId> + </dependency> <!-- tools --> <dependency> diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/CollaborationMapper.java b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/CollaborationMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..f56d7f855207cc7b74af2423e916722e417dfbde --- /dev/null +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/CollaborationMapper.java @@ -0,0 +1,13 @@ +package de.ozgcloud.alfa.collaboration; + +import org.mapstruct.Mapper; +import org.mapstruct.NullValueCheckStrategy; +import org.mapstruct.ReportingPolicy; + +import de.ozgcloud.collaboration.request.GrpcCollaborationRequest; + +@Mapper(unmappedTargetPolicy = ReportingPolicy.ERROR, nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +interface CollaborationMapper { + + Collaboration fromGrpc(GrpcCollaborationRequest request, String vorgangId); +} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/CollaborationRemoteService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/CollaborationRemoteService.java index a81de9638ea305b333fbebb229520bb0d42ad33c..1389d21221c861966c3b65efb75b9adcb9ff2c70 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/CollaborationRemoteService.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/CollaborationRemoteService.java @@ -1,14 +1,37 @@ package de.ozgcloud.alfa.collaboration; +import java.util.function.Function; import java.util.stream.Stream; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import de.ozgcloud.alfa.common.GrpcUtil; +import de.ozgcloud.collaboration.request.CollaborationRequestServiceGrpc.CollaborationRequestServiceBlockingStub; +import de.ozgcloud.collaboration.request.GrpcCollaborationRequest; +import de.ozgcloud.collaboration.request.GrpcFindRequestsRequest; +import net.devh.boot.grpc.client.inject.GrpcClient; + @Service public class CollaborationRemoteService { + @GrpcClient(GrpcUtil.VORGANG_MANAGER_GRPC_CLIENT) // TODO: eigener Client für collaboration manager? + private CollaborationRequestServiceBlockingStub serviceStub; + + @Autowired + private CollaborationMapper collaborationMapper; + public Stream<Collaboration> getCollaborations(String vorgangId) { - // TODO: Replace Dummy Data with real grpc call - return Stream.empty(); + var toCollaboration = getCollaborationMapperForVorgang(vorgangId); + return serviceStub.findRequests(buildSearchRequest(vorgangId)) + .getRequestsList().stream().map(toCollaboration); + } + + GrpcFindRequestsRequest buildSearchRequest(String vorgangId) { + return GrpcFindRequestsRequest.newBuilder().setVorgangId(vorgangId).build(); + } + + private Function<GrpcCollaborationRequest, Collaboration> getCollaborationMapperForVorgang(String vorgangId) { + return request -> collaborationMapper.fromGrpc(request, vorgangId); } } diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/CollaborationMapperTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/CollaborationMapperTest.java new file mode 100644 index 0000000000000000000000000000000000000000..fb895d9fa43334e6cf72b3a96583749d60fc59d0 --- /dev/null +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/CollaborationMapperTest.java @@ -0,0 +1,25 @@ +package de.ozgcloud.alfa.collaboration; + +import static org.assertj.core.api.Assertions.*; + +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.mapstruct.factory.Mappers; +import org.mockito.Spy; + +class CollaborationMapperTest { + + @Spy + private CollaborationMapper mapper = Mappers.getMapper(CollaborationMapper.class); + + @Nested + class TestFromRequest { + + @Test + void shouldMap() { + var collaboration = mapper.fromGrpc(GrpcCollaborationRequestTestFactory.create(), CollaborationTestFactory.VORGANG_ID); + + assertThat(collaboration).usingRecursiveComparison().isEqualTo(CollaborationTestFactory.create()); + } + } +} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/CollaborationRemoteServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/CollaborationRemoteServiceTest.java new file mode 100644 index 0000000000000000000000000000000000000000..8d1203d6a6bbe83eeb38c1513eed98e257fee9dd --- /dev/null +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/CollaborationRemoteServiceTest.java @@ -0,0 +1,80 @@ +package de.ozgcloud.alfa.collaboration; + +import static org.assertj.core.api.Assertions.*; +import static org.mockito.Mockito.*; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Spy; + +import de.ozgcloud.collaboration.request.CollaborationRequestServiceGrpc.CollaborationRequestServiceBlockingStub; +import de.ozgcloud.collaboration.request.GrpcFindRequestsRequest; + +class CollaborationRemoteServiceTest { + + @Spy + @InjectMocks + private CollaborationRemoteService service; + @Mock + private CollaborationRequestServiceBlockingStub stub; + @Mock + private CollaborationMapper mapper; + + @Nested + class TestGetCollaborations { + + public static final String VORGANG_ID = CollaborationTestFactory.VORGANG_ID; + + private final GrpcFindRequestsRequest searchRequest = GrpcFindRequestsRequestTestFactory.create(); + private final Collaboration collaboration = CollaborationTestFactory.create(); + + @BeforeEach + void init() { + doReturn(searchRequest).when(service).buildSearchRequest(VORGANG_ID); + when(stub.findRequests(searchRequest)).thenReturn(GrpcFindRequestsResponseTestFactory.create()); + when(mapper.fromGrpc(GrpcFindRequestsResponseTestFactory.REQUEST, VORGANG_ID)).thenReturn(collaboration); + } + + @Test + void shouldBuildSearchRequest() { + service.getCollaborations(VORGANG_ID).toList(); + + verify(service).buildSearchRequest(VORGANG_ID); + } + + @Test + void shouldFindRequests() { + service.getCollaborations(VORGANG_ID).toList(); + + verify(stub).findRequests(searchRequest); + } + + @Test + void shouldMapToCollaboration() { + service.getCollaborations(VORGANG_ID).toList(); + + verify(mapper).fromGrpc(GrpcFindRequestsResponseTestFactory.REQUEST, VORGANG_ID); + } + + @Test + void shouldReturnCollaborations() { + var collaborations = service.getCollaborations(VORGANG_ID).toList(); + + assertThat(collaborations).containsExactly(collaboration); + } + } + + @Nested + class TestBuildSearchRequest { + + @Test + void shouldSetVorgangId() { + var request = service.buildSearchRequest(GrpcFindRequestsRequestTestFactory.VORGANG_ID); + + assertThat(request).usingRecursiveComparison().isEqualTo(GrpcFindRequestsRequestTestFactory.create()); + } + } +} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcCollaborationRequestTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcCollaborationRequestTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..06a2cc47ac10d89d39d46fefb93f8bb350e56ee8 --- /dev/null +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcCollaborationRequestTestFactory.java @@ -0,0 +1,28 @@ +package de.ozgcloud.alfa.collaboration; + +import java.util.UUID; + +import de.ozgcloud.collaboration.request.GrpcCollaborationRequest; + +class GrpcCollaborationRequestTestFactory { + + public static final String ID = UUID.randomUUID().toString(); + public static final String COLLABORATION_VORGANG_ID = CollaborationTestFactory.COLLABORATION_VORGANG_ID; + public static final String TITEL = CollaborationTestFactory.TITEL; + public static final String BESCHREIBUNG = CollaborationTestFactory.BESCHREIBUNG; + public static final String ZUSTAENDIGE_STELLE = CollaborationTestFactory.ZUSTAENDIGE_STELLE; + + public static GrpcCollaborationRequest create() { + return createBuilder() + .build(); + } + + private static GrpcCollaborationRequest.Builder createBuilder() { + return GrpcCollaborationRequest.newBuilder() + .setId(ID) + .setCollaborationVorgangId(COLLABORATION_VORGANG_ID) + .setTitel(TITEL) + .setBeschreibung(BESCHREIBUNG) + .setZustaendigeStelle(ZUSTAENDIGE_STELLE); + } +} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcFindRequestsRequestTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcFindRequestsRequestTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..5a8eeeb6f9b16e18eb7ec7ec08ef1285d20132ad --- /dev/null +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcFindRequestsRequestTestFactory.java @@ -0,0 +1,17 @@ +package de.ozgcloud.alfa.collaboration; + +import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; +import de.ozgcloud.collaboration.request.GrpcFindRequestsRequest; + +class GrpcFindRequestsRequestTestFactory { + + public static final String VORGANG_ID = VorgangHeaderTestFactory.ID; + + public static GrpcFindRequestsRequest create() { + return createBuilder().build(); + } + + public static GrpcFindRequestsRequest.Builder createBuilder() { + return GrpcFindRequestsRequest.newBuilder().setVorgangId(VORGANG_ID); + } +} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcFindRequestsResponseTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcFindRequestsResponseTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..981baf5e98cbe2177770bca59322685bd4284f36 --- /dev/null +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcFindRequestsResponseTestFactory.java @@ -0,0 +1,17 @@ +package de.ozgcloud.alfa.collaboration; + +import de.ozgcloud.collaboration.request.GrpcCollaborationRequest; +import de.ozgcloud.collaboration.request.GrpcFindRequestsResponse; + +class GrpcFindRequestsResponseTestFactory { + + public static final GrpcCollaborationRequest REQUEST = GrpcCollaborationRequestTestFactory.create(); + + public static GrpcFindRequestsResponse create() { + return createBuilder().build(); + } + + public static GrpcFindRequestsResponse.Builder createBuilder() { + return GrpcFindRequestsResponse.newBuilder().addRequests(REQUEST); + } +} diff --git a/pom.xml b/pom.xml index 5067c9c7799b3515533c79ca1a33dc45c85b2765..380c7f1f7a77d4af38db28000f6ebdae37903b8d 100644 --- a/pom.xml +++ b/pom.xml @@ -55,6 +55,7 @@ <ozgcloud-common-pdf.version>3.0.1</ozgcloud-common-pdf.version> <user-manager.version>2.8.0</user-manager.version> <zufi-manager.version>1.5.0</zufi-manager.version> + <collaboration-manager.version>0.5.0</collaboration-manager.version> <spring-cloud-config-client.version>4.1.3</spring-cloud-config-client.version> <!-- TODO: die Version über ozgcloud-common ziehen --> @@ -140,6 +141,11 @@ </exclusion> </exclusions> </dependency> + <dependency> + <groupId>de.ozgcloud.collaboration</groupId> + <artifactId>collaboration-manager-interface</artifactId> + <version>${collaboration-manager.version}</version> + </dependency> <dependency> <groupId>io.jsonwebtoken</groupId>