diff --git a/common/src/test/java/de/ozgcloud/eingang/common/formdata/AntragstellerTestFactory.java b/common/src/test/java/de/ozgcloud/eingang/common/formdata/AntragstellerTestFactory.java index 4418a4fc7c3c59a0ee27516a4ad6f536a77bf22a..acb3f7384ec445591ad3da3f63f43aef9d6659f1 100644 --- a/common/src/test/java/de/ozgcloud/eingang/common/formdata/AntragstellerTestFactory.java +++ b/common/src/test/java/de/ozgcloud/eingang/common/formdata/AntragstellerTestFactory.java @@ -38,6 +38,9 @@ public class AntragstellerTestFactory { public static final String SUB_VERBOTENE_VEREINIGUNG_KEY = "MitgliedschaftInVerboternerVereinigung"; public static final String SUB_VERBOTENE_VEREINIGUNG_VALUE = "true"; + public static final Map<String, Object> DATA = Map.of(GEBIET_BEZEICHNUNG_KEY, GEBIET_BEZEICHNUNG_VALUE, + SUB_PERSOENLICHE_EIGNUNG, Map.of(SUB_VERBOTENE_VEREINIGUNG_KEY, SUB_VERBOTENE_VEREINIGUNG_VALUE)); + public static final String VORNAME = "Theo"; public static final String NACHNAME = "Test"; public static final String GEBURTSNAME = "Toast"; @@ -82,8 +85,6 @@ public class AntragstellerTestFactory { .plz(PLZ) .ort(ORT) .postfachId(POSTFACH_ID) - .data(Map.of(GEBIET_BEZEICHNUNG_KEY, GEBIET_BEZEICHNUNG_VALUE, - SUB_PERSOENLICHE_EIGNUNG, - Map.of(SUB_VERBOTENE_VEREINIGUNG_KEY, SUB_VERBOTENE_VEREINIGUNG_VALUE))); + .data(DATA); } } diff --git a/common/src/test/java/de/ozgcloud/eingang/common/formdata/FormDataTestFactory.java b/common/src/test/java/de/ozgcloud/eingang/common/formdata/FormDataTestFactory.java index 1c5ceaddf1b27323ff33316cb7328533eb904a96..94f756da0ce48a1286e5483afaec6928bb0ca43c 100644 --- a/common/src/test/java/de/ozgcloud/eingang/common/formdata/FormDataTestFactory.java +++ b/common/src/test/java/de/ozgcloud/eingang/common/formdata/FormDataTestFactory.java @@ -28,6 +28,7 @@ import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.UUID; import de.ozgcloud.eingang.common.formdata.FormData.FormDataControl; import lombok.AccessLevel; @@ -36,6 +37,7 @@ import lombok.NoArgsConstructor; @NoArgsConstructor(access = AccessLevel.PRIVATE) public class FormDataTestFactory { + public static final String ID = UUID.randomUUID().toString(); public static final String SIMPLE_VALUE_KEY = "kontaktsystemtypid"; public static final String SIMPLE_VALUE = "233034600"; @@ -54,12 +56,9 @@ public class FormDataTestFactory { public static final Map<String, Object> NESTED_LIST_OBJECTS_ELEMENT_2 = Map.of("o3", "o4"); public static final List<Map<String, Object>> NESTED_LIST_WITH_OBJECTS = List.of(NESTED_LIST_OBJECTS_ELEMENT_1, NESTED_LIST_OBJECTS_ELEMENT_2); - public static final String ATTACHMENT_GROUP_2 = "FileGroup2"; - public static final String VORGANG_ID = "vorgangId"; - public static final List<IncomingFileGroup> ATTACHMENTS = List.of(IncomingFileGroupTestFactory.create(), - IncomingFileGroupTestFactory.createBuilder().name(ATTACHMENT_GROUP_2).build()); + public static final List<IncomingFileGroup> ATTACHMENTS = List.of(IncomingFileGroupTestFactory.create()); public static final List<IncomingFile> REPRESENTATIONS = List.of(IncomingFileTestFactory.create()); public static final FormDataControl FORM_DATA_CONTROL = FormDataControlTestFactory.create(); @@ -76,17 +75,15 @@ public class FormDataTestFactory { public static FormData.FormDataBuilder createBuilder() { return FormData.builder() + .id(ID) .header(FormHeaderTestFactory.create()) .antragsteller(AntragstellerTestFactory.create()) .zustaendigeStelle(ZustaendigeStelleTestFactory.create()) .control(FORM_DATA_CONTROL) .formData(FORM_DATA) - // TODO nach entfernen des zweiten Attachments den Wert auf 1 setzen - .numberOfAttachments(2) - // TODO zweites Attachment aus der TestFactory entfernen und die entsprechenden - // Tests anpassen + .numberOfAttachments(ATTACHMENTS.size()) .attachments(ATTACHMENTS) - .numberOfRepresentations(1) + .numberOfRepresentations(REPRESENTATIONS.size()) .representations(REPRESENTATIONS); } diff --git a/common/src/test/java/de/ozgcloud/eingang/common/formdata/PostfachAddressTestFactory.java b/common/src/test/java/de/ozgcloud/eingang/common/formdata/PostfachAddressTestFactory.java index 0e3e2a2816168331b48355740403339c9ffe72ec..a7d2fa3ceaa6c4dc68888be3ec6f5450135b22e4 100644 --- a/common/src/test/java/de/ozgcloud/eingang/common/formdata/PostfachAddressTestFactory.java +++ b/common/src/test/java/de/ozgcloud/eingang/common/formdata/PostfachAddressTestFactory.java @@ -25,11 +25,13 @@ package de.ozgcloud.eingang.common.formdata; import java.util.UUID; +import org.apache.commons.lang3.RandomUtils; + import de.ozgcloud.eingang.common.formdata.ServiceKonto.PostfachAddress; public class PostfachAddressTestFactory { - public static final int POSTFACH_ADDRESS_TYPE = 1; + public static final int POSTFACH_ADDRESS_TYPE = RandomUtils.insecure().randomInt(); public static final String VERSION = "1.0"; public static final String POSTFACH_ID = UUID.randomUUID().toString(); diff --git a/common/src/test/java/de/ozgcloud/eingang/common/formdata/ZustaendigeStelleTestFactory.java b/common/src/test/java/de/ozgcloud/eingang/common/formdata/ZustaendigeStelleTestFactory.java index 5b14fe2d568bb8af1acdd96dbbf2972fac3aa101..34adca8f00a4b850f5b0907ded56566c58d34056 100644 --- a/common/src/test/java/de/ozgcloud/eingang/common/formdata/ZustaendigeStelleTestFactory.java +++ b/common/src/test/java/de/ozgcloud/eingang/common/formdata/ZustaendigeStelleTestFactory.java @@ -23,6 +23,8 @@ */ package de.ozgcloud.eingang.common.formdata; +import com.thedeanda.lorem.LoremIpsum; + public class ZustaendigeStelleTestFactory { public static final String ORGANISATIONSEINHEIT_ID = "08150815"; @@ -33,6 +35,7 @@ public class ZustaendigeStelleTestFactory { public static final String HAUSANSCHRIFT_PLZ = "12345"; public static final String HAUSANSCHRIFT_ORT = "Musterort"; public static final String TELEFON = "0123456789"; + public static final String BEZEICHNUNG = LoremIpsum.getInstance().getWords(5); public static ZustaendigeStelle create() { return createBuilder().build(); @@ -42,6 +45,7 @@ public class ZustaendigeStelleTestFactory { return ZustaendigeStelle.builder() // .organisationseinheitenId(ORGANISATIONSEINHEIT_ID) .email(EMAIL) + .bezeichnung(BEZEICHNUNG) .gemeindeSchluessel(GEMEINDE_SCHLUESSEL) .amtlicherRegionalSchluessel(AMTLICHER_REGIONAL_SCHLUESSEL) .hausanschriftStrasse(HAUSANSCHRIFT_STRASSE) diff --git a/router/src/main/java/de/ozgcloud/eingang/router/GrpcEingangMapper.java b/router/src/main/java/de/ozgcloud/eingang/router/GrpcEingangMapper.java index eb5d7c414ef8361bfcc348e1f2544a563ce853a5..382c5975200356670f943920df8f6a191fcb8a3b 100644 --- a/router/src/main/java/de/ozgcloud/eingang/router/GrpcEingangMapper.java +++ b/router/src/main/java/de/ozgcloud/eingang/router/GrpcEingangMapper.java @@ -44,7 +44,6 @@ import de.ozgcloud.vorgang.vorgang.GrpcIncomingFileGroup; import de.ozgcloud.vorgang.vorgang.GrpcZustaendigeStelle; @Mapper(unmappedTargetPolicy = ReportingPolicy.WARN, // - unmappedSourcePolicy = ReportingPolicy.WARN, // nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE, // nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS, // collectionMappingStrategy = CollectionMappingStrategy.ADDER_PREFERRED, // @@ -59,8 +58,8 @@ public interface GrpcEingangMapper { default ZustaendigeStelle getZustaendigeStelle(FormData formData, Optional<String> organisationsEinheitenId) { return organisationsEinheitenId.flatMap(oeId -> formData.getZustaendigeStelles().stream() - .filter(zustaendigeStelle -> zustaendigeStelle.getOrganisationseinheitenId().equals(oeId)) - .findFirst()) + .filter(zustaendigeStelle -> zustaendigeStelle.getOrganisationseinheitenId().equals(oeId)) + .findFirst()) .orElseGet(() -> ZustaendigeStelle.builder().build()); } @@ -84,13 +83,16 @@ public interface GrpcEingangMapper { return id.toString(); } - // FIXME map representations and attachments @Mapping(target = "attachment", ignore = true) - @Mapping(target = "attachments", ignore = true) @Mapping(target = "representation", ignore = true) - @Mapping(target = "representations", ignore = true) - // TOASK: Wird aktuell nicht gebraucht, trotzdem implementiern? - @Mapping(target = "header.serviceKonto", ignore = true) + @Mapping(target = "zustaendigeStelles", ignore = true) + @Mapping(target = "control", ignore = true) + @Mapping(target = "attachments", source = "attachmentsList") + @Mapping(target = "representations", source = "representationsList") + @Mapping(target = "antragsteller.data", source = "antragsteller.otherData") FormData toFormData(GrpcEingang eingang); + @Mapping(target = "files", source = "filesList") + @Mapping(target = "file", ignore = true) + IncomingFileGroup mapFileGroupFromGrpc(GrpcIncomingFileGroup fileGroup); } diff --git a/router/src/main/java/de/ozgcloud/eingang/router/ServiceKontoMapper.java b/router/src/main/java/de/ozgcloud/eingang/router/ServiceKontoMapper.java index 7986140e79963d3d4183146800211926678fb748..85b8a16857fe3cda1c21ec411888572c6d1e4287 100644 --- a/router/src/main/java/de/ozgcloud/eingang/router/ServiceKontoMapper.java +++ b/router/src/main/java/de/ozgcloud/eingang/router/ServiceKontoMapper.java @@ -23,55 +23,67 @@ */ package de.ozgcloud.eingang.router; -import java.util.List; import java.util.Map; -import java.util.Optional; +import org.apache.commons.collections.MapUtils; +import org.apache.commons.lang3.StringUtils; +import org.mapstruct.CollectionMappingStrategy; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.Named; +import org.mapstruct.NullValueCheckStrategy; +import org.mapstruct.NullValuePropertyMappingStrategy; +import org.mapstruct.ReportingPolicy; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; import de.ozgcloud.eingang.common.formdata.PostfachAddressIdentifier; import de.ozgcloud.eingang.common.formdata.ServiceKonto; import de.ozgcloud.eingang.common.formdata.StringBasedIdentifier; -import de.ozgcloud.eingang.common.formdata.ServiceKonto.PostfachAddress; import de.ozgcloud.vorgang.common.GrpcObject; import de.ozgcloud.vorgang.common.grpc.GrpcObjectMapper; -import de.ozgcloud.vorgang.vorgang.GrpcPostfachAddress; import de.ozgcloud.vorgang.vorgang.GrpcServiceKonto; -@Component -class ServiceKontoMapper { +@Mapper(unmappedTargetPolicy = ReportingPolicy.WARN, // + nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE, // + nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS, // + collectionMappingStrategy = CollectionMappingStrategy.ADDER_PREFERRED, // + uses = { GrpcObjectMapper.class }) +abstract class ServiceKontoMapper { static final String DEFAULT_TRUST_LEVEL = "STORK-QAA-Level-1"; @Autowired private GrpcObjectMapper grpcObjectMapper; - public GrpcServiceKonto toServiceKonto(ServiceKonto serviceKonto) { - return GrpcServiceKonto.newBuilder() - .setType(serviceKonto.getType()) - .addAllPostfachAddresses(getPostfachAddresses(serviceKonto)) - .setTrustLevel(Optional.ofNullable(serviceKonto.getTrustLevel()).orElse(DEFAULT_TRUST_LEVEL)) - .build(); - } + @Mapping(target = "postfachAddressesList", source = "postfachAddresses") + @Mapping(target = "trustLevel", source = "trustLevel", defaultValue = DEFAULT_TRUST_LEVEL) + abstract GrpcServiceKonto toGrpc(ServiceKonto serviceKonto); - private List<GrpcPostfachAddress> getPostfachAddresses(ServiceKonto serviceKonto) { - return serviceKonto.getPostfachAddresses().stream().map(this::fromPostfachAddress).toList(); + GrpcObject mapFromIdentifier(PostfachAddressIdentifier identifier) { + return grpcObjectMapper.fromMap(Map.of(StringBasedIdentifier.POSTFACH_ID_FIELD, + getStringBasedValue(identifier))); } - private GrpcPostfachAddress fromPostfachAddress(PostfachAddress postfachAddress) { - return GrpcPostfachAddress.newBuilder() - .setVersion(postfachAddress.getVersion()) - .setType(postfachAddress.getType()) - .setIdentifier(mapFromIdentifier(postfachAddress.getIdentifier())) - .build(); + String getStringBasedValue(PostfachAddressIdentifier identifier) { + return ((StringBasedIdentifier) identifier).getPostfachId(); } - GrpcObject mapFromIdentifier(PostfachAddressIdentifier identifier) { - return grpcObjectMapper.fromMap(Map.of(StringBasedIdentifier.POSTFACH_ID_FIELD, getStringBasedValue(identifier))); + @Mapping(target = "postfachAddresses", source = "postfachAddressesList") + @Mapping(target = "trustLevel", source = "trustLevel", qualifiedByName = "mapTrustLevel") + @Mapping(target = "postfachAddress", ignore = true) + abstract ServiceKonto fromGrpc(GrpcServiceKonto serviceKonto); + + PostfachAddressIdentifier mapToIdentifier(GrpcObject identifier) { + var stringIdentifier = MapUtils.getString(grpcObjectMapper.mapFromGrpc(identifier), StringBasedIdentifier.POSTFACH_ID_FIELD); + return StringBasedIdentifier.builder().postfachId(stringIdentifier).build(); } - private String getStringBasedValue(PostfachAddressIdentifier identifier) { - return ((StringBasedIdentifier) identifier).getPostfachId(); + @Named("mapTrustLevel") + String mapTrustLevel(String trustLevel) { + if (StringUtils.isEmpty(trustLevel)) { + return DEFAULT_TRUST_LEVEL; + } + return trustLevel; } + } \ No newline at end of file diff --git a/router/src/test/java/de/ozgcloud/eingang/router/GrpcAntragstellerTestFactory.java b/router/src/test/java/de/ozgcloud/eingang/router/GrpcAntragstellerTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..61893f6a7d44353cab89db99eaee1368c8c595ef --- /dev/null +++ b/router/src/test/java/de/ozgcloud/eingang/router/GrpcAntragstellerTestFactory.java @@ -0,0 +1,81 @@ +/* + * 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; + +import de.ozgcloud.eingang.common.formdata.AntragstellerTestFactory; +import de.ozgcloud.vorgang.vorgang.GrpcAntragsteller; +import de.ozgcloud.vorgang.vorgang.GrpcFormData; +import de.ozgcloud.vorgang.vorgang.GrpcFormField; +import de.ozgcloud.vorgang.vorgang.GrpcSubForm; + +public class GrpcAntragstellerTestFactory { + + public static final String ANREDE = AntragstellerTestFactory.ANREDE; + public static final String NACHNAME = AntragstellerTestFactory.NACHNAME; + public static final String VORNAME = AntragstellerTestFactory.VORNAME; + public static final String GEBURTSDATUM = AntragstellerTestFactory.GEBURTSDATUM; + public static final String GEBURTSORT = AntragstellerTestFactory.GEBURTSORT; + public static final String GEBURTSNAME = AntragstellerTestFactory.GEBURTSNAME; + public static final String EMAIL = AntragstellerTestFactory.EMAIL; + public static final String TELEFON = AntragstellerTestFactory.TELEFON; + public static final String STRASSE = AntragstellerTestFactory.STRASSE; + public static final String HAUSNUMMER = AntragstellerTestFactory.HAUSNUMMER; + public static final String PLZ = AntragstellerTestFactory.PLZ; + public static final String ORT = AntragstellerTestFactory.ORT; + + public static final String POSTFACH_ID = AntragstellerTestFactory.POSTFACH_ID; + public static final GrpcFormData OTHER_DATA = GrpcFormData.newBuilder() + .addField(GrpcFormField.newBuilder() + .setName(AntragstellerTestFactory.GEBIET_BEZEICHNUNG_KEY) + .setValue(AntragstellerTestFactory.GEBIET_BEZEICHNUNG_VALUE).build()) + .addForm(GrpcSubForm.newBuilder().setTitle(AntragstellerTestFactory.SUB_PERSOENLICHE_EIGNUNG) + .addField(GrpcFormField.newBuilder() + .setName(AntragstellerTestFactory.SUB_VERBOTENE_VEREINIGUNG_KEY) + .setValue(AntragstellerTestFactory.SUB_VERBOTENE_VEREINIGUNG_VALUE).build()) + .build()) + .build(); + + public static GrpcAntragsteller create() { + return createBuilder().build(); + } + + public static GrpcAntragsteller.Builder createBuilder() { + return GrpcAntragsteller.newBuilder() + .setAnrede(ANREDE) + .setFirmaName(AntragstellerTestFactory.FIRMA_NAME) + .setGeburtsdatum(GEBURTSDATUM) + .setNachname(NACHNAME) + .setVorname(VORNAME) + .setGeburtsname(GEBURTSNAME) + .setGeburtsort(GEBURTSORT) + .setEmail(EMAIL) + .setTelefon(TELEFON) + .setStrasse(STRASSE) + .setHausnummer(HAUSNUMMER) + .setPlz(PLZ) + .setOrt(ORT) + .setPostfachId(POSTFACH_ID) + .setOtherData(OTHER_DATA); + } +} \ No newline at end of file diff --git a/router/src/test/java/de/ozgcloud/eingang/router/GrpcEingangHeaderTestFactory.java b/router/src/test/java/de/ozgcloud/eingang/router/GrpcEingangHeaderTestFactory.java index e7fbc2a6de22ef4cd73d3719433326f517ac0e6a..1c2f14b48549cbf74fa2c97f2a1e2a5890dbde26 100644 --- a/router/src/test/java/de/ozgcloud/eingang/router/GrpcEingangHeaderTestFactory.java +++ b/router/src/test/java/de/ozgcloud/eingang/router/GrpcEingangHeaderTestFactory.java @@ -30,6 +30,8 @@ import de.ozgcloud.vorgang.vorgang.GrpcServiceKonto; public class GrpcEingangHeaderTestFactory { + public static final GrpcServiceKonto SERVICE_KONTO = GrpcServiceKontoTestFactory.create(); + public static GrpcEingangHeader create() { return createBuilder().build(); } @@ -42,7 +44,7 @@ public class GrpcEingangHeaderTestFactory { .setFormEngineName(FORM_ENGINE_NAME) .setFormName(FORM_NAME) .setSender(SENDER) - .setServiceKonto(GrpcServiceKonto.newBuilder().build()) + .setServiceKonto(SERVICE_KONTO) .setVorgangNummer(VORGANG_NUMMER); } } diff --git a/router/src/test/java/de/ozgcloud/eingang/router/GrpcEingangMapperTest.java b/router/src/test/java/de/ozgcloud/eingang/router/GrpcEingangMapperTest.java index 15ee7c6b776beb4fb5a8ff3074b562b44fbf55fd..a262e8c7ace2c54106f613717d21d5f49258574e 100644 --- a/router/src/test/java/de/ozgcloud/eingang/router/GrpcEingangMapperTest.java +++ b/router/src/test/java/de/ozgcloud/eingang/router/GrpcEingangMapperTest.java @@ -40,12 +40,12 @@ import org.mockito.Mock; import de.ozgcloud.eingang.common.formdata.AntragstellerTestFactory; import de.ozgcloud.eingang.common.formdata.FormDataTestFactory; import de.ozgcloud.eingang.common.formdata.IncomingFileTestFactory; +import de.ozgcloud.eingang.common.formdata.ServiceKontoTestFactory; import de.ozgcloud.eingang.common.formdata.ZustaendigeStelleTestFactory; import de.ozgcloud.vorgang.common.grpc.GrpcFormDataMapper; import de.ozgcloud.vorgang.vorgang.GrpcAntragsteller; import de.ozgcloud.vorgang.vorgang.GrpcEingang; import de.ozgcloud.vorgang.vorgang.GrpcFormData; -import de.ozgcloud.vorgang.vorgang.GrpcServiceKonto; import de.ozgcloud.vorgang.vorgang.GrpcZustaendigeStelle; class GrpcEingangMapperTest { @@ -109,7 +109,7 @@ class GrpcEingangMapperTest { void mockMapperReturnValues() { when(grpcFormDataMapper.mapToFormData(anyMap())) .thenReturn(GrpcFormData.newBuilder().addField(GrpcFormFieldTestFactory.create()).build()); - when(serviceKontoMapper.toServiceKonto(any())).thenReturn(GrpcServiceKonto.newBuilder().build()); + when(serviceKontoMapper.toGrpc(any())).thenReturn(GrpcServiceKontoTestFactory.create()); } @Nested @@ -134,14 +134,14 @@ class GrpcEingangMapperTest { void validateNumberOfAttachments() { var eingang = toEingang(); - assertThat(eingang.getNumberOfAttachments()).isEqualTo(2); + assertThat(eingang.getNumberOfAttachments()).isEqualTo(FormDataTestFactory.ATTACHMENTS.size()); } @Test void validateNumberOfAttachmentGroups() { var eingang = toEingang(); - assertThat(eingang.getAttachmentsCount()).isEqualTo(2); + assertThat(eingang.getAttachmentsCount()).isEqualTo(FormDataTestFactory.ATTACHMENTS.size()); } @Test @@ -162,25 +162,6 @@ class GrpcEingangMapperTest { assertThat(attachment.getContentType()).isEqualTo(IncomingFileTestFactory.CONTENT_TYPE); assertThat(attachment.getContent()).isEmpty(); } - - @Test - void validateGroup2AttachmentCount() { - var eingang = toEingang(); - - assertThat(eingang.getAttachmentsList().get(1).getFilesCount()).isEqualTo(1); - } - - @Test - void validateGroup2Attachment() { - var eingang = toEingang(); - - var attachment = eingang.getAttachmentsList().get(1).getFilesList().get(0); - assertThat(attachment.getId()).isEqualTo(IncomingFileTestFactory.ID); - assertThat(attachment.getVendorId()).isEqualTo(IncomingFileTestFactory.VENDOR_ID); - assertThat(attachment.getName()).isEqualTo(IncomingFileTestFactory.NAME); - assertThat(attachment.getContentType()).isEqualTo(IncomingFileTestFactory.CONTENT_TYPE); - assertThat(attachment.getContent()).isEmpty(); - } } @Nested @@ -217,4 +198,87 @@ class GrpcEingangMapperTest { return mapper.toEingang(FormDataTestFactory.create(), Optional.of(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEIT_ID)); } } + + @Nested + class TestToFormData { + + private final GrpcEingang eingang = GrpcEingangTestFactory.create(); + + @BeforeEach + void mock() { + when(serviceKontoMapper.fromGrpc(any())).thenReturn(ServiceKontoTestFactory.create()); + when(grpcFormDataMapper.mapFromFormData(GrpcAntragstellerTestFactory.OTHER_DATA)).thenReturn(AntragstellerTestFactory.DATA); + when(grpcFormDataMapper.mapFromFormData(GrpcEingangTestFactory.FORM_DATA)).thenReturn(FormDataTestFactory.FORM_DATA); + } + + @Test + void shouldCallServiceKontoMapper() { + mapper.toFormData(eingang); + + verify(serviceKontoMapper).fromGrpc(GrpcEingangHeaderTestFactory.SERVICE_KONTO); + } + + @Test + void shouldCallFormDataMapperWithAntragstellerData() { + mapper.toFormData(eingang); + + verify(grpcFormDataMapper).mapFromFormData(GrpcAntragstellerTestFactory.OTHER_DATA); + } + + @Test + void shouldCallFormDataMapperWithFormData() { + mapper.toFormData(eingang); + + verify(grpcFormDataMapper).mapFromFormData(GrpcEingangTestFactory.FORM_DATA); + } + + @Test + void shouldMapToFormData() { + var expectedFormData = FormDataTestFactory.createBuilder() + .numberOfAttachments(GrpcEingangTestFactory.NUMBER_OF_ATTACHMENTS) + .numberOfRepresentations(GrpcEingangTestFactory.NUMBER_OF_REPRESENTATIONS) + .build(); + + var formData = mapper.toFormData(eingang); + + assertThat(formData).usingRecursiveComparison() + .ignoringFields("antragsteller.firmaName", "control", "attachments", "representations", "zustaendigeStelles") + .isEqualTo(expectedFormData); + } + + @Nested + class TestZustaendigestelles { + + @Test + void shouldMapZustaendigeStelles() { + var zustaendigeStelles = mapper.toFormData(eingang).getZustaendigeStelles(); + + assertThat(zustaendigeStelles).usingRecursiveFieldByFieldElementComparator().containsExactly(ZustaendigeStelleTestFactory.create()); + } + } + + @Nested + class TestAttachments { + + @Test + void shouldMapAttachments() { + var attachments = mapper.toFormData(eingang).getAttachments(); + + assertThat(attachments).usingRecursiveFieldByFieldElementComparatorIgnoringFields("files.file") + .containsExactly(FormDataTestFactory.ATTACHMENTS.get(0)); + } + } + + @Nested + class TestRepresentations { + + @Test + void shouldMapRepresentations() { + var representations = mapper.toFormData(eingang).getRepresentations(); + + assertThat(representations).usingRecursiveFieldByFieldElementComparatorIgnoringFields("file") + .containsExactly(FormDataTestFactory.REPRESENTATIONS.get(0)); + } + } + } } \ No newline at end of file diff --git a/router/src/test/java/de/ozgcloud/eingang/router/GrpcEingangTestFactory.java b/router/src/test/java/de/ozgcloud/eingang/router/GrpcEingangTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..8e15b541a6356f7faa757387391f11ac4c5f42a2 --- /dev/null +++ b/router/src/test/java/de/ozgcloud/eingang/router/GrpcEingangTestFactory.java @@ -0,0 +1,57 @@ +/* + * 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; + +import de.ozgcloud.eingang.common.formdata.FormDataTestFactory; +import de.ozgcloud.vorgang.common.grpc.GrpcFormDataTestFactory; +import de.ozgcloud.vorgang.common.grpc.GrpcSubFormTestFactory; +import de.ozgcloud.vorgang.vorgang.GrpcEingang; +import de.ozgcloud.vorgang.vorgang.GrpcFormData; +import de.ozgcloud.vorgang.vorgang.GrpcSubForm; + +public class GrpcEingangTestFactory { + + public static final GrpcFormData FORM_DATA = GrpcFormDataTestFactory.create(); + public static final int NUMBER_OF_REPRESENTATIONS = 5; + public static final int NUMBER_OF_ATTACHMENTS = 4; + public static final String ID = FormDataTestFactory.ID; + public static final GrpcSubForm SUB_FORM = GrpcSubFormTestFactory.create(); + + public static GrpcEingang create() { + return createBuilder().build(); + } + + public static GrpcEingang.Builder createBuilder() { + return GrpcEingang.newBuilder() + .setId(ID) + .setHeader(GrpcEingangHeaderTestFactory.create()) + .setAntragsteller(GrpcAntragstellerTestFactory.create()) + .setZustaendigeStelle(GrpcZustaendigeStelleTestFactory.create()) + .setFormData(FORM_DATA) + .addAttachments(GrpcIncomingFileGroupTestFactory.create()) + .setNumberOfAttachments(NUMBER_OF_ATTACHMENTS) + .addRepresentations(GrpcIncomingFileTestFactory.create()) + .setNumberOfRepresentations(NUMBER_OF_REPRESENTATIONS); + } +} \ No newline at end of file diff --git a/router/src/test/java/de/ozgcloud/eingang/router/GrpcIncomingFileGroupTestFactory.java b/router/src/test/java/de/ozgcloud/eingang/router/GrpcIncomingFileGroupTestFactory.java index 8ffea979664c5c311d1130f87208667986df15e9..e8082ab9164a882cbcd9e7c2546424699925addc 100644 --- a/router/src/test/java/de/ozgcloud/eingang/router/GrpcIncomingFileGroupTestFactory.java +++ b/router/src/test/java/de/ozgcloud/eingang/router/GrpcIncomingFileGroupTestFactory.java @@ -23,12 +23,13 @@ */ package de.ozgcloud.eingang.router; +import de.ozgcloud.eingang.common.formdata.IncomingFileGroupTestFactory; import de.ozgcloud.vorgang.vorgang.GrpcIncomingFile; import de.ozgcloud.vorgang.vorgang.GrpcIncomingFileGroup; public class GrpcIncomingFileGroupTestFactory { - public static final String NAME = "FileGroup1"; + public static final String NAME = IncomingFileGroupTestFactory.NAME; public static final GrpcIncomingFile FILE = GrpcIncomingFileTestFactory.create(); public static GrpcIncomingFileGroup create() { diff --git a/router/src/test/java/de/ozgcloud/eingang/router/GrpcIncomingFileTestFactory.java b/router/src/test/java/de/ozgcloud/eingang/router/GrpcIncomingFileTestFactory.java index dc5899c75627723337f54ec388396f35d9fa9abe..f72d588d6a437fa106b73f166c667bc6c76b75a7 100644 --- a/router/src/test/java/de/ozgcloud/eingang/router/GrpcIncomingFileTestFactory.java +++ b/router/src/test/java/de/ozgcloud/eingang/router/GrpcIncomingFileTestFactory.java @@ -30,7 +30,7 @@ import de.ozgcloud.vorgang.vorgang.GrpcIncomingFile; public class GrpcIncomingFileTestFactory { - public static final String ID = IncomingFileTestFactory.ID.toString(); + public static final String ID = IncomingFileTestFactory.ID; public static final String VENDOR_ID = IncomingFileTestFactory.VENDOR_ID; public static final String NAME = IncomingFileTestFactory.NAME; public static final String CONTENT_TYPE = IncomingFileTestFactory.CONTENT_TYPE; diff --git a/router/src/test/java/de/ozgcloud/eingang/router/GrpcPostfachAddressTestFactory.java b/router/src/test/java/de/ozgcloud/eingang/router/GrpcPostfachAddressTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..f8ba6cd4b2f7bdff2b15ded3ff3455028f2a2cdb --- /dev/null +++ b/router/src/test/java/de/ozgcloud/eingang/router/GrpcPostfachAddressTestFactory.java @@ -0,0 +1,33 @@ +package de.ozgcloud.eingang.router; + +import de.ozgcloud.eingang.common.formdata.PostfachAddressTestFactory; +import de.ozgcloud.eingang.common.formdata.StringBasedIdentifier; +import de.ozgcloud.vorgang.common.GrpcObject; +import de.ozgcloud.vorgang.common.GrpcProperty; +import de.ozgcloud.vorgang.vorgang.GrpcPostfachAddress; +import de.ozgcloud.vorgang.vorgang.GrpcPostfachAddress.Builder; + +public class GrpcPostfachAddressTestFactory { + + public static final String VERSION = PostfachAddressTestFactory.VERSION; + public static final int TYPE = PostfachAddressTestFactory.POSTFACH_ADDRESS_TYPE; + public static final GrpcProperty IDENTIFIER_PROPERTY = GrpcProperty.newBuilder() + .setName(StringBasedIdentifier.POSTFACH_ID_FIELD) + .addValue(PostfachAddressTestFactory.POSTFACH_ID) + .build(); + public static final GrpcObject IDENTIFIER = GrpcObject.newBuilder() + .addProperty(IDENTIFIER_PROPERTY) + .build(); + + public static GrpcPostfachAddress create() { + return createBuilder().build(); + } + + private static Builder createBuilder() { + return GrpcPostfachAddress.newBuilder() + .setVersion(VERSION) + .setType(TYPE) + .setIdentifier(IDENTIFIER); + } + +} diff --git a/router/src/test/java/de/ozgcloud/eingang/router/GrpcServiceKontoTestFactory.java b/router/src/test/java/de/ozgcloud/eingang/router/GrpcServiceKontoTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..1995e8123c2911f28d0960144feddb75d3794621 --- /dev/null +++ b/router/src/test/java/de/ozgcloud/eingang/router/GrpcServiceKontoTestFactory.java @@ -0,0 +1,25 @@ +package de.ozgcloud.eingang.router; + +import de.ozgcloud.eingang.common.formdata.ServiceKontoTestFactory; +import de.ozgcloud.vorgang.vorgang.GrpcPostfachAddress; +import de.ozgcloud.vorgang.vorgang.GrpcServiceKonto; +import de.ozgcloud.vorgang.vorgang.GrpcServiceKonto.Builder; + +public class GrpcServiceKontoTestFactory { + + public static final GrpcPostfachAddress POSTFACH_ADDRESS = GrpcPostfachAddressTestFactory.create(); + public static final String TRUST_LEVEL = ServiceKontoTestFactory.TRUST_LEVEL; + public static final String TYPE = ServiceKontoTestFactory.TYPE; + + public static GrpcServiceKonto create() { + return createBuilder().build(); + } + + public static Builder createBuilder() { + return GrpcServiceKonto.newBuilder() + .setType(TYPE) + .setTrustLevel(TRUST_LEVEL) + .addPostfachAddresses(POSTFACH_ADDRESS); + } + +} diff --git a/router/src/test/java/de/ozgcloud/eingang/router/GrpcZustaendigeStelleTestFactory.java b/router/src/test/java/de/ozgcloud/eingang/router/GrpcZustaendigeStelleTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..d964038376c73c7a20233b5d264227d31beffc89 --- /dev/null +++ b/router/src/test/java/de/ozgcloud/eingang/router/GrpcZustaendigeStelleTestFactory.java @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2023 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; + +import de.ozgcloud.eingang.common.formdata.ZustaendigeStelleTestFactory; +import de.ozgcloud.vorgang.vorgang.GrpcZustaendigeStelle; + +public class GrpcZustaendigeStelleTestFactory { + + public static final String ORGANISATIONSEINHEIT_ID = ZustaendigeStelleTestFactory.ORGANISATIONSEINHEIT_ID; + public static final String EMAIL = ZustaendigeStelleTestFactory.EMAIL; + public static final String GEMEINDE_SCHLUESSEL = ZustaendigeStelleTestFactory.GEMEINDE_SCHLUESSEL; + public static final String AMTLICHER_REGIONAL_SCHLUESSEL = ZustaendigeStelleTestFactory.AMTLICHER_REGIONAL_SCHLUESSEL; + public static final String HAUSANSCHRIFT_STRASSE = ZustaendigeStelleTestFactory.HAUSANSCHRIFT_STRASSE; + public static final String HAUSANSCHRIFT_PLZ = ZustaendigeStelleTestFactory.HAUSANSCHRIFT_PLZ; + public static final String HAUSANSCHRIFT_ORT = ZustaendigeStelleTestFactory.HAUSANSCHRIFT_ORT; + public static final String TELEFON = ZustaendigeStelleTestFactory.TELEFON; + public static final String BEZEICHNUNG = ZustaendigeStelleTestFactory.BEZEICHNUNG; + + public static GrpcZustaendigeStelle create() { + return createBuilder().build(); + } + + public static GrpcZustaendigeStelle.Builder createBuilder() { + return GrpcZustaendigeStelle.newBuilder() + .setOrganisationseinheitenId(ORGANISATIONSEINHEIT_ID) + .setEmail(EMAIL) + .setBezeichnung(BEZEICHNUNG) + .setGemeindeSchluessel(GEMEINDE_SCHLUESSEL) + .setAmtlicherRegionalSchluessel(AMTLICHER_REGIONAL_SCHLUESSEL) + .setHausanschriftStrasse(HAUSANSCHRIFT_STRASSE) + .setHausanschriftPlz(HAUSANSCHRIFT_PLZ) + .setHausanschriftOrt(HAUSANSCHRIFT_ORT) + .setTelefon(TELEFON); + } +} \ No newline at end of file diff --git a/router/src/test/java/de/ozgcloud/eingang/router/ServiceKontoMapperTest.java b/router/src/test/java/de/ozgcloud/eingang/router/ServiceKontoMapperTest.java index 34cc0776f020dcf4d9d1a578b8b587d2d2b3c42c..f6389906f7b4f1dc95fd744ba75c341faba0d82a 100644 --- a/router/src/test/java/de/ozgcloud/eingang/router/ServiceKontoMapperTest.java +++ b/router/src/test/java/de/ozgcloud/eingang/router/ServiceKontoMapperTest.java @@ -27,10 +27,14 @@ import static org.assertj.core.api.Assertions.*; import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; +import java.util.Map; + +import org.apache.commons.lang3.StringUtils; 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.mapstruct.factory.Mappers; import org.mockito.InjectMocks; import org.mockito.Mock; @@ -45,13 +49,12 @@ import de.ozgcloud.vorgang.vorgang.GrpcServiceKonto; class ServiceKontoMapperTest { @InjectMocks - private ServiceKontoMapper mapper; + private final ServiceKontoMapper mapper = Mappers.getMapper(ServiceKontoMapper.class); @Mock private GrpcObjectMapper grpcObjectMapper; @Nested - @DisplayName("To servicekonto") - class TestMapServiceKonto { + class TestToGrpc { private final GrpcProperty grpcProperty = GrpcProperty.newBuilder() .setName(StringBasedIdentifier.POSTFACH_ID_FIELD) @@ -89,7 +92,7 @@ class ServiceKontoMapperTest { @Test void shouldContainsDefaultTrustLevel() { - var serviceKonto = mapper.toServiceKonto(ServiceKontoTestFactory.createBuilder().trustLevel(null).build()); + var serviceKonto = mapper.toGrpc(ServiceKontoTestFactory.createBuilder().trustLevel(null).build()); assertThat(serviceKonto.getTrustLevel()).isEqualTo(ServiceKontoMapper.DEFAULT_TRUST_LEVEL); } @@ -139,7 +142,38 @@ class ServiceKontoMapperTest { } private GrpcServiceKonto getServiceKontoFromMappedEingang() { - return mapper.toServiceKonto(ServiceKontoTestFactory.create()); + return mapper.toGrpc(ServiceKontoTestFactory.create()); + } + } + + @Nested + class TestFromGrpc { + + @BeforeEach + void mockGrpcObjectMapper() { + when(grpcObjectMapper.mapFromGrpc(any())) + .thenReturn(Map.of(StringBasedIdentifier.POSTFACH_ID_FIELD, PostfachAddressTestFactory.POSTFACH_ID)); + } + + @Test + void shouldCallGrpcMapper() { + mapper.fromGrpc(GrpcServiceKontoTestFactory.create()); + + verify(grpcObjectMapper).mapFromGrpc(GrpcPostfachAddressTestFactory.IDENTIFIER); + } + + @Test + void shouldMapToGrpc() { + var serviceKonto = mapper.fromGrpc(GrpcServiceKontoTestFactory.create()); + + assertThat(serviceKonto).usingRecursiveComparison().isEqualTo(ServiceKontoTestFactory.create()); + } + + @Test + void shouldSetDefaultTrustLevel() { + var serviceKonto = mapper.fromGrpc(GrpcServiceKontoTestFactory.createBuilder().setTrustLevel(StringUtils.EMPTY).build()); + + assertThat(serviceKonto.getTrustLevel()).isEqualTo(ServiceKontoMapper.DEFAULT_TRUST_LEVEL); } } } \ No newline at end of file