diff --git a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/collaboration/CollaborationRequest.java b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/collaboration/CollaborationRequest.java index 95dcfbfaa2b210148f3dac4e45b83c1688e24217..40a39954ab98c3b284c3a19817e9277f893d123b 100644 --- a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/collaboration/CollaborationRequest.java +++ b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/collaboration/CollaborationRequest.java @@ -24,8 +24,10 @@ package de.ozgcloud.vorgang.collaboration; import lombok.Builder; +import lombok.Getter; @Builder +@Getter public class CollaborationRequest { private String vorgangId; diff --git a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/collaboration/CollaborationService.java b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/collaboration/CollaborationService.java index cbccfedbf7f8c8279fba415c1b0e8eca195ced0d..2ac1a1e277bb6cdadfea950cefeb4ddea589ce97 100644 --- a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/collaboration/CollaborationService.java +++ b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/collaboration/CollaborationService.java @@ -25,10 +25,33 @@ package de.ozgcloud.vorgang.collaboration; import org.springframework.stereotype.Service; +import de.ozgcloud.vorgang.vorgang.Vorgang; +import de.ozgcloud.vorgang.vorgang.VorgangHead; +import de.ozgcloud.vorgang.vorgang.VorgangService; +import lombok.RequiredArgsConstructor; + @Service +@RequiredArgsConstructor public class CollaborationService { + private final VorgangService vorgangService; + public String createCollaborationVorgang(CollaborationRequest request) { - return "collaboration-vorgang-id"; + var vorgang = updateVorgang(vorgangService.getById(request.getVorgangId()), request); + return vorgangService.createVorgang(vorgang); + } + + Vorgang updateVorgang(Vorgang vorgang, CollaborationRequest request) { + vorgang.getClientAttributes().clear(); + return vorgang.toBuilder() + .header(updateHeader(vorgang.getHeader(), request)) + .build(); + } + + VorgangHead updateHeader(VorgangHead header, CollaborationRequest request) { + return header.toBuilder() + .collaborationLevel(request.getCollaborationLevel()) + .organisationsEinheitId(request.getZustaendigeStelle()) + .build(); } } diff --git a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/VorgangHead.java b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/VorgangHead.java index cc6c36f1f60d8aa55082ffd0304ef699f5cf1041..13e858035e377296843b70740e23c96ca3c3485e 100644 --- a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/VorgangHead.java +++ b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/VorgangHead.java @@ -6,7 +6,7 @@ import de.ozgcloud.vorgang.servicekonto.ServiceKonto; import lombok.Builder; import lombok.Getter; -@Builder +@Builder(toBuilder = true) @Getter @TypeAlias("VorgangHeader") public class VorgangHead { @@ -14,4 +14,6 @@ public class VorgangHead { private ServiceKonto serviceKonto; private String organisationsEinheitId; + @Builder.Default + private int collaborationLevel = 0; } diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/CollaborationRequestTestFactory.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/CollaborationRequestTestFactory.java index f94a842b60e31af85300a8d3438e4bd407a84908..2028349a693227ddea0620ec67b52dc5ed56bd3f 100644 --- a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/CollaborationRequestTestFactory.java +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/CollaborationRequestTestFactory.java @@ -28,7 +28,7 @@ import de.ozgcloud.vorgang.vorgang.VorgangTestFactory; public class CollaborationRequestTestFactory { - public static final int COLLABORATION_lEVEL = 1; + public static final int COLLABORATION_LEVEL = 1; public static final String ZUSTAENDIGE_STELLE = "zustaendige-stelle"; public static CollaborationRequest create() { @@ -39,7 +39,7 @@ public class CollaborationRequestTestFactory { return CollaborationRequest.builder() .vorgangId(VorgangTestFactory.ID) .zustaendigeStelle(ZUSTAENDIGE_STELLE) - .collaborationLevel(COLLABORATION_lEVEL); + .collaborationLevel(COLLABORATION_LEVEL); } } diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/CollaborationServiceTest.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/CollaborationServiceTest.java new file mode 100644 index 0000000000000000000000000000000000000000..07cc14f7840e896df34a84096a96707e48da1cb0 --- /dev/null +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/CollaborationServiceTest.java @@ -0,0 +1,161 @@ +/* + * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den + * Ministerpräsidenten des Landes Schleswig-Holstein + * Staatskanzlei + * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ +package de.ozgcloud.vorgang.collaboration; + +import static org.assertj.core.api.Assertions.*; +import static org.mockito.Mockito.*; + +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 de.ozgcloud.vorgang.vorgang.Vorgang; +import de.ozgcloud.vorgang.vorgang.VorgangHead; +import de.ozgcloud.vorgang.vorgang.VorgangHeadTestFactory; +import de.ozgcloud.vorgang.vorgang.VorgangService; +import de.ozgcloud.vorgang.vorgang.VorgangTestFactory; + +class CollaborationServiceTest { + + @Spy + @InjectMocks + private CollaborationService service; + + @Mock + private VorgangService vorgangService; + + @Nested + class TestCreateCollaborationVorgang { + + private static final CollaborationRequest COLLABORATION_REQUEST = CollaborationRequestTestFactory.create(); + private static final String COLLABORATION_VORGANG_ID = "collaboratino-vorgang-id"; + + @Mock + private Vorgang loadedVorgang; + @Mock + private Vorgang modifiedVorgang; + + @BeforeEach + void init() { + when(vorgangService.getById(any())).thenReturn(loadedVorgang); + when(vorgangService.createVorgang(any())).thenReturn(COLLABORATION_VORGANG_ID); + doReturn(modifiedVorgang).when(service).updateVorgang(any(), any()); + } + + @Test + void shouldCallGetVorgang() { + createCollaborationVorgang(); + + verify(vorgangService).getById(VorgangTestFactory.ID); + } + + @Test + void shouldCallModifyVorgang() { + createCollaborationVorgang(); + + verify(service).updateVorgang(loadedVorgang, COLLABORATION_REQUEST); + } + + @Test + void shouldCallCreateVorgang() { + createCollaborationVorgang(); + + verify(vorgangService).createVorgang(modifiedVorgang); + } + + @Test + void shouldReturnVorgangId() { + var result = createCollaborationVorgang(); + + assertThat(result).isEqualTo(COLLABORATION_VORGANG_ID); + } + + private String createCollaborationVorgang() { + return service.createCollaborationVorgang(COLLABORATION_REQUEST); + } + } + + @Nested + class TestUpdateVorgang { + + private static final VorgangHead HEAD = VorgangHeadTestFactory.create(); + private static final CollaborationRequest COLLABORATION_REQUEST = CollaborationRequestTestFactory.create(); + + @Mock + private VorgangHead updatedHead; + + @Test + void shouldRemoveClientAttributes() { + var result = modifyVorgang(); + + assertThat(result.getClientAttributes()).isEmpty(); + } + + @Test + void shouldCallUpdateHeader() { + modifyVorgang(); + + verify(service).updateHeader(HEAD, COLLABORATION_REQUEST); + } + + @Test + void shouldSetUpdatedHeader() { + doReturn(updatedHead).when(service).updateHeader(any(), any()); + + var result = modifyVorgang(); + + assertThat(result.getHeader()).isSameAs(updatedHead); + } + + private Vorgang modifyVorgang() { + return service.updateVorgang(VorgangTestFactory.createBuilder().header(HEAD).build(), COLLABORATION_REQUEST); + } + } + + @Nested + class TestUpdateHeader { + + @Test + void shouldSetZustaendigeStelle() { + var result = updateHeader(); + + assertThat(result.getOrganisationsEinheitId()).isEqualTo(CollaborationRequestTestFactory.ZUSTAENDIGE_STELLE); + } + + @Test + void shouldSetCollaborationLevel() { + var result = updateHeader(); + + assertThat(result.getCollaborationLevel()).isEqualTo(CollaborationRequestTestFactory.COLLABORATION_LEVEL); + } + + private VorgangHead updateHeader() { + return service.updateHeader(VorgangHeadTestFactory.create(), CollaborationRequestTestFactory.create()); + } + } + +} \ No newline at end of file diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/GrpcCollaborationRequestTestFactory.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/GrpcCollaborationRequestTestFactory.java index ea7b8304da1c996ca1edc733f556318869959dba..67d6a8a18a8c2eb865d9205e4033ee0139e2ccae 100644 --- a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/GrpcCollaborationRequestTestFactory.java +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/GrpcCollaborationRequestTestFactory.java @@ -36,6 +36,6 @@ public class GrpcCollaborationRequestTestFactory { return GrpcCollaborationRequest.newBuilder() .setVorgangId(VorgangTestFactory.ID) .setZustaendigeStelle(CollaborationRequestTestFactory.ZUSTAENDIGE_STELLE) - .setCollaborationLevel(CollaborationRequestTestFactory.COLLABORATION_lEVEL); + .setCollaborationLevel(CollaborationRequestTestFactory.COLLABORATION_LEVEL); } } diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/VorgangServiceITCase.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/VorgangServiceITCase.java index 443303a1c8212f534df06dfb03c17def5d0c6ca3..3aef7fb64c636bf5cd42df44f010416024463fdb 100644 --- a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/VorgangServiceITCase.java +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/VorgangServiceITCase.java @@ -81,4 +81,10 @@ class VorgangServiceITCase { verify(userNotificationEventListener, timeout(60000)).onVorgangCreated(any()); } } + + @Nested + class TestCreateVorgang { + + // TODO impleent tests + } } \ No newline at end of file