diff --git a/lombok.config b/lombok.config index 32903abaf7760ff694e6cc45854316eb10f87137..d248ae3c4da552a1948c74ed6736e9e9d72655bd 100644 --- a/lombok.config +++ b/lombok.config @@ -27,4 +27,5 @@ lombok.log.slf4j.flagUsage = ERROR lombok.log.log4j.flagUsage = ERROR lombok.data.flagUsage = ERROR lombok.nonNull.exceptionType = IllegalArgumentException -lombok.addLombokGeneratedAnnotation = true \ No newline at end of file +lombok.addLombokGeneratedAnnotation = true +lombok.copyableAnnotations += net.devh.boot.grpc.client.inject.GrpcClient \ No newline at end of file diff --git a/pom.xml b/pom.xml index b5ba996e26a6ce58036638c3dd1475c2e76aa241..8629c9353459cd9aa368342a94978fed179207a0 100644 --- a/pom.xml +++ b/pom.xml @@ -55,7 +55,7 @@ <properties> <vorgang-manager.version>2.10.0</vorgang-manager.version> - <zufi-manager.version>1.2.0</zufi-manager.version> + <zufi-manager.version>1.7.0-SNAPSHOT</zufi-manager.version> <jsoup.version>1.14.3</jsoup.version> <xmlschema.version>2.3.0</xmlschema.version> diff --git a/router/src/main/java/de/ozgcloud/eingang/common/zufi/OrganisationsEinheit.java b/router/src/main/java/de/ozgcloud/eingang/common/zufi/OrganisationsEinheit.java index 24fd9e46940384a03167847e061fbab44024fe75..24a39f9ba47645252914b962488eb00cc3571d63 100644 --- a/router/src/main/java/de/ozgcloud/eingang/common/zufi/OrganisationsEinheit.java +++ b/router/src/main/java/de/ozgcloud/eingang/common/zufi/OrganisationsEinheit.java @@ -36,4 +36,5 @@ class OrganisationsEinheit { private String name; private String synonyme; private String vorgangManagerAddress; + private XzufiId xzufiId; } \ No newline at end of file diff --git a/router/src/main/java/de/ozgcloud/eingang/common/zufi/OrganisationsEinheitRemoteService.java b/router/src/main/java/de/ozgcloud/eingang/common/zufi/OrganisationsEinheitRemoteService.java index c7e01f4c1c86af88053ea42004ad0322f572139f..3e7ca5cfe148ae3d285172c409e9c5ad85067835 100644 --- a/router/src/main/java/de/ozgcloud/eingang/common/zufi/OrganisationsEinheitRemoteService.java +++ b/router/src/main/java/de/ozgcloud/eingang/common/zufi/OrganisationsEinheitRemoteService.java @@ -23,25 +23,43 @@ */ package de.ozgcloud.eingang.common.zufi; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import de.ozgcloud.eingang.Application; -import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcOrganisationsEinheitGetRequest; +import de.ozgcloud.eingang.router.errorhandling.MultipleOrganisationsEinheitenException; +import de.ozgcloud.eingang.router.errorhandling.UnknownOrganisationseinheitException; +import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcGetByOrganisationsEinheitIdRequest; +import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcGetByOrganisationsEinheitIdResponse; +import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcOrganisationsEinheit; import de.ozgcloud.zufi.grpc.organisationseinheit.OrganisationsEinheitServiceGrpc.OrganisationsEinheitServiceBlockingStub; +import lombok.RequiredArgsConstructor; import net.devh.boot.grpc.client.inject.GrpcClient; @Service +@RequiredArgsConstructor class OrganisationsEinheitRemoteService { @GrpcClient(Application.ZUFI_MANAGER_GRPC_CLIENT) - private OrganisationsEinheitServiceBlockingStub serviceStub; - @Autowired - private OrganisationsEinheitMapper mapper; + private final OrganisationsEinheitServiceBlockingStub serviceStub; + private final OrganisationsEinheitMapper mapper; - public OrganisationsEinheit getById(String id) { - var response = serviceStub.getById(GrpcOrganisationsEinheitGetRequest.newBuilder().setId(id).build()); + public OrganisationsEinheit getByOrganisationEinheitId(String id) { + var response = serviceStub + .getByOrganisationsEinheitId(GrpcGetByOrganisationsEinheitIdRequest.newBuilder().setOrganisationsEinheitId(id).build()); + verifyResponse(id, response); + return mapper.fromGrpc(getOrganisationEinheit(response)); + } + + void verifyResponse(String id, GrpcGetByOrganisationsEinheitIdResponse response) { + if (response.getOrganisationsEinheitenCount() > 1) { + throw new MultipleOrganisationsEinheitenException(id); + } + if (response.getOrganisationsEinheitenCount() == 0) { + throw new UnknownOrganisationseinheitException(); + } + } - return mapper.fromGrpc(response.getOrganisationsEinheit()); + private GrpcOrganisationsEinheit getOrganisationEinheit(GrpcGetByOrganisationsEinheitIdResponse response) { + return response.getOrganisationsEinheitenList().getFirst(); } } diff --git a/router/src/main/java/de/ozgcloud/eingang/common/zufi/XzufiId.java b/router/src/main/java/de/ozgcloud/eingang/common/zufi/XzufiId.java new file mode 100644 index 0000000000000000000000000000000000000000..ff731658b7be8e9afbf001627923667b48ec49ab --- /dev/null +++ b/router/src/main/java/de/ozgcloud/eingang/common/zufi/XzufiId.java @@ -0,0 +1,13 @@ +package de.ozgcloud.eingang.common.zufi; + +import lombok.Builder; +import lombok.EqualsAndHashCode; +import lombok.Getter; + +@Builder +@Getter +@EqualsAndHashCode +public class XzufiId { + private String id; + private String schemeAgencyId; +} \ No newline at end of file diff --git a/router/src/main/java/de/ozgcloud/eingang/common/zufi/ZufiService.java b/router/src/main/java/de/ozgcloud/eingang/common/zufi/ZufiService.java index 96e89340a06760396b0bf426249e8c0bcae2d6c6..c015f0e103235651de1c9481edcad4829711f60e 100644 --- a/router/src/main/java/de/ozgcloud/eingang/common/zufi/ZufiService.java +++ b/router/src/main/java/de/ozgcloud/eingang/common/zufi/ZufiService.java @@ -34,6 +34,6 @@ public class ZufiService { private final OrganisationsEinheitRemoteService remoteService; public String getVorgangManagerUrl(String organisationsEinheitId) { - return remoteService.getById(organisationsEinheitId).getVorgangManagerAddress(); + return remoteService.getByOrganisationEinheitId(organisationsEinheitId).getVorgangManagerAddress(); } } \ No newline at end of file diff --git a/router/src/main/java/de/ozgcloud/eingang/router/errorhandling/MultipleOrganisationsEinheitenException.java b/router/src/main/java/de/ozgcloud/eingang/router/errorhandling/MultipleOrganisationsEinheitenException.java new file mode 100644 index 0000000000000000000000000000000000000000..2228d9209d07685f4fd31300719dc6c3ec21f579 --- /dev/null +++ b/router/src/main/java/de/ozgcloud/eingang/router/errorhandling/MultipleOrganisationsEinheitenException.java @@ -0,0 +1,32 @@ +/* + * Copyright (C) 2025 Das Land Schleswig-Holstein vertreten durch den + * Ministerpräsidenten des Landes Schleswig-Holstein + * Staatskanzlei + * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ +package de.ozgcloud.eingang.router.errorhandling; + +public class MultipleOrganisationsEinheitenException extends RuntimeException { + + public MultipleOrganisationsEinheitenException(String organisationEinheitId) { + super("Multiple Organisationseinheiten with Id %s found!".formatted(organisationEinheitId)); + } + +} diff --git a/router/src/test/java/de/ozgcloud/eingang/common/zufi/GrpcGetByOrganisationsEinheitIdRequestTestFactory.java b/router/src/test/java/de/ozgcloud/eingang/common/zufi/GrpcGetByOrganisationsEinheitIdRequestTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..234b90f187e53068fc0973ba4ec93b6978fc7715 --- /dev/null +++ b/router/src/test/java/de/ozgcloud/eingang/common/zufi/GrpcGetByOrganisationsEinheitIdRequestTestFactory.java @@ -0,0 +1,39 @@ +/* + * Copyright (C) 2025 Das Land Schleswig-Holstein vertreten durch den + * Ministerpräsidenten des Landes Schleswig-Holstein + * Staatskanzlei + * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ +package de.ozgcloud.eingang.common.zufi; + +import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcGetByOrganisationsEinheitIdRequest; + +public class GrpcGetByOrganisationsEinheitIdRequestTestFactory { + + private static final String ORGANISATION_EINHEIT_ID = OrganisationsEinheitTestFactory.ID; + + public static GrpcGetByOrganisationsEinheitIdRequest create() { + return createBuilder().build(); + } + + public static GrpcGetByOrganisationsEinheitIdRequest.Builder createBuilder() { + return GrpcGetByOrganisationsEinheitIdRequest.newBuilder().setOrganisationsEinheitId(ORGANISATION_EINHEIT_ID); + } +} diff --git a/router/src/test/java/de/ozgcloud/eingang/common/zufi/GrpcGetByOrganisationsEinheitIdResponseTestFactory.java b/router/src/test/java/de/ozgcloud/eingang/common/zufi/GrpcGetByOrganisationsEinheitIdResponseTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..df5cfb82259d87d33ae0dafa7188c64559d327fa --- /dev/null +++ b/router/src/test/java/de/ozgcloud/eingang/common/zufi/GrpcGetByOrganisationsEinheitIdResponseTestFactory.java @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2025 Das Land Schleswig-Holstein vertreten durch den + * Ministerpräsidenten des Landes Schleswig-Holstein + * Staatskanzlei + * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ +package de.ozgcloud.eingang.common.zufi; + +import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcGetByOrganisationsEinheitIdResponse; +import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcOrganisationsEinheit; + +public class GrpcGetByOrganisationsEinheitIdResponseTestFactory { + + public static final GrpcOrganisationsEinheit ORGANISATIONS_EINHEIT = GrpcOrganisationsEinheitTestFactory.create(); + + public static GrpcGetByOrganisationsEinheitIdResponse create() { + return createBuilder().build(); + } + + public static GrpcGetByOrganisationsEinheitIdResponse.Builder createBuilder() { + return GrpcGetByOrganisationsEinheitIdResponse.newBuilder() + .addOrganisationsEinheiten(ORGANISATIONS_EINHEIT); + } +} \ No newline at end of file diff --git a/router/src/test/java/de/ozgcloud/eingang/common/zufi/GrpcOrganisationsEinheitTestFactory.java b/router/src/test/java/de/ozgcloud/eingang/common/zufi/GrpcOrganisationsEinheitTestFactory.java index c516ccf4d51499a0ee35a31f96bfb6d31074008b..e25de96188593babe78ff89a29f4d44857f0abf6 100644 --- a/router/src/test/java/de/ozgcloud/eingang/common/zufi/GrpcOrganisationsEinheitTestFactory.java +++ b/router/src/test/java/de/ozgcloud/eingang/common/zufi/GrpcOrganisationsEinheitTestFactory.java @@ -24,18 +24,28 @@ package de.ozgcloud.eingang.common.zufi; import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcOrganisationsEinheit; +import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcOrganisationsEinheit.Builder; +import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcXzufiId; public class GrpcOrganisationsEinheitTestFactory { + public static final String ID = OrganisationsEinheitTestFactory.ID; + public static final GrpcXzufiId XZUFI_ID = GrpcXzufiIdTestFactory.create(); + public static final String NAME = OrganisationsEinheitTestFactory.NAME; + public static final String SYNONYME = OrganisationsEinheitTestFactory.SYNONYME; + public static final String VORGANG_MANAGER_ADDRESS = OrganisationsEinheitTestFactory.VORGANG_MANAGER_ADDRESS; + public static GrpcOrganisationsEinheit create() { return createBuilder().build(); } - public static GrpcOrganisationsEinheit.Builder createBuilder() { + public static Builder createBuilder() { return GrpcOrganisationsEinheit.newBuilder() - .setId(OrganisationsEinheitTestFactory.ID) - .setName(OrganisationsEinheitTestFactory.NAME) - .setSynonyme(OrganisationsEinheitTestFactory.SYNONYME) - .setVorgangManagerAddress(OrganisationsEinheitTestFactory.VORGANG_MANAGER_ADDRESS); + .setId(ID) + .setName(NAME) + .setSynonyme(SYNONYME) + .setVorgangManagerAddress(VORGANG_MANAGER_ADDRESS) + .setXzufiId(XZUFI_ID) + .setSynonyme(SYNONYME); } } \ No newline at end of file diff --git a/router/src/test/java/de/ozgcloud/eingang/common/zufi/GrpcXzufiIdTestFactory.java b/router/src/test/java/de/ozgcloud/eingang/common/zufi/GrpcXzufiIdTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..99c8dc0cad1529089e3f0825c0c9a2beda008696 --- /dev/null +++ b/router/src/test/java/de/ozgcloud/eingang/common/zufi/GrpcXzufiIdTestFactory.java @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2025 Das Land Schleswig-Holstein vertreten durch den + * Ministerpräsidenten des Landes Schleswig-Holstein + * Staatskanzlei + * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ +package de.ozgcloud.eingang.common.zufi; + +import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcXzufiId; +import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcXzufiId.Builder; + +public class GrpcXzufiIdTestFactory { + public static final String ORGANISATIONS_EINHEIT_ID = XzufiIdTestFactory.ID; + public static final String SCHEME_AGENCY_ID = XzufiIdTestFactory.SCHEME_AGENCY_ID; + + public static GrpcXzufiId create() { + return createBuilder(ORGANISATIONS_EINHEIT_ID, SCHEME_AGENCY_ID).build(); + } + + public static GrpcXzufiId create(String id, String schemeAgencyId) { + return createBuilder(id, schemeAgencyId).build(); + } + + public static Builder createBuilder(String id, String schemeAgencyId) { + return GrpcXzufiId.newBuilder().setId(id).setSchemeAgencyId(schemeAgencyId); + } +} diff --git a/router/src/test/java/de/ozgcloud/eingang/common/zufi/OrganisationsEinheitMapperTest.java b/router/src/test/java/de/ozgcloud/eingang/common/zufi/OrganisationsEinheitMapperTest.java index 2e4e596a6fa765f98904d9826c73910c6b1c4d70..7cc8008dbbed53a8f7ee2404aa66fab17c35f00a 100644 --- a/router/src/test/java/de/ozgcloud/eingang/common/zufi/OrganisationsEinheitMapperTest.java +++ b/router/src/test/java/de/ozgcloud/eingang/common/zufi/OrganisationsEinheitMapperTest.java @@ -28,8 +28,6 @@ import static org.assertj.core.api.Assertions.*; import org.junit.jupiter.api.Test; import org.mapstruct.factory.Mappers; -import de.ozgcloud.eingang.common.zufi.OrganisationsEinheitMapper; - class OrganisationsEinheitMapperTest { private final OrganisationsEinheitMapper mapper = Mappers.getMapper(OrganisationsEinheitMapper.class); diff --git a/router/src/test/java/de/ozgcloud/eingang/common/zufi/OrganisationsEinheitRemoteServiceTest.java b/router/src/test/java/de/ozgcloud/eingang/common/zufi/OrganisationsEinheitRemoteServiceTest.java index 6c25468db67f5f05a1287c285b204d6d59f948d1..52004608e6e3306a36068f3f66323c1a077f15d6 100644 --- a/router/src/test/java/de/ozgcloud/eingang/common/zufi/OrganisationsEinheitRemoteServiceTest.java +++ b/router/src/test/java/de/ozgcloud/eingang/common/zufi/OrganisationsEinheitRemoteServiceTest.java @@ -24,70 +24,119 @@ package de.ozgcloud.eingang.common.zufi; import static org.assertj.core.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; import org.mockito.InjectMocks; import org.mockito.Mock; +import org.mockito.Spy; -import de.ozgcloud.eingang.common.zufi.OrganisationsEinheit; -import de.ozgcloud.eingang.common.zufi.OrganisationsEinheitMapper; -import de.ozgcloud.eingang.common.zufi.OrganisationsEinheitRemoteService; -import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcOrganisationsEinheitGetRequest; -import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcOrganisationsEinheitGetResponse; +import de.ozgcloud.eingang.router.errorhandling.MultipleOrganisationsEinheitenException; +import de.ozgcloud.eingang.router.errorhandling.UnknownOrganisationseinheitException; +import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcGetByOrganisationsEinheitIdResponse; import de.ozgcloud.zufi.grpc.organisationseinheit.OrganisationsEinheitServiceGrpc.OrganisationsEinheitServiceBlockingStub; class OrganisationsEinheitRemoteServiceTest { @InjectMocks + @Spy private OrganisationsEinheitRemoteService service; @Mock private OrganisationsEinheitServiceBlockingStub stub; @Mock private OrganisationsEinheitMapper mapper; - @DisplayName("Get by id") @Nested - class TestGetById { + class TestGetByOrganisationEinheitId { - private final GrpcOrganisationsEinheitGetResponse response = GrpcOrganisationsEinheitGetResponseTestFactory.create(); + private final GrpcGetByOrganisationsEinheitIdResponse response = GrpcGetByOrganisationsEinheitIdResponseTestFactory.create(); private final OrganisationsEinheit mappedOrganisationsEinheit = OrganisationsEinheitTestFactory.create(); @BeforeEach void mock() { - when(stub.getById(any())).thenReturn(response); + when(stub.getByOrganisationsEinheitId(any())).thenReturn(response); when(mapper.fromGrpc(any())).thenReturn(mappedOrganisationsEinheit); + doNothing().when(service).verifyResponse(any(), any()); } - @Captor - private ArgumentCaptor<GrpcOrganisationsEinheitGetRequest> requestCaptor; - @Test void shouldCallRemoteService() { - service.getById(OrganisationsEinheitTestFactory.ID); + service.getByOrganisationEinheitId(OrganisationsEinheitTestFactory.ID); + + verify(stub).getByOrganisationsEinheitId(GrpcGetByOrganisationsEinheitIdRequestTestFactory.create()); + } - verify(stub).getById(requestCaptor.capture()); - assertThat(requestCaptor.getValue().getId()).isEqualTo(OrganisationsEinheitTestFactory.ID); + @Test + void shouldCallVerifyResponse() { + service.getByOrganisationEinheitId(OrganisationsEinheitTestFactory.ID); + + verify(service).verifyResponse(OrganisationsEinheitTestFactory.ID, response); } @Test - void shouldCallMapper() { - service.getById(OrganisationsEinheitTestFactory.ID); + void shouldCallMapperAfterVerifyingResponse() { + var order = inOrder(service, mapper); + + service.getByOrganisationEinheitId(OrganisationsEinheitTestFactory.ID); - verify(mapper).fromGrpc(response.getOrganisationsEinheit()); + order.verify(service).verifyResponse(any(), any()); + order.verify(mapper).fromGrpc(GrpcGetByOrganisationsEinheitIdResponseTestFactory.ORGANISATIONS_EINHEIT); } @Test - void shouldReturnValue() { - var organisationsEinheit = service.getById(OrganisationsEinheitTestFactory.ID); + void shouldReturnMappedOrganisationsEinheit() { + var organisationsEinheit = service.getByOrganisationEinheitId(OrganisationsEinheitTestFactory.ID); assertThat(organisationsEinheit).isEqualTo(mappedOrganisationsEinheit); } } -} + + @Nested + class TestVerifyResponse { + + @Nested + class TestOnMultipleOrganisationEinheitFound { + + @Test + void shouldThrowMultipleOrganisationsEinheitenException() { + var response = GrpcGetByOrganisationsEinheitIdResponseTestFactory.createBuilder() + .addOrganisationsEinheiten(GrpcOrganisationsEinheitTestFactory.create()) + .build(); + + assertThatExceptionOfType(MultipleOrganisationsEinheitenException.class) + .isThrownBy(() -> service.verifyResponse(OrganisationsEinheitTestFactory.ID, response)); + + } + } + + @Nested + class TestOnNoOrganisationEinheitFound { + + @Test + void shouldThrowUnknownOrganisationseinheitException() { + var response = GrpcGetByOrganisationsEinheitIdResponseTestFactory.createBuilder() + .clearOrganisationsEinheiten() + .build(); + + assertThatExceptionOfType(UnknownOrganisationseinheitException.class) + .isThrownBy(() -> service.verifyResponse(OrganisationsEinheitTestFactory.ID, response)); + + } + } + + @Nested + class TestOnSingleOrganisationEinheitFound { + + @Test + void shouldNotThrowException() { + var response = GrpcGetByOrganisationsEinheitIdResponseTestFactory.create(); + + assertDoesNotThrow(() -> service.verifyResponse(OrganisationsEinheitTestFactory.ID, response)); + } + } + } +} \ No newline at end of file diff --git a/router/src/test/java/de/ozgcloud/eingang/common/zufi/OrganisationsEinheitTestFactory.java b/router/src/test/java/de/ozgcloud/eingang/common/zufi/OrganisationsEinheitTestFactory.java index 060811d88023c66ed6cf1f389f28d64c6a27d3bd..cc14d84a5b01e9dd91c30e6736e7e823a0a89c4e 100644 --- a/router/src/test/java/de/ozgcloud/eingang/common/zufi/OrganisationsEinheitTestFactory.java +++ b/router/src/test/java/de/ozgcloud/eingang/common/zufi/OrganisationsEinheitTestFactory.java @@ -27,14 +27,13 @@ import java.util.UUID; import com.thedeanda.lorem.LoremIpsum; -import de.ozgcloud.eingang.common.zufi.OrganisationsEinheit; - public class OrganisationsEinheitTestFactory { - public final static String ID = UUID.randomUUID().toString(); - public final static String NAME = LoremIpsum.getInstance().getName(); - public final static String SYNONYME = LoremIpsum.getInstance().getName(); - public final static String VORGANG_MANAGER_ADDRESS = LoremIpsum.getInstance().getUrl(); + public static final XzufiId XZUFI_ID = XzufiIdTestFactory.create(); + public static final String ID = UUID.randomUUID().toString(); + public static final String NAME = LoremIpsum.getInstance().getName(); + public static final String SYNONYME = LoremIpsum.getInstance().getName(); + public static final String VORGANG_MANAGER_ADDRESS = LoremIpsum.getInstance().getUrl(); public static OrganisationsEinheit create() { return createBuilder().build(); @@ -45,6 +44,7 @@ public class OrganisationsEinheitTestFactory { .id(ID) .name(NAME) .synonyme(SYNONYME) - .vorgangManagerAddress(VORGANG_MANAGER_ADDRESS); + .vorgangManagerAddress(VORGANG_MANAGER_ADDRESS) + .xzufiId(XZUFI_ID); } } \ No newline at end of file diff --git a/router/src/test/java/de/ozgcloud/eingang/common/zufi/GrpcOrganisationsEinheitGetResponseTestFactory.java b/router/src/test/java/de/ozgcloud/eingang/common/zufi/XzufiIdTestFactory.java similarity index 64% rename from router/src/test/java/de/ozgcloud/eingang/common/zufi/GrpcOrganisationsEinheitGetResponseTestFactory.java rename to router/src/test/java/de/ozgcloud/eingang/common/zufi/XzufiIdTestFactory.java index d74aa9d398b0c800acfa2009da880913d5eb0983..7aa7d29cbe9a44cc745e7d4219d74ad57e6ef9fb 100644 --- a/router/src/test/java/de/ozgcloud/eingang/common/zufi/GrpcOrganisationsEinheitGetResponseTestFactory.java +++ b/router/src/test/java/de/ozgcloud/eingang/common/zufi/XzufiIdTestFactory.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den + * Copyright (C) 2025 Das Land Schleswig-Holstein vertreten durch den * Ministerpräsidenten des Landes Schleswig-Holstein * Staatskanzlei * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung @@ -23,16 +23,26 @@ */ package de.ozgcloud.eingang.common.zufi; -import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcOrganisationsEinheitGetResponse; +import java.util.UUID; -public class GrpcOrganisationsEinheitGetResponseTestFactory { +public class XzufiIdTestFactory { - public static GrpcOrganisationsEinheitGetResponse create() { + public static final String ID = UUID.randomUUID().toString(); + public static final String SCHEME_AGENCY_ID = UUID.randomUUID().toString(); + + public static XzufiId create() { return createBuilder().build(); } - public static GrpcOrganisationsEinheitGetResponse.Builder createBuilder() { - return GrpcOrganisationsEinheitGetResponse.newBuilder() - .setOrganisationsEinheit(GrpcOrganisationsEinheitTestFactory.create()); + public static XzufiId createWithId(String id) { + return createBuilder() + .id(id) + .build(); + } + + public static XzufiId.XzufiIdBuilder createBuilder() { + return XzufiId.builder() + .id(ID) + .schemeAgencyId(SCHEME_AGENCY_ID); } -} \ No newline at end of file +} diff --git a/router/src/test/java/de/ozgcloud/eingang/common/zufi/ZufiServiceTest.java b/router/src/test/java/de/ozgcloud/eingang/common/zufi/ZufiServiceTest.java index c89a22966a1fd9a17d62520ebdbb95baf455f1eb..5348135ee17331be2a0c0694e73527e691832317 100644 --- a/router/src/test/java/de/ozgcloud/eingang/common/zufi/ZufiServiceTest.java +++ b/router/src/test/java/de/ozgcloud/eingang/common/zufi/ZufiServiceTest.java @@ -49,14 +49,14 @@ class ZufiServiceTest { @BeforeEach void mock() { - when(remoteService.getById(any())).thenReturn(organisationsEinheit); + when(remoteService.getByOrganisationEinheitId(any())).thenReturn(organisationsEinheit); } @Test void shouldCallRemoteService() { service.getVorgangManagerUrl(OrganisationsEinheitTestFactory.ID); - verify(remoteService).getById(OrganisationsEinheitTestFactory.ID); + verify(remoteService).getByOrganisationEinheitId(OrganisationsEinheitTestFactory.ID); } @Test