Skip to content
Snippets Groups Projects
Commit acbe990f authored by Jan Zickermann's avatar Jan Zickermann
Browse files

Merge branch 'KOP-2884-Mapping-von-Antragsteller' into 'main'

Kop 2884 mapping von antragsteller

See merge request !2
parents d70f7dae ec8d0d7c
Branches
Tags
1 merge request!2Kop 2884 mapping von antragsteller
Pipeline #2252 passed
Showing
with 1533 additions and 150 deletions
...@@ -25,39 +25,25 @@ package de.ozgcloud.eingang.semantik.enginebased.formsolutions; ...@@ -25,39 +25,25 @@ package de.ozgcloud.eingang.semantik.enginebased.formsolutions;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import de.ozgcloud.eingang.common.formdata.Antragsteller;
import de.ozgcloud.eingang.common.formdata.FormData; import de.ozgcloud.eingang.common.formdata.FormData;
import de.ozgcloud.eingang.common.formdata.FormDataUtils; import de.ozgcloud.eingang.common.formdata.FormDataUtils;
import de.ozgcloud.eingang.semantik.enginebased.formsolutions.mapper.FSAntragstellerMapper;
import lombok.RequiredArgsConstructor;
@Component @Component
@RequiredArgsConstructor
class FormSolutionsAntragstellerMapper implements FormSolutionsEngineBasedMapper { class FormSolutionsAntragstellerMapper implements FormSolutionsEngineBasedMapper {
public static final String ANTRAGSTELLER_PANEL_IDENTIFIER = "Antragstellende Person"; public static final String ANTRAGSTELLER_PANEL_IDENTIFIER = "Antragstellende Person";
public static final String POSTKORBHANDLE = "postkorbhandle"; private final FSAntragstellerMapper mapper;
public static final String VORNAME_KEY = "AS_Vorname";
public static final String NACHNAME_KEY = "AS_Name";
@Override @Override
public FormData parseFormData(FormData formData) { public FormData parseFormData(FormData formData) {
return FormDataUtils.from(formData) return FormDataUtils.from(formData)
.builder() .builder()
.antragsteller(buildAntragsteller(formData)) .antragsteller(mapper.mapAntragsteller(IdentifierValueParser.parsePanelsData(formData)))
.build();
}
protected Antragsteller buildAntragsteller(FormData formData) {
var antragstellerData = IdentifierValueParser.parsePanelsData(formData);
return Antragsteller.builder()
.postfachId(getPostkorbhandle(formData))
.vorname(antragstellerData.get(VORNAME_KEY))
.nachname(antragstellerData.get(NACHNAME_KEY))
.build(); .build();
} }
private String getPostkorbhandle(FormData formData) {
return (String) formData.getFormData().get(POSTKORBHANDLE);
}
} }
\ No newline at end of file
...@@ -23,6 +23,8 @@ ...@@ -23,6 +23,8 @@
*/ */
package de.ozgcloud.eingang.semantik.enginebased.formsolutions; package de.ozgcloud.eingang.semantik.enginebased.formsolutions;
import static de.ozgcloud.eingang.semantik.enginebased.formsolutions.FormSolutionsHeaderMapper.*;
import java.util.List; import java.util.List;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
...@@ -60,7 +62,7 @@ public class FormSolutionsEngineBasedAdapter implements EngineBasedSemantikAdapt ...@@ -60,7 +62,7 @@ public class FormSolutionsEngineBasedAdapter implements EngineBasedSemantikAdapt
.remove(ASSISTANT) .remove(ASSISTANT)
.remove(ANLIEGEN_ID) .remove(ANLIEGEN_ID)
.remove(KOMMUNALVERWALTUNG_ID) .remove(KOMMUNALVERWALTUNG_ID)
.remove(FormSolutionsAntragstellerMapper.POSTKORBHANDLE) .remove(POSTKORBHANDLE)
.build(); .build();
} }
} }
...@@ -66,7 +66,9 @@ class FormSolutionsHeaderMapper implements FormSolutionsEngineBasedMapper { ...@@ -66,7 +66,9 @@ class FormSolutionsHeaderMapper implements FormSolutionsEngineBasedMapper {
.requestId(getRequestId(formData)) .requestId(getRequestId(formData))
.formEngineName(FORM_ENGINE_NAME); .formEngineName(FORM_ENGINE_NAME);
Optional.ofNullable(getPostkorbhandle(formData)).map(serviceKontoFactory::buildOsiServiceKonto).ifPresent(formHeaderBuilder::serviceKonto); Optional.ofNullable(getPostkorbhandle(formData))
.map(serviceKontoFactory::buildOsiServiceKonto)
.ifPresent(formHeaderBuilder::serviceKonto);
return formHeaderBuilder.build(); return formHeaderBuilder.build();
} }
......
package de.ozgcloud.eingang.semantik.enginebased.formsolutions.mapper;
import java.util.Map;
import java.util.stream.Collectors;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Named;
import org.mapstruct.ReportingPolicy;
import de.ozgcloud.eingang.common.formdata.Antragsteller;
@Mapper(unmappedTargetPolicy = ReportingPolicy.ERROR)
public interface FSAntragstellerMapper {
String NAT_ANREDE_KEY = "AS_Anrede";
String NAT_VORNAME_KEY = "AS_Vorname";
String NAT_NACHNAME_KEY = "AS_Name";
String NAT_GEBURTSNAME_KEY = "AS_Geburtsname";
String NAT_GEBURTSDATUM_KEY = "AS_Geburtsdatum";
String NAT_GEBURTSORT_KEY = "AS_Geburtsort";
String NAT_EMAIL_KEY = "AS_E-Mail";
String NAT_TELEFON_KEY = "AS_Telefon";
String NAT_TELEFON1_KEY = "AS_Telefon_Festnetz";
String NAT_TELEFON2_KEY = "AS_Telefon_Mobil";
String NAT_STRASSE_KEY = "AS_Strasse";
String NAT_HAUSNUMMER_KEY = "AS_Hausnummer";
String NAT_PLZ_KEY = "AS_PLZ";
String NAT_ORT_KEY = "AS_Ort";
String JUR_KONTAKT_ANREDE_KEY = "AS_Firma_Kontakt_Anrede";
String JUR_NAME_KEY = "AS_Firma_Name";
String JUR_KONTAKT_VORNAME_KEY = "AS_Firma_Kontakt_Vorname";
String JUR_KONTAKT_NACHNAME_KEY = "AS_Firma_Kontakt_Name";
String JUR_KONTAKT_EMAIL_KEY = "AS_Firma_Kontakt_E-Mail";
String JUR_KONTAKT_TELEFON_KEY = "AS_Firma_Kontakt_Telefon";
String JUR_STRASSE_KEY = "AS_Firma_Strasse";
String JUR_HAUSNUMMER_KEY = "AS_Firma_Hausnummer";
String JUR_PLZ_KEY = "AS_Firma_PLZ";
String JUR_ORT_KEY = "AS_Firma_Ort";
@Mapping(target = "anrede", source = NAT_ANREDE_KEY)
@Mapping(target = "firmaName", ignore = true)
@Mapping(target = "vorname", source = NAT_VORNAME_KEY)
@Mapping(target = "nachname", source = NAT_NACHNAME_KEY)
@Mapping(target = "geburtsname", source = NAT_GEBURTSNAME_KEY)
@Mapping(target = "geburtsdatum", source = NAT_GEBURTSDATUM_KEY)
@Mapping(target = "geburtsort", source = NAT_GEBURTSORT_KEY)
@Mapping(target = "email", source = NAT_EMAIL_KEY)
@Mapping(target = "telefon", source = NAT_TELEFON_KEY)
@Mapping(target = "strasse", source = NAT_STRASSE_KEY)
@Mapping(target = "hausnummer", source = NAT_HAUSNUMMER_KEY)
@Mapping(target = "plz", source = NAT_PLZ_KEY)
@Mapping(target = "ort", source = NAT_ORT_KEY)
@Mapping(target = "postfachId", ignore = true)
@Mapping(target = "data", expression = "java( Map.of() )")
Antragsteller mapNaturalPerson(Map<String, String> stringValues);
@Mapping(target = "anrede", source = NAT_ANREDE_KEY)
@Mapping(target = "firmaName", source = JUR_NAME_KEY)
@Mapping(target = "vorname", source = NAT_VORNAME_KEY)
@Mapping(target = "nachname", source = NAT_NACHNAME_KEY)
@Mapping(target = "geburtsname", ignore = true)
@Mapping(target = "geburtsdatum", ignore = true)
@Mapping(target = "geburtsort", ignore = true)
@Mapping(target = "email", source = NAT_EMAIL_KEY)
@Mapping(target = "telefon", source = NAT_TELEFON_KEY)
@Mapping(target = "strasse", source = JUR_STRASSE_KEY)
@Mapping(target = "hausnummer", source = JUR_HAUSNUMMER_KEY)
@Mapping(target = "plz", source = JUR_PLZ_KEY)
@Mapping(target = "ort", source = JUR_ORT_KEY)
@Mapping(target = "postfachId", ignore = true)
@Mapping(target = "data", expression = "java( Map.of() )")
Antragsteller mapJuristicPerson(Map<String, String> stringValues);
default Antragsteller mapAntragsteller(Map<String, String> stringValues) {
var normalizedStringValues = normalizeStringValues(stringValues);
return stringValues.containsKey(JUR_NAME_KEY)
? mapJuristicPerson(normalizedStringValues)
: mapNaturalPerson(normalizedStringValues);
}
@Named("normalizeStringValues")
default Map<String, String> normalizeStringValues(Map<String, String> stringValues) {
return stringValues.entrySet().stream()
.collect(Collectors.toMap(
e -> normalizeStringValueKey(e.getKey()),
Map.Entry::getValue,
this::combineStringValues
));
}
@Named("combineStringValues")
default String combineStringValues(String oldValue, String newValue) {
return oldValue.contains(newValue)
? oldValue
: String.join(" | ", oldValue, newValue);
}
@Named("normalizeStringValueKey")
default String normalizeStringValueKey(String stringValueKey) {
return switch (stringValueKey) {
case NAT_TELEFON1_KEY, NAT_TELEFON2_KEY, JUR_KONTAKT_TELEFON_KEY -> NAT_TELEFON_KEY;
case JUR_KONTAKT_ANREDE_KEY -> NAT_ANREDE_KEY;
case JUR_KONTAKT_VORNAME_KEY -> NAT_VORNAME_KEY;
case JUR_KONTAKT_NACHNAME_KEY -> NAT_NACHNAME_KEY;
case JUR_KONTAKT_EMAIL_KEY -> NAT_EMAIL_KEY;
default -> stringValueKey;
};
}
}
package de.ozgcloud.eingang.semantik.enginebased.formsolutions;
import static de.ozgcloud.eingang.common.formdata.AntragstellerTestFactory.*;
import static de.ozgcloud.eingang.semantik.enginebased.formsolutions.mapper.FSAntragstellerMapper.*;
import java.util.LinkedHashMap;
import java.util.Map;
public class AntragstellerStringValuesTestFactory {
public static final String TELEFON_FESTNETZ = "04101 XXXXX";
public static final String TELEFON_MOBIL = "+49 0176 XXXX XXXX";
public static Map<String, String> createNaturalPerson() {
return createMap(
NAT_ANREDE_KEY, ANREDE,
NAT_VORNAME_KEY, VORNAME,
NAT_NACHNAME_KEY, NACHNAME,
NAT_GEBURTSNAME_KEY, GEBURTSNAME,
NAT_GEBURTSDATUM_KEY, GEBURTSDATUM,
NAT_GEBURTSORT_KEY, GEBURTSORT,
NAT_EMAIL_KEY, EMAIL,
NAT_TELEFON_KEY, TELEFON_MOBIL,
NAT_TELEFON1_KEY, TELEFON_FESTNETZ,
NAT_TELEFON2_KEY, TELEFON_MOBIL,
NAT_STRASSE_KEY, STRASSE,
NAT_HAUSNUMMER_KEY, HAUSNUMMER,
NAT_PLZ_KEY, PLZ,
NAT_ORT_KEY, ORT,
"otherKey", "otherValue"
);
}
public static Map<String, String> createJuristicPerson() {
return createMap(
JUR_KONTAKT_ANREDE_KEY, ANREDE,
JUR_NAME_KEY, FIRMA_NAME,
JUR_KONTAKT_VORNAME_KEY, VORNAME,
NAT_VORNAME_KEY, VORNAME,
JUR_KONTAKT_NACHNAME_KEY, NACHNAME,
NAT_GEBURTSNAME_KEY, GEBURTSNAME,
NAT_GEBURTSDATUM_KEY, GEBURTSDATUM,
NAT_GEBURTSORT_KEY, GEBURTSORT,
JUR_KONTAKT_EMAIL_KEY, EMAIL,
JUR_KONTAKT_TELEFON_KEY, TELEFON,
JUR_STRASSE_KEY, STRASSE,
JUR_HAUSNUMMER_KEY, HAUSNUMMER,
JUR_PLZ_KEY, PLZ,
JUR_ORT_KEY, ORT,
"otherKey", "otherValue"
);
}
private static Map<String, String> createMap(String... keyValuePairs) {
if (keyValuePairs.length % 2 != 0) {
throw new IllegalArgumentException("keyValuePairs must be even");
}
Map<String, String> map = new LinkedHashMap<>();
for (int i = 0; i < keyValuePairs.length; i += 2) {
map.put(keyValuePairs[i], keyValuePairs[i + 1]);
}
return map;
}
}
package de.ozgcloud.eingang.semantik.enginebased.formsolutions;
import java.nio.file.Files;
import java.util.Map;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import de.ozgcloud.common.binaryfile.TempFileUtils;
import de.ozgcloud.common.test.TestUtils;
import de.ozgcloud.eingang.common.errorhandling.TechnicalException;
import de.ozgcloud.eingang.common.formdata.FormData;
import de.ozgcloud.eingang.common.formdata.IncomingFileGroup;
import de.ozgcloud.eingang.common.formdata.IncomingFileGroupTestFactory;
import de.ozgcloud.eingang.common.formdata.IncomingFileTestFactory;
import lombok.SneakyThrows;
public class FSFormDataTestFactory {
private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
private static final String ZIP_CONTENT_TYPE = "application/zip";
private static final String FILE_NAME_ZIP_ATTACHMENT = "formsolutions/attachment-2files.zip";
public static FormData create() {
return createBuilder().build();
}
public static FormData.FormDataBuilder createBuilder() {
return FormData.builder()
.formData(loadFSTestData("formsolutions001.json"))
.attachment(createZipFileAttachmentGroup());
}
@SneakyThrows
private static IncomingFileGroup createZipFileAttachmentGroup() {
var file = TempFileUtils.writeTmpFile(TestUtils.loadFile(FILE_NAME_ZIP_ATTACHMENT));
return IncomingFileGroupTestFactory.createBuilder()
.name(FormSolutionsFilesMapper.FILE_GROUP_ZIP_NAME)
.clearFiles()
.file(IncomingFileTestFactory.createBuilder()
.name(FILE_NAME_ZIP_ATTACHMENT)
.file(file)
.size(Files.size(file.toPath()))
.contentType(ZIP_CONTENT_TYPE)
.build())
.build();
}
public static Map<String, Object> loadFSTestData(String fileName) {
try {
var testData = TestUtils.loadTextFile(fileName);
return OBJECT_MAPPER.readValue(testData, new TypeReference<>() {
});
} catch (JsonProcessingException e) {
throw new TechnicalException("Error parsing test JSON ", e);
}
}
}
...@@ -23,108 +23,65 @@ ...@@ -23,108 +23,65 @@
*/ */
package de.ozgcloud.eingang.semantik.enginebased.formsolutions; package de.ozgcloud.eingang.semantik.enginebased.formsolutions;
import static de.ozgcloud.eingang.common.formdata.AntragstellerTestFactory.*;
import static de.ozgcloud.eingang.common.formdata.FormDataTestFactory.*;
import static de.ozgcloud.eingang.semantik.enginebased.formsolutions.FormSolutionsAntragstellerMapper.*;
import static de.ozgcloud.eingang.semantik.enginebased.formsolutions.FormSolutionsEngineBasedAdapter.*;
import static de.ozgcloud.eingang.semantik.enginebased.formsolutions.FormSolutionsPanelMapper.*;
import static org.assertj.core.api.Assertions.*; import static org.assertj.core.api.Assertions.*;
import static org.mockito.ArgumentMatchers.*; import static org.mockito.ArgumentMatchers.*;
import static org.mockito.Mockito.*; import static org.mockito.Mockito.*;
import java.util.List; import org.junit.jupiter.api.BeforeEach;
import java.util.Map;
import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Spy; import org.mockito.Spy;
import de.ozgcloud.eingang.common.formdata.Antragsteller; 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.FormData;
import de.ozgcloud.eingang.common.formdata.FormDataTestFactory; import de.ozgcloud.eingang.semantik.enginebased.formsolutions.mapper.FSAntragstellerMapper;
class FormSolutionsAntragstellerMapperTest { class FormSolutionsAntragstellerMapperTest {
@Spy @Spy
private final FormSolutionsAntragstellerMapper mapper = new FormSolutionsAntragstellerMapper(); @InjectMocks
private FormSolutionsAntragstellerMapper mapper;
@Mock
private FSAntragstellerMapper fsAntragstellerMapper;
@DisplayName("Parse formData") @DisplayName("Parse formData")
@Nested @Nested
class TestParseFormData { class TestParseFormData {
private static final String ANTRAGSTELLER_NAME_PANEL_IDENTIFIER = "AS_Name1";
private static final List<Map<String, Object>> ANTRAGSTELLER_PANEL_CONTENT_LIST = List.of(
Map.of(IDENTIFIER_KEY, ANTRAGSTELLER_NAME_PANEL_IDENTIFIER),
Map.of(COMPONENTS, List.of(
Map.of(IDENTIFIER_KEY, VORNAME_KEY, STRING_VALUE, VORNAME),
Map.of(IDENTIFIER_KEY, NACHNAME_KEY, STRING_VALUE, NACHNAME))));
private static final Map<String, Object> ASSISTANT_MAP = Map.of(PANELS, List.of(
Map.of(IDENTIFIER_KEY, ANTRAGSTELLER_PANEL_IDENTIFIER),
Map.of(COMPONENTS, ANTRAGSTELLER_PANEL_CONTENT_LIST)));
private final FormData formData = FormDataTestFactory.createBuilder().antragsteller(null)
.formData(Map.of(
SIMPLE_VALUE_KEY, SIMPLE_VALUE,
FormSolutionsAntragstellerMapper.POSTKORBHANDLE, POSTFACH_ID,
ASSISTANT, ASSISTANT_MAP))
.build();
@Test private final FormData formData = FSFormDataTestFactory.create();
void shouldParseAntragsteller() {
var expectedAntragsteller = Antragsteller.builder().vorname(VORNAME).nachname(NACHNAME).postfachId(POSTFACH_ID).build();
var identifierValueMap = Map.of(VORNAME_KEY, VORNAME, NACHNAME_KEY, NACHNAME);
try (var valuesParser = mockStatic(IdentifierValueParser.class)) {
valuesParser.when(() -> IdentifierValueParser.parsePanelsData(any())).thenReturn(identifierValueMap);
var resultFormData = parseFormData(); private final Antragsteller antragsteller = AntragstellerTestFactory.create();
assertThat(resultFormData.getAntragsteller()).usingRecursiveComparison().isEqualTo(expectedAntragsteller); @BeforeEach
} void mock() {
when(fsAntragstellerMapper.mapAntragsteller(any())).thenReturn(antragsteller);
} }
@DisplayName("should call map Antragsteller")
@Test @Test
@DisplayName("should process Antragsteller data only") void shouldCallMapAntragsteller() {
void shouldNotChangeAnother() { parseFormData();
var resultFormData = parseFormData();
assertThat(resultFormData).usingRecursiveComparison().ignoringFields("antragsteller", "formData").isEqualTo(formData); verify(fsAntragstellerMapper).mapAntragsteller(IdentifierValueParser.parsePanelsData(formData));
assertThat(resultFormData.getFormData()).containsAllEntriesOf(
Map.of(SIMPLE_VALUE_KEY, FormDataTestFactory.SIMPLE_VALUE, ASSISTANT, ASSISTANT_MAP));
} }
private FormData parseFormData() { @DisplayName("should return with antragsteller")
return mapper.parseFormData(formData);
}
@DisplayName("build antragsteller")
@Nested
class TestBuildAntragsteller {
@Test @Test
void shouldHaveVorname() { void shouldReturnWithAntragsteller() {
var antragsteller = buildAntragsteller(); var resultFormData = parseFormData();
assertThat(antragsteller.getVorname()).isEqualTo(VORNAME); assertThat(resultFormData.getAntragsteller()).isEqualTo(antragsteller);
} }
@Test private FormData parseFormData() {
void shouldHaveNachname() { return mapper.parseFormData(formData);
var antragsteller = buildAntragsteller();
assertThat(antragsteller.getNachname()).isEqualTo(NACHNAME);
} }
@Test
void shouldHavePostfachId() {
var antragsteller = buildAntragsteller();
assertThat(antragsteller.getPostfachId()).isEqualTo(POSTFACH_ID);
} }
private Antragsteller buildAntragsteller() {
return mapper.buildAntragsteller(formData);
}
}
}
} }
\ No newline at end of file
...@@ -26,12 +26,9 @@ package de.ozgcloud.eingang.semantik.enginebased.formsolutions; ...@@ -26,12 +26,9 @@ package de.ozgcloud.eingang.semantik.enginebased.formsolutions;
import static de.ozgcloud.eingang.semantik.enginebased.formsolutions.FormSolutionsEngineBasedAdapter.*; import static de.ozgcloud.eingang.semantik.enginebased.formsolutions.FormSolutionsEngineBasedAdapter.*;
import static org.assertj.core.api.Assertions.*; import static org.assertj.core.api.Assertions.*;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Map; import java.util.Map;
import java.util.Optional;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
...@@ -39,40 +36,25 @@ import org.springframework.test.context.ActiveProfiles; ...@@ -39,40 +36,25 @@ import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.bean.override.mockito.MockitoBean; import org.springframework.test.context.bean.override.mockito.MockitoBean;
import org.springframework.test.context.bean.override.mockito.MockitoSpyBean; import org.springframework.test.context.bean.override.mockito.MockitoSpyBean;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import de.ozgcloud.common.binaryfile.TempFileUtils;
import de.ozgcloud.common.test.TestUtils;
import de.ozgcloud.eingang.common.errorhandling.TechnicalException;
import de.ozgcloud.eingang.common.formdata.FormData; import de.ozgcloud.eingang.common.formdata.FormData;
import de.ozgcloud.eingang.common.formdata.FormDataTestFactory; import de.ozgcloud.eingang.common.formdata.FormDataTestFactory;
import de.ozgcloud.eingang.common.formdata.IncomingFileGroupTestFactory;
import de.ozgcloud.eingang.common.formdata.IncomingFileTestFactory;
import de.ozgcloud.eingang.common.formdata.ZustaendigeStelle; import de.ozgcloud.eingang.common.formdata.ZustaendigeStelle;
import de.ozgcloud.eingang.semantik.SemantikAdapter; import de.ozgcloud.eingang.semantik.SemantikAdapter;
import lombok.SneakyThrows;
@SpringBootTest @SpringBootTest
@ActiveProfiles({ "local", "itcase" }) @ActiveProfiles({ "local", "itcase" })
public class FormSolutionsEngineBasedAdapterITCase { public class FormSolutionsEngineBasedAdapterITCase {
private static final String ZIP_CONTENT_TYPE = "application/zip";
private static final String FILE_NAME_ZIP_ATTACHMENT = "formsolutions/attachment-2files.zip";
@MockitoBean @MockitoBean
private SemantikAdapter semantikAdapter; private SemantikAdapter semantikAdapter;
@MockitoSpyBean @MockitoSpyBean
private FormSolutionsEngineBasedAdapter engineAdapter; private FormSolutionsEngineBasedAdapter engineAdapter;
private final ObjectMapper objectMapper = new ObjectMapper();
@Nested @Nested
class TestEngineBasedAdapter { class TestEngineBasedAdapter {
private final FormData formData = prepareTestData(); private final FormData formData = FSFormDataTestFactory.create();
@Test @Test
void shouldMap() { void shouldMap() {
...@@ -248,42 +230,20 @@ public class FormSolutionsEngineBasedAdapterITCase { ...@@ -248,42 +230,20 @@ public class FormSolutionsEngineBasedAdapterITCase {
.extracting(ZustaendigeStelle::getOrganisationseinheitenId) .extracting(ZustaendigeStelle::getOrganisationseinheitenId)
.containsExactly("test"); .containsExactly("test");
} }
}
}
private FormData prepareTestData() { @DisplayName("should map organisationseinheitenId for weihnachtsmarkt")
var fileGroup = IncomingFileGroupTestFactory.createBuilder() @Test
.name(FormSolutionsFilesMapper.FILE_GROUP_ZIP_NAME) void shouldMapOrganisationseinheitenIdForWeihnachtsmarkt() {
.clearFiles() var weihnachtsmarktFormData = FSFormDataTestFactory.createBuilder()
.file(IncomingFileTestFactory.createBuilder() .formData(FSFormDataTestFactory.loadFSTestData("Weihnachtsmarkt_Standanmeldung_form-data.json"))
.name(FILE_NAME_ZIP_ATTACHMENT)
.file(asFile(FILE_NAME_ZIP_ATTACHMENT))
.size(getFileSize(FILE_NAME_ZIP_ATTACHMENT))
.contentType(ZIP_CONTENT_TYPE)
.build())
.build(); .build();
return FormData.builder().formData(getTestDataFromFile()).attachment(fileGroup).build(); var data = engineAdapter.parseFormData(weihnachtsmarktFormData);
}
@SneakyThrows
private long getFileSize(String fileName) {
Path filePath = Path.of(FormSolutionsEngineBasedAdapterITCase.class.getClassLoader().getResource(fileName).toURI());
return Files.size(filePath);
}
private Map<String, Object> getTestDataFromFile() { assertThat(data.getZustaendigeStelles())
try { .extracting(ZustaendigeStelle::getOrganisationseinheitenId)
var testData = TestUtils.loadTextFile("formsolutions001.json"); .containsExactly("5677");
return objectMapper.readValue(testData, new TypeReference<>() {
});
} catch (JsonProcessingException e) {
var msg = Optional.ofNullable(e.getCause()).map(Throwable::getMessage).orElseGet(e::getMessage);
throw new TechnicalException("Error parsing test JSON " + msg, e);
} }
} }
private File asFile(String path) {
return TempFileUtils.writeTmpFile(TestUtils.loadFile(path));
} }
} }
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
package de.ozgcloud.eingang.semantik.enginebased.formsolutions; package de.ozgcloud.eingang.semantik.enginebased.formsolutions;
import static de.ozgcloud.eingang.semantik.enginebased.formsolutions.FormSolutionsEngineBasedAdapter.*; import static de.ozgcloud.eingang.semantik.enginebased.formsolutions.FormSolutionsEngineBasedAdapter.*;
import static de.ozgcloud.eingang.semantik.enginebased.formsolutions.FormSolutionsHeaderMapper.*;
import static org.assertj.core.api.Assertions.*; import static org.assertj.core.api.Assertions.*;
import static org.mockito.ArgumentMatchers.*; import static org.mockito.ArgumentMatchers.*;
import static org.mockito.Mockito.*; import static org.mockito.Mockito.*;
...@@ -86,7 +87,7 @@ class FormSolutionsEngineBasedAdapterTest { ...@@ -86,7 +87,7 @@ class FormSolutionsEngineBasedAdapterTest {
private final Map<String, Object> formDataMap = Map.of(ASSISTANT, "testValue", private final Map<String, Object> formDataMap = Map.of(ASSISTANT, "testValue",
ANLIEGEN_ID, "testValue2", KOMMUNALVERWALTUNG_ID, "testValue3", ANLIEGEN_ID, "testValue2", KOMMUNALVERWALTUNG_ID, "testValue3",
FormSolutionsAntragstellerMapper.POSTKORBHANDLE, "testValue4"); POSTKORBHANDLE, "testValue4");
private final FormData formData = FormData.builder().formData(formDataMap).build(); private final FormData formData = FormData.builder().formData(formDataMap).build();
@Test @Test
...@@ -114,7 +115,7 @@ class FormSolutionsEngineBasedAdapterTest { ...@@ -114,7 +115,7 @@ class FormSolutionsEngineBasedAdapterTest {
void shouldRemovePostkorbhandle() { void shouldRemovePostkorbhandle() {
var cleanedFormData = adapter.removeProcessedData(formData); var cleanedFormData = adapter.removeProcessedData(formData);
assertThat(cleanedFormData.getFormData()).doesNotContainKey(FormSolutionsAntragstellerMapper.POSTKORBHANDLE); assertThat(cleanedFormData.getFormData()).doesNotContainKey(POSTKORBHANDLE);
} }
} }
} }
......
...@@ -37,6 +37,7 @@ import org.junit.jupiter.api.Test; ...@@ -37,6 +37,7 @@ import org.junit.jupiter.api.Test;
import de.ozgcloud.eingang.common.formdata.FormData; import de.ozgcloud.eingang.common.formdata.FormData;
import de.ozgcloud.eingang.common.formdata.FormDataTestFactory; import de.ozgcloud.eingang.common.formdata.FormDataTestFactory;
import de.ozgcloud.eingang.semantik.enginebased.formsolutions.mapper.FSAntragstellerMapper;
class IdentifierValueParserTest { class IdentifierValueParserTest {
...@@ -44,10 +45,10 @@ class IdentifierValueParserTest { ...@@ -44,10 +45,10 @@ class IdentifierValueParserTest {
private static final List<Map<String, Object>> ANTRAGSTELLER_PANEL_CONTENT_LIST = List.of( private static final List<Map<String, Object>> ANTRAGSTELLER_PANEL_CONTENT_LIST = List.of(
Map.of(IDENTIFIER_KEY, ANTRAGSTELLER_NAME_PANEL_IDENTIFIER), Map.of(IDENTIFIER_KEY, ANTRAGSTELLER_NAME_PANEL_IDENTIFIER),
Map.of(COMPONENTS, List.of( Map.of(COMPONENTS, List.of(
Map.of(IDENTIFIER_KEY, VORNAME_KEY, STRING_VALUE, VORNAME), Map.of(IDENTIFIER_KEY, FSAntragstellerMapper.NAT_VORNAME_KEY, STRING_VALUE, VORNAME),
Map.of(IDENTIFIER_KEY, NACHNAME_KEY, STRING_VALUE, NACHNAME)))); Map.of(IDENTIFIER_KEY, FSAntragstellerMapper.NAT_NACHNAME_KEY, STRING_VALUE, NACHNAME))));
private static final Map<String, Object> ASSISTANT_MAP = Map.of(PANELS, List.of( public static final Map<String, Object> ASSISTANT_MAP = Map.of(PANELS, List.of(
Map.of(IDENTIFIER_KEY, ANTRAGSTELLER_PANEL_IDENTIFIER), Map.of(COMPONENTS, ANTRAGSTELLER_PANEL_CONTENT_LIST))); Map.of(IDENTIFIER_KEY, ANTRAGSTELLER_PANEL_IDENTIFIER), Map.of(COMPONENTS, ANTRAGSTELLER_PANEL_CONTENT_LIST)));
private FormData formData = FormDataTestFactory.createBuilder() private FormData formData = FormDataTestFactory.createBuilder()
...@@ -57,7 +58,7 @@ class IdentifierValueParserTest { ...@@ -57,7 +58,7 @@ class IdentifierValueParserTest {
@Test @Test
void shoudParseData() { void shoudParseData() {
var expectedMap = Map.of(VORNAME_KEY, VORNAME, NACHNAME_KEY, NACHNAME); var expectedMap = Map.of(FSAntragstellerMapper.NAT_VORNAME_KEY, VORNAME, FSAntragstellerMapper.NAT_NACHNAME_KEY, NACHNAME);
var stringValueMap = IdentifierValueParser.parsePanelsData(formData); var stringValueMap = IdentifierValueParser.parsePanelsData(formData);
......
package de.ozgcloud.eingang.semantik.enginebased.formsolutions.mapper;
import static de.ozgcloud.eingang.common.formdata.AntragstellerTestFactory.*;
import static de.ozgcloud.eingang.semantik.enginebased.formsolutions.AntragstellerStringValuesTestFactory.*;
import static org.assertj.core.api.Assertions.*;
import java.util.Map;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.mapstruct.factory.Mappers;
import de.ozgcloud.eingang.common.formdata.Antragsteller;
import de.ozgcloud.eingang.semantik.enginebased.formsolutions.AntragstellerStringValuesTestFactory;
class FSAntragstellerMapperTest {
private final FSAntragstellerMapper mapper = Mappers.getMapper(FSAntragstellerMapper.class);
@DisplayName("map Antragsteller")
@Nested
class TestMapAntragsteller {
@DisplayName("with natural person")
@Nested
class TestWithNaturalPerson {
private final Map<String, String> stringValuesNaturalPerson = AntragstellerStringValuesTestFactory.createNaturalPerson();
@DisplayName("should map anrede")
@Test
void shouldMapAnrede() {
var antragsteller = mapAntragsteller();
assertThat(antragsteller.getAnrede()).isEqualTo(ANREDE);
}
@DisplayName("should not map firmaName")
@Test
void shouldNotMapFirmaName() {
var antragsteller = mapAntragsteller();
assertThat(antragsteller.getFirmaName()).isNull();
}
@DisplayName("should map vorname")
@Test
void shouldMapVorname() {
var antragsteller = mapAntragsteller();
assertThat(antragsteller.getVorname()).isEqualTo(VORNAME);
}
@DisplayName("should map nachname")
@Test
void shouldMapNachname() {
var antragsteller = mapAntragsteller();
assertThat(antragsteller.getNachname()).isEqualTo(NACHNAME);
}
@DisplayName("should map geburtsname")
@Test
void shouldMapGeburtsname() {
var antragsteller = mapAntragsteller();
assertThat(antragsteller.getGeburtsname()).isEqualTo(GEBURTSNAME);
}
@DisplayName("should map geburtsdatum")
@Test
void shouldMapGeburtsdatum() {
var antragsteller = mapAntragsteller();
assertThat(antragsteller.getGeburtsdatum()).isEqualTo(GEBURTSDATUM);
}
@DisplayName("should map geburtsort")
@Test
void shouldMapGeburtsort() {
var antragsteller = mapAntragsteller();
assertThat(antragsteller.getGeburtsort()).isEqualTo(GEBURTSORT);
}
@DisplayName("should map email")
@Test
void shouldMapEmail() {
var antragsteller = mapAntragsteller();
assertThat(antragsteller.getEmail()).isEqualTo(EMAIL);
}
@DisplayName("should map telefon")
@Test
void shouldMapTelefon() {
var antragsteller = mapAntragsteller();
assertThat(antragsteller.getTelefon()).isEqualTo(TELEFON_MOBIL + " | " + TELEFON_FESTNETZ);
}
@DisplayName("should map strasse")
@Test
void shouldMapStrasse() {
var antragsteller = mapAntragsteller();
assertThat(antragsteller.getStrasse()).isEqualTo(STRASSE);
}
@DisplayName("should map hausnummer")
@Test
void shouldMapHausnummer() {
var antragsteller = mapAntragsteller();
assertThat(antragsteller.getHausnummer()).isEqualTo(HAUSNUMMER);
}
@DisplayName("should map PLZ")
@Test
void shouldMapPlz() {
var antragsteller = mapAntragsteller();
assertThat(antragsteller.getPlz()).isEqualTo(PLZ);
}
@DisplayName("should map ort")
@Test
void shouldMapOrt() {
var antragsteller = mapAntragsteller();
assertThat(antragsteller.getOrt()).isEqualTo(ORT);
}
@DisplayName("should map empty data")
@Test
void shouldMapEmptyData() {
var antragsteller = mapAntragsteller();
assertThat(antragsteller.getData()).isEmpty();
}
private Antragsteller mapAntragsteller() {
return mapper.mapAntragsteller(stringValuesNaturalPerson);
}
}
@DisplayName("with juristic person")
@Nested
class TestWithJuristicPerson {
private final Map<String, String> stringValuesJuristicPerson = AntragstellerStringValuesTestFactory.createJuristicPerson();
@DisplayName("should map anrede")
@Test
void shouldMapAnrede() {
var antragsteller = mapAntragsteller();
assertThat(antragsteller.getAnrede()).isEqualTo(ANREDE);
}
@DisplayName("should map firmaName")
@Test
void shouldMapFirmaName() {
var antragsteller = mapAntragsteller();
assertThat(antragsteller.getFirmaName()).isEqualTo(FIRMA_NAME);
}
@DisplayName("should map vorname")
@Test
void shouldMapVorname() {
var antragsteller = mapAntragsteller();
assertThat(antragsteller.getVorname()).isEqualTo(VORNAME);
}
@DisplayName("should map nachname")
@Test
void shouldMapNachname() {
var antragsteller = mapAntragsteller();
assertThat(antragsteller.getNachname()).isEqualTo(NACHNAME);
}
@DisplayName("should not map geburtsname")
@Test
void shouldNotMapGeburtsname() {
var antragsteller = mapAntragsteller();
assertThat(antragsteller.getGeburtsname()).isNull();
}
@DisplayName("should not map geburtsdatum")
@Test
void shouldNotMapGeburtsdatum() {
var antragsteller = mapAntragsteller();
assertThat(antragsteller.getGeburtsdatum()).isNull();
}
@DisplayName("should not map geburtsort")
@Test
void shouldNotMapGeburtsort() {
var antragsteller = mapAntragsteller();
assertThat(antragsteller.getGeburtsort()).isNull();
}
@DisplayName("should map email")
@Test
void shouldMapEmail() {
var antragsteller = mapAntragsteller();
assertThat(antragsteller.getEmail()).isEqualTo(EMAIL);
}
@DisplayName("should map telefon")
@Test
void shouldMapTelefon() {
var antragsteller = mapAntragsteller();
assertThat(antragsteller.getTelefon()).isEqualTo(TELEFON);
}
@DisplayName("should map strasse")
@Test
void shouldMapStrasse() {
var antragsteller = mapAntragsteller();
assertThat(antragsteller.getStrasse()).isEqualTo(STRASSE);
}
@DisplayName("should map hausnummer")
@Test
void shouldMapHausnummer() {
var antragsteller = mapAntragsteller();
assertThat(antragsteller.getHausnummer()).isEqualTo(HAUSNUMMER);
}
@DisplayName("should map PLZ")
@Test
void shouldMapPlz() {
var antragsteller = mapAntragsteller();
assertThat(antragsteller.getPlz()).isEqualTo(PLZ);
}
@DisplayName("should map ort")
@Test
void shouldMapOrt() {
var antragsteller = mapAntragsteller();
assertThat(antragsteller.getOrt()).isEqualTo(ORT);
}
@DisplayName("should map empty data")
@Test
void shouldMapEmptyData() {
var antragsteller = mapAntragsteller();
assertThat(antragsteller.getData()).isEmpty();
}
private Antragsteller mapAntragsteller() {
return mapper.mapAntragsteller(stringValuesJuristicPerson);
}
}
}
}
\ No newline at end of file
This diff is collapsed.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment