diff --git a/formcycle-adapter/formcycle-adapter-impl/src/main/java/de/ozgcloud/eingang/formcycle/FormCycleServiceKontoMapper.java b/formcycle-adapter/formcycle-adapter-impl/src/main/java/de/ozgcloud/eingang/formcycle/FormCycleServiceKontoMapper.java index 7a994654aa92623602939a067f5a6155b6b45354..3aceb97490468096ade62e9803525e90f0cf8a03 100644 --- a/formcycle-adapter/formcycle-adapter-impl/src/main/java/de/ozgcloud/eingang/formcycle/FormCycleServiceKontoMapper.java +++ b/formcycle-adapter/formcycle-adapter-impl/src/main/java/de/ozgcloud/eingang/formcycle/FormCycleServiceKontoMapper.java @@ -1,32 +1,38 @@ package de.ozgcloud.eingang.formcycle; +import java.util.Collections; +import java.util.List; + import org.apache.commons.lang3.StringUtils; -import org.springframework.stereotype.Component; +import org.mapstruct.CollectionMappingStrategy; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.ReportingPolicy; import de.ozgcloud.eingang.common.formdata.ServiceKonto; import de.ozgcloud.eingang.common.formdata.ServiceKonto.PostfachAddress; import de.ozgcloud.eingang.common.formdata.StringBasedIdentifier; -@Component -class FormCycleServiceKontoMapper { +@Mapper(collectionMappingStrategy = CollectionMappingStrategy.ADDER_PREFERRED, unmappedTargetPolicy = ReportingPolicy.WARN) +interface FormCycleServiceKontoMapper { + + @Mapping(target = "postfachAddress", ignore = true) + @Mapping(target = "postfachAddresses", expression = "java(fromGrpcPostfachAddresses(serviceKonto))") + ServiceKonto fromGrpc(FormCycleServiceKonto serviceKonto); - public ServiceKonto fromGrpc(FormCycleServiceKonto serviceKonto) { - return ServiceKonto.builder() - .type(serviceKonto.getType()) - .postfachAddress(buildPostfachAddress(serviceKonto)) - .trustLevel(StringUtils.trimToNull(serviceKonto.getTrustLevel())) - .build(); + default String fromString(String str) { + return StringUtils.trimToNull(str); } - PostfachAddress buildPostfachAddress(FormCycleServiceKonto serviceKonto) { - if (!serviceKonto.hasAddress()) { - return null; - } - var address = serviceKonto.getAddress(); - return PostfachAddress.builder().identifier(buildPostfachId(address.getIdentifier())).version(address.getVersion()).build(); + default List<PostfachAddress> fromGrpcPostfachAddresses(FormCycleServiceKonto serviceKonto) { + return serviceKonto.hasAddress() ? List.of(fromGrpc(serviceKonto.getAddress())) : Collections.emptyList(); } - private StringBasedIdentifier buildPostfachId(String identifier) { + @Mapping(target = "type", ignore = true) + @Mapping(target = "identifier", expression = "java(buildIdentifier(postfachAddress.getIdentifier()))") + PostfachAddress fromGrpc(FormCyclePostfachAddress postfachAddress); + + default StringBasedIdentifier buildIdentifier(String identifier) { return StringBasedIdentifier.builder().postfachId(identifier).build(); } } \ No newline at end of file diff --git a/formcycle-adapter/formcycle-adapter-impl/src/test/java/de/ozgcloud/eingang/formcycle/FormCycleServiceKontoMapperTest.java b/formcycle-adapter/formcycle-adapter-impl/src/test/java/de/ozgcloud/eingang/formcycle/FormCycleServiceKontoMapperTest.java index dd44600b8589f52baf63a56d1a337191bb863da0..b328284eb6b3ab4fdf010dd4240d4726ebd13209 100644 --- a/formcycle-adapter/formcycle-adapter-impl/src/test/java/de/ozgcloud/eingang/formcycle/FormCycleServiceKontoMapperTest.java +++ b/formcycle-adapter/formcycle-adapter-impl/src/test/java/de/ozgcloud/eingang/formcycle/FormCycleServiceKontoMapperTest.java @@ -6,7 +6,7 @@ import org.apache.commons.lang3.StringUtils; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; -import org.mockito.Spy; +import org.mapstruct.factory.Mappers; import de.ozgcloud.eingang.common.formdata.ServiceKonto.PostfachAddress; import de.ozgcloud.eingang.common.formdata.ServiceKontoTestFactory; @@ -14,12 +14,11 @@ import de.ozgcloud.eingang.common.formdata.StringBasedIdentifier; class FormCycleServiceKontoMapperTest { - @Spy - private FormCycleServiceKontoMapper mapper; + private final FormCycleServiceKontoMapper mapper = Mappers.getMapper(FormCycleServiceKontoMapper.class); - @DisplayName("From grpc") + @DisplayName("From grpc serviceKonto") @Nested - class TestFromGrpc { + class TestFromGrpcServiceKonto { @DisplayName("trustLevel") @Nested @@ -42,28 +41,28 @@ class FormCycleServiceKontoMapperTest { } } - @DisplayName("build postfacha address") + @Test + void shouldNotPostfachAddressIfNotExists() { + var serviceKonto = mapper.fromGrpc(FormCycleServiceKontoTestFactory.createBuilder().clearAddress().build()); + + assertThat(serviceKonto.getPostfachAddresses()).isEmpty(); + } + + @DisplayName("postfachAddress") @Nested - class TestBuildPostfachAddress { + class TestPostfachAddress { @Test void shouldMapPostkorbId() { - var postfachAddress = mapper.buildPostfachAddress(FormCycleServiceKontoTestFactory.create()); + var postfachAddress = mapPostfachAddressFromGrpc(); assertThat(((StringBasedIdentifier) postfachAddress.getIdentifier()).getPostfachId()) .isEqualTo(FormCyclePostfachAddressTestFactory.POSTKORB_ID); } @Test - void shouldNotMapEmptyPostkorbId() { - var postfachAddress = mapper.buildPostfachAddress(FormCycleServiceKonto.newBuilder().build()); - - assertThat(postfachAddress).isNull(); - } - - @Test - void shouldMapPostfachIdentifier() { - var postfachAddress = mapper.buildPostfachAddress(FormCycleServiceKontoTestFactory.create()); + void shouldMapIdentifier() { + var postfachAddress = mapPostfachAddressFromGrpc(); assertThat(getIdentifier(postfachAddress)).isEqualTo(FormCyclePostfachAddressTestFactory.POSTKORB_ID); } @@ -73,11 +72,15 @@ class FormCycleServiceKontoMapperTest { } @Test - void shouldMapPostfachAddressVersion() { - var postfachAddress = mapper.buildPostfachAddress(FormCycleServiceKontoTestFactory.create()); + void shouldMapVersion() { + var postfachAddress = mapPostfachAddressFromGrpc(); assertThat(postfachAddress.getVersion()).isEqualTo(FormCyclePostfachAddressTestFactory.VERSION); } + + private PostfachAddress mapPostfachAddressFromGrpc() { + return mapper.fromGrpc(FormCycleServiceKontoTestFactory.create()).getPostfachAddresses().get(0); + } } } } \ No newline at end of file diff --git a/formcycle-adapter/formcycle-adapter-impl/src/test/java/de/ozgcloud/eingang/formcycle/FormDataControllerTest.java b/formcycle-adapter/formcycle-adapter-impl/src/test/java/de/ozgcloud/eingang/formcycle/FormDataControllerTest.java index 4bce56df988633d787ccf865dafbf2bf3dcaba3b..2f8f6281405178875f7058247764e7a59cf06151 100644 --- a/formcycle-adapter/formcycle-adapter-impl/src/test/java/de/ozgcloud/eingang/formcycle/FormDataControllerTest.java +++ b/formcycle-adapter/formcycle-adapter-impl/src/test/java/de/ozgcloud/eingang/formcycle/FormDataControllerTest.java @@ -346,9 +346,4 @@ class FormDataControllerTest { return FormData.builder().header(FormHeader.builder().build()).build(); } } - -// private String getPostfachIdFormData(FormData formData) { -// return ((StringBasedIdentifier) formData.getHeader().getServiceKonto().getPostfachAddresses() -// .get(0).getIdentifier()).getPostfachId(); -// } } \ No newline at end of file