diff --git a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/formcycle/FormcycleAntragstellerMapper.java b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/formcycle/FormcycleAntragstellerMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..28700d38cc1435fa9942e1b083cda0e1cdafa341 --- /dev/null +++ b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/formcycle/FormcycleAntragstellerMapper.java @@ -0,0 +1,59 @@ +package de.ozgcloud.eingang.semantik.enginebased.formcycle; + +import java.util.Map; +import java.util.Optional; + +import org.apache.commons.collections4.MapUtils; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; +import org.springframework.stereotype.Component; + +import de.ozgcloud.eingang.common.formdata.Antragsteller; +import de.ozgcloud.eingang.common.formdata.FormData; + +@Component +@ConditionalOnBean(FormCycleEngineBasedAdapter.class) +public class FormcycleAntragstellerMapper implements FormcycleEngineBasedMapper { + + static final String KEY_ANTRAGSTELLER = "fsBKAllDaten"; + static final String KEY_ANREDE = "tfAntragstellerAnrede"; + static final String KEY_VORNAME = "tfAntragstellerVorname"; + static final String KEY_NACHNAME = "tfAntragstellerNachname"; + static final String KEY_GEBURTSNAME = "tfAntragstellerGeburtsname"; + static final String KEY_GEBURTSDATUM = "tfAntragstellerGeburtsdatum"; + static final String KEY_GEBURTSORT = "tfAntragstellerGeburtsort"; + static final String KEY_EMAIL = "tfAntragstellerEmail"; + static final String KEY_TELEFON = "tfAntragstellerTelefon"; + static final String KEY_ADDRESS = "tfAntragstellerAdresse"; + static final String KEY_PLZ = "tfAntragstellerPLZ"; + static final String KEY_ORT = "tfAntragstellerOrt"; + + @Override + public FormData parseFormData(final FormData formData) { + return getAntragstellerData(formData.getFormData()) + .map(this::buildAntragsteller) + .map(antragsteller -> formData.toBuilder().antragsteller(antragsteller).build()) + .orElse(formData); + } + + @SuppressWarnings("unchecked") + Optional<Map<String, Object>> getAntragstellerData(Map<String, Object> formDataMap) { + var antragstellerData = (Map<String, Object>) MapUtils.getMap(formDataMap, KEY_ANTRAGSTELLER); + return Optional.ofNullable(antragstellerData); + } + + Antragsteller buildAntragsteller(Map<String, Object> antragstellerData) { + return Antragsteller.builder() + .anrede(MapUtils.getString(antragstellerData, KEY_ANREDE)) + .vorname(MapUtils.getString(antragstellerData, KEY_VORNAME)) + .nachname(MapUtils.getString(antragstellerData, KEY_NACHNAME)) + .geburtsname(MapUtils.getString(antragstellerData, KEY_GEBURTSNAME)) + .geburtsdatum(MapUtils.getString(antragstellerData, KEY_GEBURTSDATUM)) + .geburtsort(MapUtils.getString(antragstellerData, KEY_GEBURTSORT)) + .email(MapUtils.getString(antragstellerData, KEY_EMAIL)) + .telefon(MapUtils.getString(antragstellerData, KEY_TELEFON)) + .strasse(MapUtils.getString(antragstellerData, KEY_ADDRESS)) + .plz(MapUtils.getString(antragstellerData, KEY_PLZ)) + .ort(MapUtils.getString(antragstellerData, KEY_ORT)) + .build(); + } +} diff --git a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/formcycle/FormcycleEngineBasedMapper.java b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/formcycle/FormcycleEngineBasedMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..2f1f20a85652afc550b7eaacd677b987c3080f5c --- /dev/null +++ b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/formcycle/FormcycleEngineBasedMapper.java @@ -0,0 +1,6 @@ +package de.ozgcloud.eingang.semantik.enginebased.formcycle; + +import de.ozgcloud.eingang.semantik.enginebased.EngineBasedMapper; + +interface FormcycleEngineBasedMapper extends EngineBasedMapper { +} diff --git a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/formcycle/FormcycleAntragstellerMapperTest.java b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/formcycle/FormcycleAntragstellerMapperTest.java new file mode 100644 index 0000000000000000000000000000000000000000..36b93bf3bbce2b79629c92bb05da6795f01c9136 --- /dev/null +++ b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/formcycle/FormcycleAntragstellerMapperTest.java @@ -0,0 +1,196 @@ +package de.ozgcloud.eingang.semantik.enginebased.formcycle; + +import static org.assertj.core.api.Assertions.*; +import static org.mockito.Mockito.*; + +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; + +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.BeforeAll; +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 de.ozgcloud.eingang.common.formdata.Antragsteller; +import de.ozgcloud.eingang.common.formdata.AntragstellerTestFactory; +import de.ozgcloud.eingang.common.formdata.FormData; +import de.ozgcloud.eingang.common.formdata.FormDataTestFactory; + +class FormcycleAntragstellerMapperTest { + + @Spy + @InjectMocks + private FormcycleAntragstellerMapper mapper; + + private static final Map<String, Object> ANTRAGSTELLER_DATA = new HashMap<>(); + private static final Map<String, Object> ANTRAGSTELLER_MAP = Map.of("fsBKAllDaten", ANTRAGSTELLER_DATA); + + @BeforeAll + static void fillAntragstellerData() { + ANTRAGSTELLER_DATA.put("tfAntragstellerAnrede", AntragstellerTestFactory.ANREDE); + ANTRAGSTELLER_DATA.put("tfAntragstellerVorname", AntragstellerTestFactory.VORNAME); + ANTRAGSTELLER_DATA.put("tfAntragstellerNachname", AntragstellerTestFactory.NACHNAME); + ANTRAGSTELLER_DATA.put("tfAntragstellerGeburtsname", AntragstellerTestFactory.GEBURTSNAME); + ANTRAGSTELLER_DATA.put("tfAntragstellerGeburtsdatum", AntragstellerTestFactory.GEBURTSDATUM); + ANTRAGSTELLER_DATA.put("tfAntragstellerGeburtsort", AntragstellerTestFactory.GEBURTSORT); + ANTRAGSTELLER_DATA.put("tfAntragstellerEmail", AntragstellerTestFactory.EMAIL); + ANTRAGSTELLER_DATA.put("tfAntragstellerTelefon", AntragstellerTestFactory.TELEFON); + ANTRAGSTELLER_DATA.put("tfAntragstellerAdresse", AntragstellerTestFactory.STRASSE + " " + AntragstellerTestFactory.HAUSNUMMER); + ANTRAGSTELLER_DATA.put("tfAntragstellerPLZ", AntragstellerTestFactory.PLZ); + ANTRAGSTELLER_DATA.put("tfAntragstellerOrt", AntragstellerTestFactory.ORT); + } + + @Nested + class TestParseFormData { + + @Mock + private Antragsteller antragsteller; + + @Test + void shouldCallGetAntragsteller() { + mapper.parseFormData(buildFormData()); + + verify(mapper).getAntragstellerData(ANTRAGSTELLER_MAP); + } + + @Test + void shouldCallBuildAntragsteller() { + doReturn(Optional.of(ANTRAGSTELLER_DATA)).when(mapper).getAntragstellerData(anyMap()); + + mapper.parseFormData(buildFormData()); + + verify(mapper).buildAntragsteller(ANTRAGSTELLER_DATA); + } + + @Test + void shouldSetAntragsteller() { + doReturn(antragsteller).when(mapper).buildAntragsteller(anyMap()); + + var formData = mapper.parseFormData(buildFormData()); + + assertThat(formData.getAntragsteller()).isSameAs(antragsteller); + } + + @Test + void shouldReturnSameFormData() { + var formData = FormDataTestFactory.create(); + + var result = mapper.parseFormData(formData); + + assertThat(result).isSameAs(formData); + } + + FormData buildFormData() { + return FormData.builder().formData(ANTRAGSTELLER_MAP).build(); + } + } + + @Nested + class TestGetAntragstellerData { + + @Test + void shouldReturnEmpty() { + Map<String, Object> formDataMap = Map.of("key", "value"); + + var result = mapper.getAntragstellerData(formDataMap); + + assertThat(result).isEmpty(); + } + + @Test + void shouldReturnAntragstellerData() { + var result = mapper.getAntragstellerData(ANTRAGSTELLER_MAP); + + assertThat(result).contains(ANTRAGSTELLER_DATA); + } + } + + @Nested + class TestBuildAntragsteller { + + @Test + void shouldSetAnrede() { + var result = buildAntragsteller(); + + assertThat(result.getAnrede()).isEqualTo(AntragstellerTestFactory.ANREDE); + } + + @Test + void shouldSetVorname() { + var result = buildAntragsteller(); + + assertThat(result.getVorname()).isEqualTo(AntragstellerTestFactory.VORNAME); + } + + @Test + void shouldSetNachname() { + var result = buildAntragsteller(); + + assertThat(result.getNachname()).isEqualTo(AntragstellerTestFactory.NACHNAME); + } + + @Test + void shouldSetGeburtsname() { + var result = buildAntragsteller(); + + assertThat(result.getGeburtsname()).isEqualTo(AntragstellerTestFactory.GEBURTSNAME); + } + + @Test + void shouldSetGeburtsdatum() { + var result = buildAntragsteller(); + + assertThat(result.getGeburtsdatum()).isEqualTo(AntragstellerTestFactory.GEBURTSDATUM); + } + + @Test + void shouldSetGeburtsort() { + var result = buildAntragsteller(); + + assertThat(result.getGeburtsort()).isEqualTo(AntragstellerTestFactory.GEBURTSORT); + } + + @Test + void shouldSetEmail() { + var result = buildAntragsteller(); + + assertThat(result.getEmail()).isEqualTo(AntragstellerTestFactory.EMAIL); + } + + @Test + void shouldSetTelefon() { + var result = buildAntragsteller(); + + assertThat(result.getTelefon()).isEqualTo(AntragstellerTestFactory.TELEFON); + } + + @Test + void shouldSetStrasse() { + var result = buildAntragsteller(); + + assertThat(result.getStrasse()).isEqualTo(AntragstellerTestFactory.STRASSE + " " + AntragstellerTestFactory.HAUSNUMMER); + } + + @Test + void shouldSetPlz() { + var result = buildAntragsteller(); + + assertThat(result.getPlz()).isEqualTo(AntragstellerTestFactory.PLZ); + } + + @Test + void shouldSetOrt() { + var result = buildAntragsteller(); + + assertThat(result.getOrt()).isEqualTo(AntragstellerTestFactory.ORT); + } + + Antragsteller buildAntragsteller() { + return mapper.buildAntragsteller(ANTRAGSTELLER_DATA); + } + } +} \ No newline at end of file