diff --git a/router/src/main/java/de/ozgcloud/eingang/router/VorgangService.java b/router/src/main/java/de/ozgcloud/eingang/router/VorgangService.java index ca9264cd8aee24c77e0b46ff92dc5c9ced1ade56..91d203b2fd562200dc9f9df7990e63d2dadaac99 100644 --- a/router/src/main/java/de/ozgcloud/eingang/router/VorgangService.java +++ b/router/src/main/java/de/ozgcloud/eingang/router/VorgangService.java @@ -40,12 +40,12 @@ public class VorgangService { private final VorgangRemoteService remoteService; - public List<String> createVorgangs(FormData formData) { + public String createVorgang(FormData formData) { var preparedFormData = preserveConsistency(formData); var organisationseinheitIds = getOrganisationsEinheitIds(formData); return organisationseinheitIds.isEmpty() - ? List.of(createVorgangOnMissingZustaendigeStelle(preparedFormData)) - : createMultipleVorgangs(preparedFormData, organisationseinheitIds); + ? createVorgangOnMissingZustaendigeStelle(preparedFormData) + : createMultipleVorgangs(preparedFormData, organisationseinheitIds).getFirst(); } String createVorgangOnMissingZustaendigeStelle(FormData formData) { diff --git a/router/src/test/java/de/ozgcloud/eingang/router/VorgangServiceTest.java b/router/src/test/java/de/ozgcloud/eingang/router/VorgangServiceTest.java index c25e940c72f3960c24137a48911fec615f85042d..e3b420185c604cac46ab110ca801bac8cae7f5bc 100644 --- a/router/src/test/java/de/ozgcloud/eingang/router/VorgangServiceTest.java +++ b/router/src/test/java/de/ozgcloud/eingang/router/VorgangServiceTest.java @@ -57,58 +57,107 @@ class VorgangServiceTest { @Mock private VorgangRemoteService remoteService; - private static final String VORGANG_ID_2 = "vorgangId2"; private static final String ORGANISATIONSEINHEIT_ID_2 = "08150816"; - public static final List<String> ORGANISATIONSEINHEIT_IDS = List.of(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEIT_ID, - ORGANISATIONSEINHEIT_ID_2); - - private FormData formData; - private FormData preservedFormData; - - @BeforeEach - void setup() { - formData = FormDataTestFactory.create(); - preservedFormData = FormDataTestFactory.createBuilder() - .zustaendigeStelle(ZustaendigeStelleTestFactory.createBuilder() - .organisationseinheitenId(ORGANISATIONSEINHEIT_ID_2) - .build()) - .build(); - } - - @DisplayName("Create vorgangs") + @DisplayName("Create vorgang") @Nested class TestCreateVorgangs { + private FormData formData; + private FormData preservedFormData; @BeforeEach - void mockEingangMapper() { - doReturn(preservedFormData).when(service).preserveConsistency(formData); + void setup() { + formData = FormDataTestFactory.create(); + preservedFormData = FormDataTestFactory.createBuilder() + .zustaendigeStelle(ZustaendigeStelleTestFactory.createBuilder() + .organisationseinheitenId(ORGANISATIONSEINHEIT_ID_2) + .build()) + .build(); + doReturn(preservedFormData).when(service).preserveConsistency(any()); + } + + @DisplayName("should call preserve consistency") + @Test + void shouldCallPreserveConsistency() { + mockOrganisationseinheitId(); + + createVorgang(); + + verify(service).preserveConsistency(eq(formData)); + } + + @DisplayName("should call get organisationseinheit ids") + @Test + void shouldCallGetOrganisationseinheitIds() { + mockOrganisationseinheitId(); + + createVorgang(); + + verify(service).getOrganisationsEinheitIds(eq(formData)); + } + + @DisplayName("should call create multiple vorgangs") + @Test + void shouldCallCreateMultipleVorgangs() { + var organisationseinheitIds = List.of(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEIT_ID, ORGANISATIONSEINHEIT_ID_2); + mockOrganisationseinheitIds(organisationseinheitIds); + + createVorgang(); + + verify(service).createMultipleVorgangs( + eq(preservedFormData), + eq(organisationseinheitIds)); + } + + @DisplayName("should return first vorgang id with multiple organisationseinheits") + @Test + void shouldReturnFirstVorgangIdWithMultipleOrganisationseinheits() { + var organisationseinheitIds = List.of(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEIT_ID, ORGANISATIONSEINHEIT_ID_2); + mockOrganisationseinheitIds(organisationseinheitIds); + + var vorgangIds = createVorgang(); + + assertThat(vorgangIds).isEqualTo(VORGANG_ID); + } + + private void mockOrganisationseinheitId() { + doReturn(List.of(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEIT_ID)).when(service).getOrganisationsEinheitIds(any()); + doReturn(List.of(VORGANG_ID)).when(service).createMultipleVorgangs(any(), any()); } - @DisplayName("should return multiple vorgang ids for each organisationseinheit") + private void mockOrganisationseinheitIds(List<String> organisationseinheitIds) { + doReturn(organisationseinheitIds).when(service) + .getOrganisationsEinheitIds(any()); + doReturn(List.of(VORGANG_ID, "otherId")).when(service).createMultipleVorgangs(any(), any()); + } + + @DisplayName("should call create vorgang on missing zustaendige stelle if organisationseinheit is missing") @Test - void shouldReturnMultipleVorgangIdsForEachOrganisationseinheit() { - doReturn(ORGANISATIONSEINHEIT_IDS).when(service).getOrganisationsEinheitIds(formData); - doReturn(List.of(VORGANG_ID, VORGANG_ID_2)).when(service).createMultipleVorgangs(preservedFormData, ORGANISATIONSEINHEIT_IDS); + void shouldCallCreateVorgangOnMissingZustaendigeStelleIfOrganisationseinheitIsMissing() { + mockMissingOrganisationseinheitIds(); - var vorgangIds = createVorgangs(); + createVorgang(); - assertThat(vorgangIds).containsExactly(VORGANG_ID, VORGANG_ID_2); + verify(service).createVorgangOnMissingZustaendigeStelle(eq(preservedFormData)); } @DisplayName("should return single vorgang id if organisationseinheit is missing") @Test void shouldReturnSingleVorgangIdIfOrganisationseinheitIsMissing() { - doReturn(emptyList()).when(service).getOrganisationsEinheitIds(formData); - doReturn(VORGANG_ID).when(service).createVorgangOnMissingZustaendigeStelle(preservedFormData); + mockMissingOrganisationseinheitIds(); - var vorgangIds = createVorgangs(); + var firstVorgangId = createVorgang(); + + assertThat(firstVorgangId).isEqualTo(VORGANG_ID); + } - assertThat(vorgangIds).containsExactly(VORGANG_ID); + private void mockMissingOrganisationseinheitIds() { + doReturn(emptyList()).when(service).getOrganisationsEinheitIds(any()); + doReturn(VORGANG_ID).when(service).createVorgangOnMissingZustaendigeStelle(any()); } - private List<String> createVorgangs() { - return service.createVorgangs(formData); + private String createVorgang() { + return service.createVorgang(formData); } } @@ -118,11 +167,22 @@ class VorgangServiceTest { @Mock private FormData formData; + @BeforeEach + void mock() { + when(remoteService.createVorgang(any(), any())).thenReturn(VORGANG_ID); + } + + @DisplayName("should call create vorgang") + @Test + void shouldCallCreateVorgang() { + service.createVorgangOnMissingZustaendigeStelle(formData); + + verify(remoteService).createVorgang(formData, Optional.empty()); + } + @DisplayName("should return") @Test void shouldReturn() { - when(remoteService.createVorgang(formData, Optional.empty())).thenReturn(VORGANG_ID); - var vorgangId = service.createVorgangOnMissingZustaendigeStelle(formData); assertThat(vorgangId).isEqualTo(VORGANG_ID); @@ -132,24 +192,54 @@ class VorgangServiceTest { @DisplayName("create multiple vorgangs") @Nested class TestCreateMultipleVorgangs { + + private static final String VORGANG_ID_2 = "vorgangId2"; + private static final List<String> ORGANISATIONSEINHEIT_IDS = List.of(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEIT_ID, + ORGANISATIONSEINHEIT_ID_2); + @Mock private FormData formData; + @BeforeEach + void mock() { + when(remoteService.createVorgang(any(), any())) + .thenReturn(VORGANG_ID) + .thenReturn(VORGANG_ID_2); + } + + @DisplayName("should call create vorgang twice") + @Test + void shouldCallCreateVorgangTwice() { + service.createMultipleVorgangs(formData, ORGANISATIONSEINHEIT_IDS); + + verify(remoteService).createVorgang(formData, Optional.of(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEIT_ID)); + verify(remoteService).createVorgang(formData, Optional.of(ORGANISATIONSEINHEIT_ID_2)); + } + @DisplayName("should return") @Test void shouldReturn() { - when(remoteService.createVorgang(formData, Optional.of(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEIT_ID))).thenReturn(VORGANG_ID); - when(remoteService.createVorgang(formData, Optional.of(ORGANISATIONSEINHEIT_ID_2))).thenReturn(VORGANG_ID_2); - var vorgangIds = service.createMultipleVorgangs(formData, ORGANISATIONSEINHEIT_IDS); - assertThat(vorgangIds).containsExactly(VORGANG_ID, VORGANG_ID_2); + assertThat(vorgangIds).containsExactlyInAnyOrder(VORGANG_ID, VORGANG_ID_2); } } @DisplayName("get organisationseinheit ids") @Nested class TestGetOrganisationseinheitIds { + + private FormData preservedFormData; + + @BeforeEach + void mock() { + preservedFormData = FormDataTestFactory.createBuilder() + .zustaendigeStelle(ZustaendigeStelleTestFactory.createBuilder() + .organisationseinheitenId(ORGANISATIONSEINHEIT_ID_2) + .build()) + .build(); + } + @DisplayName("should return") @Test void shouldReturn() { diff --git a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/SemantikAdapter.java b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/SemantikAdapter.java index dba7dca209d04d01b2a244572d522c98ed51fd0b..65c69a87ebc51b3313b8b4ec84d24f7d10170cf0 100644 --- a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/SemantikAdapter.java +++ b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/SemantikAdapter.java @@ -34,7 +34,6 @@ import de.ozgcloud.eingang.semantik.enginebased.EngineBasedSemantikAdapter; import de.ozgcloud.eingang.semantik.formbased.FormBasedSemantikAdapter; import lombok.extern.log4j.Log4j2; - @Log4j2 @Service public class SemantikAdapter { @@ -50,7 +49,7 @@ public class SemantikAdapter { formData = parseByEngineAdapter(formData); formData = parseByFormAdapter(formData); - return vorgangService.createVorgangs(formData).getFirst(); + return vorgangService.createVorgang(formData); } private FormData parseByEngineAdapter(FormData formData) { diff --git a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/SemantikAdapterTest.java b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/SemantikAdapterTest.java index 5adf04373769060992244c6f13d3f9689c26201b..ea63f2379a7391af25178495e00d3af611cb04e4 100644 --- a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/SemantikAdapterTest.java +++ b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/SemantikAdapterTest.java @@ -99,7 +99,7 @@ class SemantikAdapterTest { doReturn(List.of(engineAdapter)).when(adapter).getResponsibleEngineAdapters(formData); when(engineAdapter.parseFormData(any())).thenReturn(engineAdapterResponse); when(formAdapter.parseFormData(any())).thenReturn(formAdapterResponse); - when(vorgangService.createVorgangs(formAdapterResponse)).thenReturn(List.of(VORGANG_ID, "otherId")); + when(vorgangService.createVorgang(any())).thenReturn(VORGANG_ID); } @Test @@ -127,7 +127,7 @@ class SemantikAdapterTest { void shouldCallVorgangRemoteService() { adapter.processFormData(formData); - verify(vorgangService).createVorgangs(formAdapterResponse); + verify(vorgangService).createVorgang(formAdapterResponse); } @DisplayName("should return first vorgang id")