diff --git a/bescheid-manager/pom.xml b/bescheid-manager/pom.xml index 7231d95b86b9348d8b46fac3ae37bebb0f25db3f..7e5356426db314f5fa3b38c0cc08d9954fe27ce6 100644 --- a/bescheid-manager/pom.xml +++ b/bescheid-manager/pom.xml @@ -17,7 +17,7 @@ <properties> <vorgang-manager.version>2.13.0</vorgang-manager.version> <nachrichten-manager.version>2.9.0</nachrichten-manager.version> - <api-lib.version>0.11.0</api-lib.version> + <api-lib.version>0.12.0</api-lib.version> </properties> <dependencies> diff --git a/vorgang-manager-server/pom.xml b/vorgang-manager-server/pom.xml index 478f3d17fb9010b506e7c68e29941fc125e41ce5..ed8f383c0cc12d942e6c55167227b69a55abfe9d 100644 --- a/vorgang-manager-server/pom.xml +++ b/vorgang-manager-server/pom.xml @@ -53,12 +53,12 @@ <zufi-manager-interface.version>1.0.0</zufi-manager-interface.version> <user-manager-interface.version>2.1.0</user-manager-interface.version> - <bescheid-manager.version>1.17.0</bescheid-manager.version> + <bescheid-manager.version>1.18.0-SNAPSHOT</bescheid-manager.version> <processor-manager.version>0.4.1</processor-manager.version> <nachrichten-manager.version>2.11.0</nachrichten-manager.version> - <ozgcloud-starter.version>0.10.0</ozgcloud-starter.version> + <ozgcloud-starter.version>0.12.0</ozgcloud-starter.version> <notification-manager.version>2.10.0</notification-manager.version> - <collaboration-manager.version>0.2.0</collaboration-manager.version> + <collaboration-manager.version>0.3.0-PR-5-SNAPSHOT</collaboration-manager.version> <zip.version>2.11.1</zip.version> <jsoup.version>1.15.3</jsoup.version> diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/CollaborationITCase.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/CollaborationITCase.java index 32db2a67bebf61625a2e5eea835a61eaa5c87665..2c87abc4a00c6675c1c96c931fedbca8da8572c8 100644 --- a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/CollaborationITCase.java +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/CollaborationITCase.java @@ -24,7 +24,6 @@ package de.ozgcloud.vorgang.collaboration; import static org.assertj.core.api.Assertions.*; -import static org.assertj.core.api.InstanceOfAssertFactories.*; import static org.awaitility.Awaitility.*; import static org.junit.jupiter.api.Assertions.fail; import static org.mockito.ArgumentMatchers.*; @@ -41,6 +40,8 @@ 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.mockito.Mock; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @@ -60,7 +61,11 @@ import de.ozgcloud.collaboration.CollaborationServiceGrpc.CollaborationServiceBl import de.ozgcloud.collaboration.GrpcGetFileContentRequest; import de.ozgcloud.command.Command; import de.ozgcloud.command.CommandStatus; +import de.ozgcloud.common.errorhandling.TechnicalException; import de.ozgcloud.common.test.DataITCase; +import de.ozgcloud.nachrichten.postfach.PostfachAddress; +import de.ozgcloud.nachrichten.postfach.PostfachNachricht; +import de.ozgcloud.nachrichten.postfach.PostfachRemoteService; import de.ozgcloud.vorgang.attached_item.VorgangAttachedItem; import de.ozgcloud.vorgang.callcontext.CallContext; import de.ozgcloud.vorgang.callcontext.TestCallContextAttachingInterceptor; @@ -71,6 +76,7 @@ import de.ozgcloud.vorgang.command.CreateCommandRequest; import de.ozgcloud.vorgang.files.FileService; import de.ozgcloud.vorgang.files.GridFsTestFactory; import de.ozgcloud.vorgang.files.OzgFileTestFactory; +import de.ozgcloud.vorgang.servicekonto.PostfachAddressTestFactory; import de.ozgcloud.vorgang.vorgang.Vorgang; import de.ozgcloud.vorgang.vorgang.VorgangHead; import de.ozgcloud.vorgang.vorgang.VorgangTestFactory; @@ -89,6 +95,10 @@ import net.devh.boot.grpc.client.inject.GrpcClient; @DirtiesContext class CollaborationITCase { + private static final String FIELD_COLLABORATION_VORGANG_ID = "collaborationVorgangId"; + private static final String TITEL = "Collaboration Vorgang"; + private static final String ANFRAGE = "Anfrage"; + @Autowired private CommandService commandService; @@ -97,85 +107,35 @@ class CollaborationITCase { @MockBean private OzgCloudUserProfileService ozgCloudUserProfileService; + @MockBean + private PostfachRemoteService postfachRemoteService; @Mock private OzgCloudUserProfile ozgCloudUserProfile; - @Nested - class TestCreateCollaborationVorgang { - - @BeforeEach - void init() { - mongoOperations.dropCollection(Command.class); - mongoOperations.dropCollection(Vorgang.class); - mongoOperations.dropCollection(VorgangAttachedItem.class); - when(ozgCloudUserProfile.getId()).thenReturn(OzgCloudUserId.from(CommandTestFactory.CREATED_BY)); - when(ozgCloudUserProfileService.getById(any())).thenReturn(ozgCloudUserProfile); - - vorgangId = mongoOperations.save(VorgangTestFactory.createBuilder().id(null).version(0L).build()).getId(); - } - - private static final String FIELD_COLLABORATION_VORGANG_ID = "collaborationVorgangId"; - private static final String TITEL = "Collaboration Vorgang"; - private static final String ANFRAGE = "Anfrage"; - - private String vorgangId; - - @Test - void shouldSetCollaborationVorgangId() { - var command = commandService.createCommand(buildCreateCollaborationVorgangCommand(vorgangId)); - - waitUntilCommandFinished(command.getId()); - - var collaborationRequests = loadCollaborationRequest(vorgangId); - assertThat(collaborationRequests).hasSize(1).first().extracting(VorgangAttachedItem::getItem, MAP) - .containsKey(FIELD_COLLABORATION_VORGANG_ID); - } - - @Test - void shouldCreateCollaborationVorgang() { - var command = commandService.createCommand(buildCreateCollaborationVorgangCommand(vorgangId)); - - waitUntilCommandFinished(command.getId()); - - var collaborationVorgang = loadCollaborationVorgang(vorgangId); - assertThat(collaborationVorgang.getHeader()).extracting(VorgangHead::getCollaborationLevel) - .isEqualTo(CreateCollaborationVorgangRequestTestFactory.COLLABORATION_LEVEL); - assertThat(collaborationVorgang.getHeader()).extracting(VorgangHead::getOrganisationsEinheitId) - .isEqualTo(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEIT_ID); - assertThat(collaborationVorgang.getClientAttributes()).isEmpty(); - } - - private CreateCommandRequest buildCreateCollaborationVorgangCommand(String vorgangId) { - return CreateCommandRequest.builder() - .callContext(CallContext.builder().client("test").build()) - .vorgangId(vorgangId) - .relationId(vorgangId) - .order("CREATE_COLLABORATION_REQUEST") - .bodyObject(Map.of( - "titel", TITEL, - "anfrage", ANFRAGE, - "zustaendigeStelle", ZustaendigeStelleTestFactory.ORGANISATIONSEINHEIT_ID)) - .build(); - } + private String vorgangId; - private void waitUntilCommandFinished(String commandId) { - await().atMost(60, TimeUnit.SECONDS).until( - () -> mongoOperations.findById(commandId, Command.class), - command -> command.getStatus() == CommandStatus.FINISHED); - } + @BeforeEach + void init() { + mongoOperations.dropCollection(Command.class); + mongoOperations.dropCollection(Vorgang.class); + mongoOperations.dropCollection(VorgangAttachedItem.class); - private Vorgang loadCollaborationVorgang(String sourceVorgangId) { - var collaborationVorgangId = loadCollaborationRequest(sourceVorgangId).getFirst().getItem().get(FIELD_COLLABORATION_VORGANG_ID); - return mongoOperations.findById(collaborationVorgangId, Vorgang.class); - } + vorgangId = mongoOperations.save(VorgangTestFactory.createBuilder().id(null).version(0L).build()).getId(); + } - private List<VorgangAttachedItem> loadCollaborationRequest(String vorgangId) { - var query = new Query(new Criteria().andOperator( - Criteria.where(VorgangAttachedItem.FIELDNAME_VORGANG_ID).is(vorgangId), - Criteria.where(VorgangAttachedItem.FIELDNAME_ITEM_NAME).is("CollaborationRequest"))); - return mongoOperations.find(query, VorgangAttachedItem.class); - } + private CreateCommandRequest buildCreateCollaborationVorgangCommand(String vorgangId, int collaborationLevel) { + return CreateCommandRequest.builder() + .callContext(CallContext.builder().client("test").build()) + .vorgangId(vorgangId) + .relationId(vorgangId) + .order("CREATE_COLLABORATION_REQUEST") + .bodyObject(Map.of( + "titel", TITEL, + "anfrage", ANFRAGE, + "collaborationLevel", collaborationLevel, + "zustaendigeStelle", ZustaendigeStelleTestFactory.ORGANISATIONSEINHEIT_ID)) + .build(); } @DisplayName("Get file content") @@ -244,4 +204,110 @@ class CollaborationITCase { return collaborationStub.withInterceptors(new TestCallContextAttachingInterceptor()); } } + + private List<VorgangAttachedItem> loadCollaborationRequest(String vorgangId) { + var query = new Query(new Criteria().andOperator( + Criteria.where(VorgangAttachedItem.FIELDNAME_VORGANG_ID).is(vorgangId), + Criteria.where(VorgangAttachedItem.FIELDNAME_ITEM_NAME).is("CollaborationRequest"))); + return mongoOperations.find(query, VorgangAttachedItem.class); + } + + private void waitUntilCommandFinished(String commandId) { + await().atMost(60, TimeUnit.SECONDS).until( + () -> mongoOperations.findById(commandId, Command.class), + command -> command.getStatus() == CommandStatus.FINISHED); + } + + private void waitUntilCommandError(String commandId) { + await().atMost(60, TimeUnit.SECONDS).until( + () -> mongoOperations.findById(commandId, Command.class), + command -> command.getStatus() == CommandStatus.ERROR); + } + + @Nested + class TestCreateCollaborationVorgang { + + @BeforeEach + void init() { + when(ozgCloudUserProfile.getId()).thenReturn(OzgCloudUserId.from(CommandTestFactory.CREATED_BY)); + when(ozgCloudUserProfileService.getById(any())).thenReturn(ozgCloudUserProfile); + } + + @Test + void shouldSetCollaborationVorgangId() { + var command = commandService.createCommand(buildCreateCollaborationVorgangCommand(vorgangId, 1)); + + waitUntilCommandFinished(command.getId()); + + var collaborationRequests = loadCollaborationRequest(vorgangId); + assertThat(collaborationRequests).hasSize(1).first().extracting(VorgangAttachedItem::getItem, MAP) + .containsKey(FIELD_COLLABORATION_VORGANG_ID); + } + + @Test + void shouldCreateCollaborationVorgang() { + var command = commandService.createCommand(buildCreateCollaborationVorgangCommand(vorgangId, 1)); + + waitUntilCommandFinished(command.getId()); + + var collaborationVorgang = loadCollaborationVorgang(vorgangId); + assertThat(collaborationVorgang.getHeader()).extracting(VorgangHead::getCollaborationLevel) + .isEqualTo(CreateCollaborationVorgangRequestTestFactory.COLLABORATION_LEVEL); + assertThat(collaborationVorgang.getHeader()).extracting(VorgangHead::getOrganisationsEinheitId) + .isEqualTo(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEIT_ID); + assertThat(collaborationVorgang.getClientAttributes()).isEmpty(); + } + + private Vorgang loadCollaborationVorgang(String sourceVorgangId) { + var collaborationVorgangId = loadCollaborationRequest(sourceVorgangId).getFirst().getItem().get(FIELD_COLLABORATION_VORGANG_ID); + return mongoOperations.findById(collaborationVorgangId, Vorgang.class); + } + + } + + @Nested + class TestCreateFachstellenBeteiligungRequest { + + @Captor + private ArgumentCaptor<PostfachNachricht> postfachMailCaptor; + + @BeforeEach + void init() { + when(ozgCloudUserProfile.getId()).thenReturn(OzgCloudUserId.from(CommandTestFactory.CREATED_BY)); + when(ozgCloudUserProfileService.getById(any())).thenReturn(ozgCloudUserProfile); + } + + @Test + void shouldCreateCollaborationRequest() { + var command = commandService.createCommand(buildCreateCollaborationVorgangCommand(vorgangId, 4)); + + waitUntilCommandFinished(command.getId()); + + var collaborationRequests = loadCollaborationRequest(vorgangId); + assertThat(collaborationRequests).hasSize(1).first().extracting(VorgangAttachedItem::getItem, MAP) + .containsEntry(FIELD_COLLABORATION_VORGANG_ID, vorgangId); + } + + @Test + void shouldSendPostfachMail() { + var command = commandService.createCommand(buildCreateCollaborationVorgangCommand(vorgangId, 4)); + + waitUntilCommandFinished(command.getId()); + + verify(postfachRemoteService).sendMessage(postfachMailCaptor.capture()); + assertThat(postfachMailCaptor.getValue().getPostfachAddress()).extracting(PostfachAddress::getIdentifier) + .hasToString(PostfachAddressTestFactory.STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE); + } + + @Test + void shouldDeleteCollaborationRequest() { + doThrow(TechnicalException.class).when(postfachRemoteService).sendMessage(any()); + var command = commandService.createCommand(buildCreateCollaborationVorgangCommand(vorgangId, 4)); + + waitUntilCommandError(command.getId()); + + assertThat(loadCollaborationRequest(vorgangId)).isEmpty(); + } + } + } \ No newline at end of file