diff --git a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/formbased/mantelantrag/MantelantragITCase.java b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/formbased/mantelantrag/MantelantragITCase.java index 6c2281bd2b68f3051229e6c6be408b109f9b06c8..c1ff751f7c17ff4a56869bdda7a7e842a491e2f0 100644 --- a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/formbased/mantelantrag/MantelantragITCase.java +++ b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/formbased/mantelantrag/MantelantragITCase.java @@ -1,5 +1,6 @@ package de.ozgcloud.eingang.semantik.formbased.mantelantrag; +import static de.ozgcloud.eingang.common.formdata.FormDataTestFactory.*; import static org.assertj.core.api.Assertions.*; import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; @@ -7,78 +8,157 @@ import static org.mockito.Mockito.*; import java.io.File; import java.nio.file.Files; import java.nio.file.Path; +import java.util.Collections; import java.util.List; +import java.util.Optional; +import org.junit.jupiter.api.BeforeAll; 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.mockito.ArgumentCaptor; import org.mockito.Captor; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.boot.test.mock.mockito.SpyBean; import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.DynamicPropertyRegistry; +import org.springframework.test.context.DynamicPropertySource; +import org.springframework.test.context.TestPropertySource; import de.ozgcloud.common.binaryfile.TempFileUtils; import de.ozgcloud.common.test.TestUtils; import de.ozgcloud.eingang.Application; import de.ozgcloud.eingang.common.formdata.FormData; import de.ozgcloud.eingang.common.formdata.IncomingFileTestFactory; -import de.ozgcloud.eingang.router.VorgangService; +import de.ozgcloud.eingang.router.VorgangRemoteService; import de.ozgcloud.eingang.semantik.SemantikAdapter; import de.ozgcloud.eingang.semantik.enginebased.formsolutions.FormSolutionsEngineBasedAdapterITCase; import lombok.SneakyThrows; @ActiveProfiles({ "local", "itcase" }) -@SpringBootTest(classes = Application.class, properties = { "ozgcloud.xta.identifiers=afmsh:ozg-cloud-utopia-test" }) +@SpringBootTest(classes = Application.class) public class MantelantragITCase { private static final String FILE_NAME_XDOMEA = "mantelantrag/4620-EH6C_b3c9168a-6ae9-4361-8b2f-6837bb341021_Geschaeftsgang.Geschaeftsgang.0201.xml"; private static final String FILE_NAME_MANTELANTRAG = "mantelantrag/4620-EH6C_7d703670-15b6-42b2-8cd1-88a7e4c494b9_Antrag_Max_Mustermann_SGBXII.xml"; @MockBean - VorgangService vorgangService; + VorgangRemoteService vorgangRemoteService; @SpyBean SemantikAdapter semantikAdapter; + private FormData formData; + + @Captor + ArgumentCaptor<FormData> formDataCaptor; + + @Captor + ArgumentCaptor<Optional<String>> oeIdCaptor; + + @Autowired + MantelantragZustaendigeStelleMapper mantelantragZustaendigeStelleMapper; + + static List<String> XTA_IDENTIFIERS = Collections.emptyList(); + + @BeforeEach + void mock() { + clearInvocations(vorgangRemoteService); + doReturn(VORGANG_ID).when(vorgangRemoteService).createVorgang(any(FormData.class), any()); + formData = prepareTestData(); + mantelantragZustaendigeStelleMapper.init(); + } + + @DynamicPropertySource + static void dynamicProperties(DynamicPropertyRegistry registry) { + registry.add("ozgcloud.xta.identifiers", () -> XTA_IDENTIFIERS); + } + + @DisplayName("with no matching zusstaendige stelle") @Nested - class TestZustaendigeStelle { + class TestWithNoMatchingZusstaendigeStelle { - private FormData formData; + @BeforeAll + static void setup() { + XTA_IDENTIFIERS = List.of("afmsh:unknown"); + } - @Captor - ArgumentCaptor<FormData> formDataCaptor; + @DisplayName("should create one vorgang with no matching zustaendigeStelle") + @Test + void shouldCreateOneVorgangWithNoMatchingZustaendigeStelle() { + semantikAdapter.processFormData(formData); - private static final String VORGANG_ID_1 = "vorgangId1"; - private static final List<String> VORGANG_IDS = List.of(VORGANG_ID_1, "vorgangId2"); + verify(vorgangRemoteService, times(1)).createVorgang(formDataCaptor.capture(), oeIdCaptor.capture()); + assertThat(oeIdCaptor.getValue()).isEmpty(); + } + } + @DisplayName("with one matching zustaendige stelle") + @Nested + @TestPropertySource(properties = "ozgcloud.xta.identifiers=afmsh:ozg-cloud-utopia-test") + class TestWithOneMatchingZustaendigeStelle { + @BeforeAll + static void setup() { + XTA_IDENTIFIERS = List.of("afmsh:ozg-cloud-utopia-test"); + } - @BeforeEach - void mock() { - doReturn(VORGANG_IDS).when(vorgangService).createVorgangs(any(FormData.class)); - formData = prepareTestData(); + @DisplayName("should create one vorgang with no matching zustaendigeStelle") + @Test + void shouldCreateOneVorgangWithNoMatchingZustaendigeStelle() { + semantikAdapter.processFormData(formData); + + verify(vorgangRemoteService, times(1)).createVorgang(formDataCaptor.capture(), oeIdCaptor.capture()); + assertThat(oeIdCaptor.getValue()).contains("123"); + } + } + + @DisplayName("with two matching zustaendige stelle") + @Nested + class TestWithTwoMatchingZustaendigeStelle { + + @BeforeAll + static void setup() { + XTA_IDENTIFIERS = List.of("afmsh:ozg-cloud-utopia-test", "gae:ozg-cloud-itcase-test"); } - @DisplayName("should return first vorgangId") + @DisplayName("should create two vorangs with partially matching zustaendigeStelle") @Test - void shouldReturnFirstVorgangId() { - var result = semantikAdapter.processFormData(formData); + void shouldCreateTwoVorangsWithPartiallyMatchingZustaendigeStelle() { + semantikAdapter.processFormData(formData); - assertThat(result).isEqualTo(VORGANG_ID_1); + verify(vorgangRemoteService, times(2)).createVorgang(formDataCaptor.capture(), oeIdCaptor.capture()); + assertThat(oeIdCaptor.getAllValues()).contains(Optional.of("123"), Optional.of("444")); } + } + @DisplayName("with three mathcing zustaendige stelle") + @Nested + class TestWithThreeMathcingZustaendigeStelle { + @BeforeAll + static void setup() { + XTA_IDENTIFIERS = List.of("afmsh:ozg-cloud-utopia-test", "gae:ozg-cloud-itcase-test", "afmsh:ozg-cloud-bad-segeberg-kreis"); + } + + @DisplayName("should create three vorgangs with matching zustaendigeStelle") @Test - void zustaendigeStelleIsUtopia() { + void shouldCreateThreeVorgangsWithMatchingZustaendigeStelle() { semantikAdapter.processFormData(formData); - verify(vorgangService).createVorgangs(formDataCaptor.capture()); - var firstZustaendigeStelle = formDataCaptor.getValue().getZustaendigeStelles().getFirst(); - assertThat(firstZustaendigeStelle.getOrganisationseinheitenId()).isEqualTo("123"); + verify(vorgangRemoteService, times(3)).createVorgang(formDataCaptor.capture(), oeIdCaptor.capture()); + assertThat(oeIdCaptor.getAllValues()).contains(Optional.of("123"), Optional.of("321"), Optional.of("444")); } + } + + @DisplayName("should return first vorgangId") + @Test + void shouldReturnFirstVorgangId() { + var result = semantikAdapter.processFormData(formData); + assertThat(result).isEqualTo(VORGANG_ID); } private FormData prepareTestData() { diff --git a/semantik-adapter/src/test/resources/mantelantrag/4620-EH6C_7d703670-15b6-42b2-8cd1-88a7e4c494b9_Antrag_Max_Mustermann_SGBXII.xml b/semantik-adapter/src/test/resources/mantelantrag/4620-EH6C_7d703670-15b6-42b2-8cd1-88a7e4c494b9_Antrag_Max_Mustermann_SGBXII.xml index 6c7c4e94203d54e765188787a2ef449b7dfcda02..3872cdb8d4bbff8112620fdc044f0bc70aeb6468 100644 --- a/semantik-adapter/src/test/resources/mantelantrag/4620-EH6C_7d703670-15b6-42b2-8cd1-88a7e4c494b9_Antrag_Max_Mustermann_SGBXII.xml +++ b/semantik-adapter/src/test/resources/mantelantrag/4620-EH6C_7d703670-15b6-42b2-8cd1-88a7e4c494b9_Antrag_Max_Mustermann_SGBXII.xml @@ -83,7 +83,7 @@ <zustellung_nachrichtenbroker2>afmsh:ozg-cloud-bad-segeberg-kreis</zustellung_nachrichtenbroker2> <zustellung_email_ln2/> <zustellung_webservice2/> - <kontaktsystem_oeid3/> + <kontaktsystem_oeid3>444</kontaktsystem_oeid3> <OrganisationseinheitenBEZEICHNUNG3/> <zust_strasse3/> <zust_hausnummer3/> @@ -93,7 +93,7 @@ <zust_telefonnummer3/> <zust_faxnummer3/> <zust_emailadresse3/> - <zustellung_nachrichtenbroker3/> + <zustellung_nachrichtenbroker3>gae:ozg-cloud-itcase-test</zustellung_nachrichtenbroker3>> <zustellung_email_ln3/> <zustellung_webservice3/> <grund>Hilfe</grund>