From 234df39e35f94b86020f6098945cb09e5e4753b7 Mon Sep 17 00:00:00 2001 From: OZGCloud <ozgcloud@mgm-tp.com> Date: Wed, 31 Jul 2024 13:46:52 +0200 Subject: [PATCH] OZG-6259 create collaboration vorgang --- .../collaboration/CollaborationRequest.java | 2 + .../collaboration/CollaborationService.java | 25 ++- .../ozgcloud/vorgang/vorgang/VorgangHead.java | 4 +- .../CollaborationRequestTestFactory.java | 4 +- .../CollaborationServiceTest.java | 161 ++++++++++++++++++ .../GrpcCollaborationRequestTestFactory.java | 2 +- .../vorgang/vorgang/VorgangServiceITCase.java | 6 + 7 files changed, 199 insertions(+), 5 deletions(-) create mode 100644 vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/CollaborationServiceTest.java 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 95dcfbfaa..40a39954a 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 cbccfedbf..2ac1a1e27 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 cc6c36f1f..13e858035 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 f94a842b6..2028349a6 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 000000000..07cc14f78 --- /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 ea7b8304d..67d6a8a18 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 443303a1c..3aef7fb64 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 -- GitLab