diff --git a/forwarder/pom.xml b/forwarder/pom.xml index 8e11aac68cb31e2265202b09a8cef1a841d69293..c094433354d532b54e8d00623e939137184eebf8 100644 --- a/forwarder/pom.xml +++ b/forwarder/pom.xml @@ -86,6 +86,12 @@ <artifactId>lombok</artifactId> </dependency> + <!-- Test --> + <dependency> + <groupId>de.ozgcloud.eingang</groupId> + <artifactId>common</artifactId> + <type>test-jar</type> + </dependency> </dependencies> <build> diff --git a/forwarder/src/main/java/de/ozgcloud/eingang/forwarder/RouteCriteria.java b/forwarder/src/main/java/de/ozgcloud/eingang/forwarder/RouteCriteria.java index b52e416dd52104bc590d4e2f309fdc44660a93bb..3a36486c9255210293fa91e4c8ae7fa60a849f7f 100644 --- a/forwarder/src/main/java/de/ozgcloud/eingang/forwarder/RouteCriteria.java +++ b/forwarder/src/main/java/de/ozgcloud/eingang/forwarder/RouteCriteria.java @@ -34,5 +34,5 @@ public class RouteCriteria { private Optional<String> gemeindeSchluessel; private Optional<String> webserviceUrl; - private Optional<String> organisationseinheitenId; + private Optional<String> organisationEinheitId; } diff --git a/forwarder/src/main/java/de/ozgcloud/eingang/forwarder/RouteCriteriaMapper.java b/forwarder/src/main/java/de/ozgcloud/eingang/forwarder/RouteCriteriaMapper.java index d82fbd76b46f70c91d4fb175a0c69d42e2b2fb9d..7fcb6cea6b4b70b8b785e331dfbf7ecb5d2f67ed 100644 --- a/forwarder/src/main/java/de/ozgcloud/eingang/forwarder/RouteCriteriaMapper.java +++ b/forwarder/src/main/java/de/ozgcloud/eingang/forwarder/RouteCriteriaMapper.java @@ -27,12 +27,14 @@ import java.util.Optional; import org.apache.commons.lang3.StringUtils; import org.mapstruct.Mapper; +import org.mapstruct.Mapping; import de.ozgcloud.eingang.forwarding.GrpcRouteCriteria; @Mapper interface RouteCriteriaMapper { + @Mapping(target = "organisationEinheitId", source = "organisationseinheitenId") RouteCriteria fromGrpc(GrpcRouteCriteria grpcRouteCriteria); default Optional<String> wrapWithOptional(String val) { diff --git a/forwarder/src/main/java/de/ozgcloud/eingang/forwarder/RouteForwardingGrpcService.java b/forwarder/src/main/java/de/ozgcloud/eingang/forwarder/RouteForwardingGrpcService.java index fa9c9d99a6ccb8c303eba891c60770b89daf35ce..6827f8839442ed30148f26dc2f09926d42161d5a 100644 --- a/forwarder/src/main/java/de/ozgcloud/eingang/forwarder/RouteForwardingGrpcService.java +++ b/forwarder/src/main/java/de/ozgcloud/eingang/forwarder/RouteForwardingGrpcService.java @@ -23,24 +23,21 @@ */ package de.ozgcloud.eingang.forwarder; -import org.springframework.beans.factory.annotation.Autowired; - import de.ozgcloud.eingang.forwarding.GrpcRouteForwardingRequest; import de.ozgcloud.eingang.forwarding.GrpcRouteForwardingResponse; import de.ozgcloud.eingang.router.GrpcEingangMapper; import io.grpc.stub.StreamObserver; +import lombok.RequiredArgsConstructor; import net.devh.boot.grpc.server.service.GrpcService; @GrpcService +@RequiredArgsConstructor public class RouteForwardingGrpcService extends RouteForwardingServiceGrpc.RouteForwardingServiceImplBase { - @Autowired - private RouteForwardingService service; - @Autowired - private RouteCriteriaMapper criteriaMapper; + private final RouteForwardingService service; + private final RouteCriteriaMapper criteriaMapper; - @Autowired - private GrpcEingangMapper eingangMapper; + private final GrpcEingangMapper eingangMapper; @Override public void routeForwarding(GrpcRouteForwardingRequest request, StreamObserver<GrpcRouteForwardingResponse> responseObserver) { diff --git a/forwarder/src/main/java/de/ozgcloud/eingang/forwarder/RouteForwardingService.java b/forwarder/src/main/java/de/ozgcloud/eingang/forwarder/RouteForwardingService.java index 0079be1be32bbe6c4d23ba12f491acb126840c9f..8df1ca5ae4f4ea07eae7e718ad021ebc9582352c 100644 --- a/forwarder/src/main/java/de/ozgcloud/eingang/forwarder/RouteForwardingService.java +++ b/forwarder/src/main/java/de/ozgcloud/eingang/forwarder/RouteForwardingService.java @@ -26,11 +26,23 @@ package de.ozgcloud.eingang.forwarder; import org.springframework.stereotype.Service; import de.ozgcloud.eingang.common.formdata.FormData; +import de.ozgcloud.eingang.common.formdata.ZustaendigeStelle; +import de.ozgcloud.eingang.router.VorgangService; +import lombok.RequiredArgsConstructor; @Service +@RequiredArgsConstructor class RouteForwardingService { + private final VorgangService vorgangService; + public void route(RouteCriteria criteria, FormData formData) { -//FIXME implement me + vorgangService.createVorgang(formData.toBuilder() + .clearZustaendigeStelles() + .zustaendigeStelle(ZustaendigeStelle.builder() + .organisationseinheitenId(criteria.getOrganisationEinheitId() + .orElseThrow(() -> new UnsupportedOperationException("OrganisationseinheitId is required!"))) + .build()) + .build()); } } diff --git a/forwarder/src/test/java/de/ozgcloud/eingang/forwarder/RouteCriteriaTestFactory.java b/forwarder/src/test/java/de/ozgcloud/eingang/forwarder/RouteCriteriaTestFactory.java index f5b8c2742f66a3ac5119e5f1965e8751f3655c9b..82a9dc490effa49a4ca04da8e6b7d296f3da72d8 100644 --- a/forwarder/src/test/java/de/ozgcloud/eingang/forwarder/RouteCriteriaTestFactory.java +++ b/forwarder/src/test/java/de/ozgcloud/eingang/forwarder/RouteCriteriaTestFactory.java @@ -31,7 +31,7 @@ public class RouteCriteriaTestFactory { public static final String GEMEINDE_SCHLUSSEL = "0815"; public static final String WEBSERVICE_URL = "http://nimmerland.by.kop-cloud.de/ws"; - public static final String ORGANISATIONSEINHEITEN_ID = "4711"; + public static final String ORGANISATION_EINHEIT_ID = "4711"; public static RouteCriteria create() { return createBuilder().build(); @@ -41,7 +41,7 @@ public class RouteCriteriaTestFactory { return RouteCriteria.builder() .gemeindeSchluessel(Optional.of(GEMEINDE_SCHLUSSEL)) .webserviceUrl(Optional.of(WEBSERVICE_URL)) - .organisationseinheitenId(Optional.of(ORGANISATIONSEINHEITEN_ID)); + .organisationEinheitId(Optional.of(ORGANISATION_EINHEIT_ID)); } public static GrpcRouteCriteria createGrpc() { @@ -52,6 +52,6 @@ public class RouteCriteriaTestFactory { return GrpcRouteCriteria.newBuilder() .setGemeindeSchluessel(GEMEINDE_SCHLUSSEL) .setWebserviceUrl(WEBSERVICE_URL) - .setOrganisationseinheitenId(ORGANISATIONSEINHEITEN_ID); + .setOrganisationseinheitenId(ORGANISATION_EINHEIT_ID); } } diff --git a/forwarder/src/test/java/de/ozgcloud/eingang/forwarder/RouteForwardingServiceTest.java b/forwarder/src/test/java/de/ozgcloud/eingang/forwarder/RouteForwardingServiceTest.java new file mode 100644 index 0000000000000000000000000000000000000000..e4c711fbc6b9ae53e3ff4b530541ee70d10418fa --- /dev/null +++ b/forwarder/src/test/java/de/ozgcloud/eingang/forwarder/RouteForwardingServiceTest.java @@ -0,0 +1,66 @@ +package de.ozgcloud.eingang.forwarder; + +import static org.assertj.core.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +import java.util.Optional; + +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 de.ozgcloud.eingang.common.formdata.FormData; +import de.ozgcloud.eingang.common.formdata.FormDataTestFactory; +import de.ozgcloud.eingang.common.formdata.ZustaendigeStelle; +import de.ozgcloud.eingang.router.VorgangService; + +class RouteForwardingServiceTest { + + @InjectMocks + private RouteForwardingService routeForwardingService; + @Mock + private VorgangService vorgangService; + @Captor + private ArgumentCaptor<FormData> formDataCaptor; + + @Nested + class TestRoute { + + private final FormData formData = FormDataTestFactory.create(); + + @Test + void shouldCallVorgangService() { + var criteria = RouteCriteriaTestFactory.create(); + + routeForwardingService.route(criteria, formData); + + verify(vorgangService).createVorgang(formDataCaptor.capture()); + assertThat(formDataCaptor.getValue()).usingRecursiveComparison().ignoringFields("zustaendigeStelles").isEqualTo(formData); + } + + @Test + void shouldSetOrganisationEinheitIdInFormData() { + var criteria = RouteCriteriaTestFactory.create(); + var expectedZustaendigeStelle = ZustaendigeStelle.builder() + .organisationseinheitenId(RouteCriteriaTestFactory.ORGANISATION_EINHEIT_ID) + .build(); + + routeForwardingService.route(criteria, formData); + + verify(vorgangService).createVorgang(formDataCaptor.capture()); + assertThat(formDataCaptor.getValue().getZustaendigeStelles()).usingRecursiveFieldByFieldElementComparator() + .containsExactly(expectedZustaendigeStelle); + } + + @Test + void shouldThrowUnsupportedOperationException() { + var criteria = RouteCriteriaTestFactory.createBuilder().organisationEinheitId(Optional.empty()).build(); + + assertThrows(UnsupportedOperationException.class, () -> routeForwardingService.route(criteria, formData)); + } + } +}