diff --git a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmZustaendigeStelleMapper.java b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmZustaendigeStelleMapper.java index 5196efb4e91e3627882d2c7ecda22666a639deef..1e057c6e81f5c937a429d8050c2c8996742026c9 100644 --- a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmZustaendigeStelleMapper.java +++ b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmZustaendigeStelleMapper.java @@ -45,12 +45,12 @@ class AfmZustaendigeStelleMapper implements AfmEngineBasedMapper { public static final String TAG_BEZEICHNUNG = "OrganisationseinheitenBEZEICHNUNG"; @Autowired - private BayernZustaendigeStelleMetadataMapper bayernZustaendigeStelleMetadataMapper; + private ZustaendigeStelleMetadataMapper zustaendigeStelleMetadataMapper; @Override public FormData parseFormData(FormData formData) { - if (bayernZustaendigeStelleMetadataMapper.isResponsible(formData)) { - return bayernZustaendigeStelleMetadataMapper.parseZustaendigeStelleData(formData); + if (zustaendigeStelleMetadataMapper.isResponsible(formData)) { + return zustaendigeStelleMetadataMapper.parseZustaendigeStelleData(formData); } return parseZustaendigeStelleData(formData); } diff --git a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/BayernData.java b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/ZustaendigeStelleData.java similarity index 83% rename from semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/BayernData.java rename to semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/ZustaendigeStelleData.java index 3b1b26b1af38aa9432d7f2e9a9538984970af4f5..1f085ab99a1b6c7005799b5e91e0618541e4a2af 100644 --- a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/BayernData.java +++ b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/ZustaendigeStelleData.java @@ -12,13 +12,18 @@ import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; +import lombok.Singular; @JacksonXmlRootElement(localName = "data") +@Builder @Getter -public class BayernData { +@NoArgsConstructor +@AllArgsConstructor +public class ZustaendigeStelleData { @JacksonXmlProperty(localName = "field") @JacksonXmlElementWrapper(useWrapping = false) + @Singular private List<Field> fields; @Getter @@ -29,10 +34,10 @@ public class BayernData { public static class Field { @JacksonXmlProperty(isAttribute = true) - String name; + private String name; @JacksonXmlText - String value; + private String value; } } diff --git a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/BayernZustaendigeStelleMetadataMapper.java b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/ZustaendigeStelleMetadataMapper.java similarity index 73% rename from semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/BayernZustaendigeStelleMetadataMapper.java rename to semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/ZustaendigeStelleMetadataMapper.java index f60aef2ef21b221b08f60a2ffa3ca4a9da1c9c11..e8dfb7a420386457ead3c08b40aa0d7d623a0769 100644 --- a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/BayernZustaendigeStelleMetadataMapper.java +++ b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/ZustaendigeStelleMetadataMapper.java @@ -4,16 +4,19 @@ import static java.util.Objects.*; import java.io.IOException; import java.util.Collections; +import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.function.Predicate; import java.util.stream.Collectors; import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.dataformat.xml.XmlMapper; +import de.itvsh.kop.common.errorhandling.TechnicalException; import de.ozgcloud.eingang.common.formdata.FormData; import de.ozgcloud.eingang.common.formdata.IncomingFile; import de.ozgcloud.eingang.common.formdata.ZustaendigeStelle; @@ -21,7 +24,7 @@ import lombok.extern.log4j.Log4j2; @Log4j2 @Component -public class BayernZustaendigeStelleMetadataMapper { +public class ZustaendigeStelleMetadataMapper { static final String BEHOERDE_METADATA_FILE_NAME = "behoerde_metadata.xml"; @@ -37,25 +40,33 @@ public class BayernZustaendigeStelleMetadataMapper { static final String KEY_BEHOERDE_HAUSANSCHRIFT_PLZ = "behoerde_hausanschrift_plz"; static final String KEY_BEHOERDE_TELEFON = "behoerde_telefon"; + @Autowired + private XmlMapper xmlMapper; + public FormData parseZustaendigeStelleData(FormData formData) { return formData.getRepresentations().stream().filter(IS_BEHOERDE_METADATA).findAny() - .map(this::readBehoerdeMetadata) + .map(this::readZustaendigeStelleMetadata) .map(this::mapZustaendigeStelle) .map(zustaendigeStelle -> formData.toBuilder().zustaendigeStelle(zustaendigeStelle).build()) .orElse(formData); } - Map<String, String> readBehoerdeMetadata(IncomingFile metadata) { + Map<String, String> readZustaendigeStelleMetadata(IncomingFile metadata) { + return readXmlContent(metadata).map(ZustaendigeStelleData::getFields).map(this::collectToMap).orElse(Collections.emptyMap()); + } + + Optional<ZustaendigeStelleData> readXmlContent(IncomingFile metadata) { try { - var mapper = new XmlMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - BayernData bayernData = mapper.readValue(metadata.getContentStream(), BayernData.class); - return bayernData.getFields().stream().filter(field -> nonNull(field.getValue())) - .collect(Collectors.toMap(BayernData.Field::getName, BayernData.Field::getValue)); - } catch (IOException e) { + return Optional.of(xmlMapper.readValue(metadata.getContentStream(), ZustaendigeStelleData.class)); + } catch (IOException | TechnicalException e) { LOG.error("Error parsing {}", BEHOERDE_METADATA_FILE_NAME, e); } - return Collections.emptyMap(); + return Optional.empty(); + } + + Map<String, String> collectToMap(List<ZustaendigeStelleData.Field> fields) { + return fields.stream().filter(field -> nonNull(field.getValue())) + .collect(Collectors.toMap(ZustaendigeStelleData.Field::getName, ZustaendigeStelleData.Field::getValue)); } ZustaendigeStelle mapZustaendigeStelle(Map<String, String> behoerdeMetadata) { diff --git a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmZustaendigeStelleMapperTest.java b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmZustaendigeStelleMapperTest.java index 7eda28f0c99b23c1f220a0708972232f059d9790..4f83cb409499a33c332c3b8226012cf210949ae8 100644 --- a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmZustaendigeStelleMapperTest.java +++ b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmZustaendigeStelleMapperTest.java @@ -45,7 +45,7 @@ class AfmZustaendigeStelleMapperTest { private AfmZustaendigeStelleMapper mapper; @Mock - private BayernZustaendigeStelleMetadataMapper bayernZustaendigeStelleMetadataMapper; + private ZustaendigeStelleMetadataMapper zustaendigeStelleMetadataMapper; @Nested class TestParseFormData { @@ -105,9 +105,9 @@ class AfmZustaendigeStelleMapperTest { @Test void shouldCallParseBayernMetadata() { - when(bayernZustaendigeStelleMetadataMapper.isResponsible(any())).thenReturn(true); + when(zustaendigeStelleMetadataMapper.isResponsible(any())).thenReturn(true); var expectedFormData = FormDataTestFactory.create(); - when(bayernZustaendigeStelleMetadataMapper.parseZustaendigeStelleData(any())).thenReturn(expectedFormData); + when(zustaendigeStelleMetadataMapper.parseZustaendigeStelleData(any())).thenReturn(expectedFormData); var resultFormData = parseFormData(formData); diff --git a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/afm/BayernZustaendigeStelleMetadataMapperTest.java b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/afm/BayernZustaendigeStelleMetadataMapperTest.java deleted file mode 100644 index 4ab087e4bc6a22c1e31fb0bad1cec5ede722c25a..0000000000000000000000000000000000000000 --- a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/afm/BayernZustaendigeStelleMetadataMapperTest.java +++ /dev/null @@ -1,262 +0,0 @@ -package de.ozgcloud.eingang.semantik.enginebased.afm; - -import static de.ozgcloud.eingang.semantik.enginebased.afm.BayernZustaendigeStelleMetadataMapper.*; -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import java.io.File; -import java.util.Map; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.Spy; - -import de.itvsh.kop.common.test.TestUtils; -import de.ozgcloud.eingang.common.formdata.FormData; -import de.ozgcloud.eingang.common.formdata.FormDataTestFactory; -import de.ozgcloud.eingang.common.formdata.IncomingFile; -import de.ozgcloud.eingang.common.formdata.IncomingFileTestFactory; -import de.ozgcloud.eingang.common.formdata.ZustaendigeStelle; -import de.ozgcloud.eingang.common.formdata.ZustaendigeStelleTestFactory; -import lombok.SneakyThrows; - -class BayernZustaendigeStelleMetadataMapperTest { - - @Spy - private BayernZustaendigeStelleMetadataMapper mapper; - - @Nested - class TestParseBehoerdeMetadata { - - private IncomingFile behoerdeMetadataFile; - - private FormData formData; - - @BeforeEach - void setUp() { - behoerdeMetadataFile = IncomingFileTestFactory.createBuilder().name(BayernZustaendigeStelleMetadataMapper.BEHOERDE_METADATA_FILE_NAME) - .build(); - formData = FormDataTestFactory.createBuilder() - .zustaendigeStelle(null) - .representation(behoerdeMetadataFile).build(); - } - - @Test - void shouldCallReadBehoerdeMetadata() { - mapper.parseZustaendigeStelleData(formData); - - verify(mapper).readBehoerdeMetadata(behoerdeMetadataFile); - } - - @Test - void shouldCallMapZustaendigeStelle() { - var behoerdeMetadata = Map.of("key", "value"); - doReturn(behoerdeMetadata).when(mapper).readBehoerdeMetadata(behoerdeMetadataFile); - - mapper.parseZustaendigeStelleData(formData); - - verify(mapper).mapZustaendigeStelle(behoerdeMetadata); - } - - @Test - void shouldSetParsedZustaendigeStelle() { - doReturn(Map.of("key", "value")).when(mapper).readBehoerdeMetadata(any()); - var zustaendigeStelle = ZustaendigeStelleTestFactory.create(); - doReturn(zustaendigeStelle).when(mapper).mapZustaendigeStelle(any()); - - var result = mapper.parseZustaendigeStelleData(formData); - - assertThat(result.getZustaendigeStelle()).isEqualTo(zustaendigeStelle); - } - } - - @Nested - class TestReadBehoerdeMetadata { - - private IncomingFile behoerdeMetadataXml; - - @SneakyThrows - @BeforeEach - void setUp() { - behoerdeMetadataXml = IncomingFileTestFactory.createBuilder() - .name(BayernZustaendigeStelleMetadataMapper.BEHOERDE_METADATA_FILE_NAME) - .file(new File(TestUtils.class.getClassLoader().getResource(BEHOERDE_METADATA_FILE_NAME).toURI())).build(); - } - - @Test - void shouldParseBehoerdeAnzeigeName() { - var expectedValue = "Landratsamt XYZ (Testbehörde für BDA)"; - - var metadata = mapper.readBehoerdeMetadata(behoerdeMetadataXml); - - assertThat(metadata).containsEntry(KEY_BEHOERDE_ANZEIGE_NAME, expectedValue); - } - - @Test - void shouldParseOrganisationEinheitId() { - var expectedValue = "87331322433"; - - var metadata = mapper.readBehoerdeMetadata(behoerdeMetadataXml); - - assertThat(metadata).containsEntry(KEY_BEHOERDE_CALLER_ID, expectedValue); - } - - @Test - void shouldParseGemeindeSchluesselBp() { - var expectedValue = "09189155"; - - var metadata = mapper.readBehoerdeMetadata(behoerdeMetadataXml); - - assertThat(metadata).containsEntry(KEY_GEMEINDE_SCHLUESSEL_BP, expectedValue); - } - - @Test - void shouldParseBehoerdeEmail() { - var expectedValue = "poststelle@testbehoerde.bayern"; - - var metadata = mapper.readBehoerdeMetadata(behoerdeMetadataXml); - - assertThat(metadata).containsEntry(KEY_BEHOERDE_EMAIL, expectedValue); - } - - @Test - void shouldParseAmtlicherRegionalSchlussel() { - var expectedValue = "091890000000"; - - var metadata = mapper.readBehoerdeMetadata(behoerdeMetadataXml); - - assertThat(metadata).containsEntry(KEY_AMTLICHER_REGIONALSCHLUESSEL, expectedValue); - } - - @Test - void shouldParseBehoerdeHausanschriftStrasse() { - var expectedValue = "Teststraße 1"; - - var metadata = mapper.readBehoerdeMetadata(behoerdeMetadataXml); - - assertThat(metadata).containsEntry(KEY_BEHOERDE_HAUSANSCHRIFT_STRASSE, expectedValue); - } - - @Test - void shouldParseBehoerdeHausanschriftOrt() { - var expectedValue = "Musterstadt"; - - var metadata = mapper.readBehoerdeMetadata(behoerdeMetadataXml); - - assertThat(metadata).containsEntry(KEY_BEHOERDE_HAUSANSCHRIFT_ORT, expectedValue); - } - - @Test - void shouldParseBehoerdeHausanschriftPlz() { - var expectedValue = "12345"; - - var metadata = mapper.readBehoerdeMetadata(behoerdeMetadataXml); - - assertThat(metadata).containsEntry(KEY_BEHOERDE_HAUSANSCHRIFT_PLZ, expectedValue); - } - - @Test - void shouldParseBehoerdeTelefon() { - var expectedValue = "+49 123 45-0"; - - var metadata = mapper.readBehoerdeMetadata(behoerdeMetadataXml); - - assertThat(metadata).containsEntry(KEY_BEHOERDE_TELEFON, expectedValue); - } - } - - @Nested - class TestMapZuestaendigeStelle { - - private static final Map<String, String> BEHOERDE_METADATA = Map.of( - KEY_BEHOERDE_ANZEIGE_NAME, "beloerde-anzeige-name", - KEY_BEHOERDE_CALLER_ID, "behoerde-caller-id", - KEY_GEMEINDE_SCHLUESSEL_BP, "gemeinde-schluessel-bp", - KEY_BEHOERDE_EMAIL, "behoerde-email", - KEY_AMTLICHER_REGIONALSCHLUESSEL, "amtlicher-regionalschluessel", - KEY_BEHOERDE_HAUSANSCHRIFT_STRASSE, "behoerde-hausanschrift-strasse", - KEY_BEHOERDE_HAUSANSCHRIFT_ORT, "behoerde-hausanschrift-ort", - KEY_BEHOERDE_HAUSANSCHRIFT_PLZ, "behoerde-hausanschrift-plz", - KEY_BEHOERDE_TELEFON, "behoerde-telefon" - ); - - @Test - void shouldSetBezeichnung() { - var zustaendigeStelle = mapZustaendigeStelle(); - - assertThat(zustaendigeStelle.getBezeichnung()).isEqualTo(BEHOERDE_METADATA.get(KEY_BEHOERDE_ANZEIGE_NAME)); - } - - @Test - void shouldSetOrganisationEinheitId() { - var zustaendigeStelle = mapZustaendigeStelle(); - - assertThat(zustaendigeStelle.getOrganisationseinheitenId()).isEqualTo(BEHOERDE_METADATA.get(KEY_BEHOERDE_CALLER_ID)); - } - - @Test - void shouldSetGemeindeSchluessel() { - var zustaendigeStelle = mapZustaendigeStelle(); - - assertThat(zustaendigeStelle.getGemeindeSchluessel()).isEqualTo(BEHOERDE_METADATA.get(KEY_GEMEINDE_SCHLUESSEL_BP)); - } - - @Test - void shouldSetEmail() { - var zustaendigeStelle = mapZustaendigeStelle(); - - assertThat(zustaendigeStelle.getEmail()).isEqualTo(BEHOERDE_METADATA.get(KEY_BEHOERDE_EMAIL)); - } - - @Test - void shouldSetAmtlicherRegionalSchluessel() { - var zustaendigeStelle = mapZustaendigeStelle(); - - assertThat(zustaendigeStelle.getAmtlicherRegionalSchluessel()).isEqualTo(BEHOERDE_METADATA.get(KEY_AMTLICHER_REGIONALSCHLUESSEL)); - } - - @Test - void shouldSetHausanschriftStrasse() { - var zustaendigeStelle = mapZustaendigeStelle(); - - assertThat(zustaendigeStelle.getHausanschriftStrasse()).isEqualTo(BEHOERDE_METADATA.get(KEY_BEHOERDE_HAUSANSCHRIFT_STRASSE)); - } - - @Test - void shouldSetHausanschriftOrt() { - var zusatendigeStelle = mapZustaendigeStelle(); - - assertThat(zusatendigeStelle.getHausanschriftOrt()).isEqualTo(BEHOERDE_METADATA.get(KEY_BEHOERDE_HAUSANSCHRIFT_ORT)); - } - - @Test - void shouldSetHausanschriftPlz() { - var zustaendigeStelle = mapZustaendigeStelle(); - - assertThat(zustaendigeStelle.getHausanschriftPlz()).isEqualTo(BEHOERDE_METADATA.get(KEY_BEHOERDE_HAUSANSCHRIFT_PLZ)); - } - - @Test - void shouldSetTelefon() { - var zusatendigeStelle = mapZustaendigeStelle(); - - assertThat(zusatendigeStelle.getTelefon()).isEqualTo(BEHOERDE_METADATA.get(KEY_BEHOERDE_TELEFON)); - } - - private ZustaendigeStelle mapZustaendigeStelle() { - return mapper.mapZustaendigeStelle(BEHOERDE_METADATA); - } - } - - @Test - void shouldApproveResponsibility() { - var formData = FormDataTestFactory.createBuilder() - .representation(IncomingFileTestFactory.createBuilder().name(BayernZustaendigeStelleMetadataMapper.BEHOERDE_METADATA_FILE_NAME) - .build()).build(); - - var isResponsible = mapper.isResponsible(formData); - - assertThat(isResponsible).isTrue(); - } -} \ No newline at end of file diff --git a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/afm/ZustaendigeStelleDataTestFactory.java b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/afm/ZustaendigeStelleDataTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..b7d82d624f06de55c99069480ce537b66edab2a3 --- /dev/null +++ b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/afm/ZustaendigeStelleDataTestFactory.java @@ -0,0 +1,62 @@ +package de.ozgcloud.eingang.semantik.enginebased.afm; + +import static de.ozgcloud.eingang.semantik.enginebased.afm.ZustaendigeStelleMetadataMapper.*; + +import java.util.List; +import java.util.Map; + +import de.ozgcloud.eingang.semantik.enginebased.afm.ZustaendigeStelleData.ZustaendigeStelleDataBuilder; + +public class ZustaendigeStelleDataTestFactory { + public static final String BEHOERDE_ANZEIGE_NAME = "Landratsamt XYZ (Testbehörde für BDA)"; + public static final String BEHOERDE_CALLER_ID = "87331322433"; + public static final String GEMEINDE_SCHLUESSEL_BP = "09189155"; + public static final String BEHOERDE_EMAIL = "poststelle@testbehoerde.bayern"; + public static final String AMTLICHER_REGIONALSCHLUESSEL = "091890000000"; + public static final String BEHOERDE_HAUSANSCHRIFT_STRASSE = "Teststraße 1"; + public static final String BEHOERDE_HAUSANSCHRIFT_ORT = "Musterstadt"; + public static final String BEHOERDE_HAUSANSCHRIFT_PLZ = "12345"; + public static final String BEHOERDE_TELEFON = "+49 123 45-0"; + + public static final Map<String, String> BEHOERDE_METADATA = Map.of( + KEY_BEHOERDE_ANZEIGE_NAME, BEHOERDE_ANZEIGE_NAME, + KEY_BEHOERDE_CALLER_ID, BEHOERDE_CALLER_ID, + KEY_GEMEINDE_SCHLUESSEL_BP, GEMEINDE_SCHLUESSEL_BP, + KEY_BEHOERDE_EMAIL, BEHOERDE_EMAIL, + KEY_AMTLICHER_REGIONALSCHLUESSEL, AMTLICHER_REGIONALSCHLUESSEL, + KEY_BEHOERDE_HAUSANSCHRIFT_STRASSE, BEHOERDE_HAUSANSCHRIFT_STRASSE, + KEY_BEHOERDE_HAUSANSCHRIFT_ORT, BEHOERDE_HAUSANSCHRIFT_ORT, + KEY_BEHOERDE_HAUSANSCHRIFT_PLZ, BEHOERDE_HAUSANSCHRIFT_PLZ, + KEY_BEHOERDE_TELEFON, BEHOERDE_TELEFON + ); + + public static final List<ZustaendigeStelleData.Field> ZUSTAENDIGE_STELLE_DATA_FIELDS = List.of( + ZustaendigeStelleMetadataFieldTestFactory.createBuilder().name(KEY_BEHOERDE_ANZEIGE_NAME) + .value(ZustaendigeStelleDataTestFactory.BEHOERDE_ANZEIGE_NAME).build(), + ZustaendigeStelleMetadataFieldTestFactory.createBuilder().name(KEY_BEHOERDE_CALLER_ID) + .value(ZustaendigeStelleDataTestFactory.BEHOERDE_CALLER_ID).build(), + ZustaendigeStelleMetadataFieldTestFactory.createBuilder().name(KEY_GEMEINDE_SCHLUESSEL_BP) + .value(ZustaendigeStelleDataTestFactory.GEMEINDE_SCHLUESSEL_BP).build(), + ZustaendigeStelleMetadataFieldTestFactory.createBuilder().name(KEY_BEHOERDE_EMAIL).value(ZustaendigeStelleDataTestFactory.BEHOERDE_EMAIL) + .build(), + ZustaendigeStelleMetadataFieldTestFactory.createBuilder().name(KEY_AMTLICHER_REGIONALSCHLUESSEL) + .value(ZustaendigeStelleDataTestFactory.AMTLICHER_REGIONALSCHLUESSEL).build(), + ZustaendigeStelleMetadataFieldTestFactory.createBuilder().name(KEY_BEHOERDE_HAUSANSCHRIFT_STRASSE) + .value(ZustaendigeStelleDataTestFactory.BEHOERDE_HAUSANSCHRIFT_STRASSE).build(), + ZustaendigeStelleMetadataFieldTestFactory.createBuilder().name(KEY_BEHOERDE_HAUSANSCHRIFT_ORT) + .value(ZustaendigeStelleDataTestFactory.BEHOERDE_HAUSANSCHRIFT_ORT).build(), + ZustaendigeStelleMetadataFieldTestFactory.createBuilder().name(KEY_BEHOERDE_HAUSANSCHRIFT_PLZ) + .value(ZustaendigeStelleDataTestFactory.BEHOERDE_HAUSANSCHRIFT_PLZ).build(), + ZustaendigeStelleMetadataFieldTestFactory.createBuilder().name(KEY_BEHOERDE_TELEFON).value(ZustaendigeStelleDataTestFactory.BEHOERDE_TELEFON) + .build() + ); + + public static ZustaendigeStelleData create() { + return createBuilder().build(); + } + + public static ZustaendigeStelleDataBuilder createBuilder() { + return ZustaendigeStelleData.builder() + .fields(ZUSTAENDIGE_STELLE_DATA_FIELDS); + } +} diff --git a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/afm/ZustaendigeStelleMetadataFieldTestFactory.java b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/afm/ZustaendigeStelleMetadataFieldTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..2508c76dde41ccc174ed79a3a97c23b08a883a50 --- /dev/null +++ b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/afm/ZustaendigeStelleMetadataFieldTestFactory.java @@ -0,0 +1,20 @@ +package de.ozgcloud.eingang.semantik.enginebased.afm; + +import de.ozgcloud.eingang.semantik.enginebased.afm.ZustaendigeStelleData.Field; +import de.ozgcloud.eingang.semantik.enginebased.afm.ZustaendigeStelleData.Field.FieldBuilder; + +public class ZustaendigeStelleMetadataFieldTestFactory { + + public static final String FIELD_NAME = "name"; + public static final String FIELD_VALUE = "value"; + + public static Field create() { + return createBuilder().build(); + } + + public static FieldBuilder createBuilder() { + return Field.builder() + .name(FIELD_NAME) + .value(FIELD_VALUE); + } +} diff --git a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/afm/ZustaendigeStelleMetadataMapperTest.java b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/afm/ZustaendigeStelleMetadataMapperTest.java new file mode 100644 index 0000000000000000000000000000000000000000..5da34d86397802416e222b17f31722392944791d --- /dev/null +++ b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/afm/ZustaendigeStelleMetadataMapperTest.java @@ -0,0 +1,173 @@ +package de.ozgcloud.eingang.semantik.enginebased.afm; + +import static org.assertj.core.api.Assertions.*; +import static org.mockito.Mockito.*; + +import java.io.File; +import java.util.Map; + +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 com.fasterxml.jackson.dataformat.xml.XmlMapper; + +import de.ozgcloud.eingang.common.formdata.FormData; +import de.ozgcloud.eingang.common.formdata.FormDataTestFactory; +import de.ozgcloud.eingang.common.formdata.IncomingFile; +import de.ozgcloud.eingang.common.formdata.IncomingFileTestFactory; +import de.ozgcloud.eingang.common.formdata.ZustaendigeStelle; +import de.ozgcloud.eingang.common.formdata.ZustaendigeStelleTestFactory; +import lombok.SneakyThrows; + +class ZustaendigeStelleMetadataMapperTest { + + @Spy + @InjectMocks + private ZustaendigeStelleMetadataMapper mapper; + + @Mock + private XmlMapper xmlMapper; + + @Nested + class TestParseBehoerdeMetadata { + + private IncomingFile behoerdeMetadataFile; + + private FormData formData; + + @BeforeEach + void setUp() { + behoerdeMetadataFile = IncomingFileTestFactory.createBuilder().name(ZustaendigeStelleMetadataMapper.BEHOERDE_METADATA_FILE_NAME) + .build(); + formData = FormDataTestFactory.createBuilder() + .zustaendigeStelle(null) + .representation(behoerdeMetadataFile).build(); + } + + @SneakyThrows + @Test + void shouldCallReadBehoerdeMetadata() { + doReturn(ZustaendigeStelleDataTestFactory.BEHOERDE_METADATA).when(mapper).readZustaendigeStelleMetadata(behoerdeMetadataFile); + + mapper.parseZustaendigeStelleData(formData); + + verify(mapper).readZustaendigeStelleMetadata(behoerdeMetadataFile); + } + + @Test + void shouldCallMapZustaendigeStelle() { + var behoerdeMetadata = Map.of("key", "value"); + doReturn(behoerdeMetadata).when(mapper).readZustaendigeStelleMetadata(behoerdeMetadataFile); + + mapper.parseZustaendigeStelleData(formData); + + verify(mapper).mapZustaendigeStelle(behoerdeMetadata); + } + + @Test + void shouldSetParsedZustaendigeStelle() { + doReturn(Map.of("key", "value")).when(mapper).readZustaendigeStelleMetadata(any()); + var zustaendigeStelle = ZustaendigeStelleTestFactory.create(); + doReturn(zustaendigeStelle).when(mapper).mapZustaendigeStelle(any()); + + var result = mapper.parseZustaendigeStelleData(formData); + + assertThat(result.getZustaendigeStelle()).isEqualTo(zustaendigeStelle); + } + } + + @Nested + class TestReadBehoerdeMetadata { + + + private File brokenFile; + + + } + + @Nested + class TestMapZuestaendigeStelle { + + @Test + void shouldSetBezeichnung() { + var zustaendigeStelle = mapZustaendigeStelle(); + + assertThat(zustaendigeStelle.getBezeichnung()).isEqualTo(ZustaendigeStelleDataTestFactory.BEHOERDE_ANZEIGE_NAME); + } + + @Test + void shouldSetOrganisationEinheitId() { + var zustaendigeStelle = mapZustaendigeStelle(); + + assertThat(zustaendigeStelle.getOrganisationseinheitenId()).isEqualTo(ZustaendigeStelleDataTestFactory.BEHOERDE_CALLER_ID); + } + + @Test + void shouldSetGemeindeSchluessel() { + var zustaendigeStelle = mapZustaendigeStelle(); + + assertThat(zustaendigeStelle.getGemeindeSchluessel()).isEqualTo(ZustaendigeStelleDataTestFactory.GEMEINDE_SCHLUESSEL_BP); + } + + @Test + void shouldSetEmail() { + var zustaendigeStelle = mapZustaendigeStelle(); + + assertThat(zustaendigeStelle.getEmail()).isEqualTo(ZustaendigeStelleDataTestFactory.BEHOERDE_EMAIL); + } + + @Test + void shouldSetAmtlicherRegionalSchluessel() { + var zustaendigeStelle = mapZustaendigeStelle(); + + assertThat(zustaendigeStelle.getAmtlicherRegionalSchluessel()).isEqualTo(ZustaendigeStelleDataTestFactory.AMTLICHER_REGIONALSCHLUESSEL); + } + + @Test + void shouldSetHausanschriftStrasse() { + var zustaendigeStelle = mapZustaendigeStelle(); + + assertThat(zustaendigeStelle.getHausanschriftStrasse()).isEqualTo(ZustaendigeStelleDataTestFactory.BEHOERDE_HAUSANSCHRIFT_STRASSE); + } + + @Test + void shouldSetHausanschriftOrt() { + var zusatendigeStelle = mapZustaendigeStelle(); + + assertThat(zusatendigeStelle.getHausanschriftOrt()).isEqualTo(ZustaendigeStelleDataTestFactory.BEHOERDE_HAUSANSCHRIFT_ORT); + } + + @Test + void shouldSetHausanschriftPlz() { + var zustaendigeStelle = mapZustaendigeStelle(); + + assertThat(zustaendigeStelle.getHausanschriftPlz()).isEqualTo(ZustaendigeStelleDataTestFactory.BEHOERDE_HAUSANSCHRIFT_PLZ); + } + + @Test + void shouldSetTelefon() { + var zusatendigeStelle = mapZustaendigeStelle(); + + assertThat(zusatendigeStelle.getTelefon()).isEqualTo(ZustaendigeStelleDataTestFactory.BEHOERDE_TELEFON); + } + + private ZustaendigeStelle mapZustaendigeStelle() { + return mapper.mapZustaendigeStelle(ZustaendigeStelleDataTestFactory.BEHOERDE_METADATA); + } + } + + @Test + void shouldApproveResponsibility() { + var formData = FormDataTestFactory.createBuilder() + .representation(IncomingFileTestFactory.createBuilder().name(ZustaendigeStelleMetadataMapper.BEHOERDE_METADATA_FILE_NAME) + .build()).build(); + + var isResponsible = mapper.isResponsible(formData); + + assertThat(isResponsible).isTrue(); + } +} \ No newline at end of file