diff --git a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/CollaborationService.java b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/CollaborationService.java index 7ae428fb57a036cbf7f501b900d8eba9977c3ce6..ba4460a230898252854fdf2a6087c36ad999bf1d 100644 --- a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/CollaborationService.java +++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/CollaborationService.java @@ -25,6 +25,7 @@ package de.ozgcloud.collaboration; import java.util.List; import java.util.Map; +import java.util.Optional; import jakarta.validation.Valid; @@ -41,6 +42,7 @@ import de.ozgcloud.collaboration.common.freemarker.TemplateHandler; import de.ozgcloud.collaboration.common.user.UserProfileService; import de.ozgcloud.collaboration.vorgang.ServiceKonto; import de.ozgcloud.collaboration.vorgang.VorgangService; +import de.ozgcloud.common.errorhandling.TechnicalException; import lombok.RequiredArgsConstructor; @Service(CollaborationManagerConfiguration.COLLABORATION_SERVICE_NAME) // NOSONAR @@ -80,7 +82,7 @@ public class CollaborationService { private final CommandMapper commandMapper; @Qualifier(CollaborationManagerConfiguration.TEMPLATE_HANDLER_NAME) // NOSONAR private final TemplateHandler templateHandler; - private final FachstelleVorgangUrlProvider urlProvider; + private final Optional<FachstelleVorgangUrlProvider> urlProvider; public void createCollaborationRequest(@Valid CollaborationRequest collaborationRequest) { var enrichedRequest = enrichCollaborationRequest(collaborationRequest, vorgangService.createCollaborationVorgang(collaborationRequest)); @@ -101,6 +103,9 @@ public class CollaborationService { } public void createFachstellenBeteiligungRequest(@Valid CollaborationRequest collaborationRequest) { + if (urlProvider.isEmpty()) { + throw new TechnicalException("Fachstelle not configured."); + } var vorgang = vorgangService.getVorgang(collaborationRequest.getVorgangId()); var enrichedRequest = enrichCollaborationRequest(collaborationRequest, vorgang.getId().toString()); var addSubCommandsRequest = buildCreateSubCommandsRequest(enrichedRequest, buildSubCommands(enrichedRequest)); @@ -163,6 +168,6 @@ public class CollaborationService { } Map<String, Object> getTemplateParameters(String vorgangId) { - return Map.of(KEY_VORGANG_LINK, urlProvider.getUrl(vorgangId)); + return Map.of(KEY_VORGANG_LINK, urlProvider.get().getUrl(vorgangId)); } } \ No newline at end of file diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationServiceTest.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationServiceTest.java index cecf47b8e6af03ea0e7da3a11e830d406309e2d5..7b65d713753f128862cde95d7529c4bc5ddfc243 100644 --- a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationServiceTest.java +++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationServiceTest.java @@ -24,12 +24,13 @@ package de.ozgcloud.collaboration; import static org.assertj.core.api.Assertions.*; -import static org.assertj.core.api.InstanceOfAssertFactories.*; +import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; import java.util.List; import java.util.Map; +import java.util.Optional; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; @@ -60,6 +61,7 @@ import de.ozgcloud.collaboration.vorgang.VorgangService; import de.ozgcloud.collaboration.vorgang.VorgangTestFactory; import de.ozgcloud.command.CommandTestFactory; import de.ozgcloud.common.datatype.StringBasedValue; +import de.ozgcloud.common.errorhandling.TechnicalException; class CollaborationServiceTest { @@ -80,7 +82,9 @@ class CollaborationServiceTest { @Mock private TemplateHandler templateHandler; @Mock - private FachstelleVorgangUrlProvider urlProvider; + private FachstelleVorgangUrlProvider provider; + @Mock + private Optional<FachstelleVorgangUrlProvider> urlProvider; @Nested class TestCreateCollaborationRequest { @@ -253,57 +257,71 @@ class CollaborationServiceTest { @Nested class TestCreateFachstellenBeteiligungRequest { - private static final Vorgang VORGANG = VorgangTestFactory.create(); - private static final CollaborationRequest ENRICHED_REQUEST = CollaborationRequestTestFactory.create(); + @Nested + class TestCreateRequest { + private static final Vorgang VORGANG = VorgangTestFactory.create(); + private static final CollaborationRequest ENRICHED_REQUEST = CollaborationRequestTestFactory.create(); - @Mock - private OzgCloudCommand subCommand; + @Mock + private OzgCloudCommand subCommand; - @BeforeEach - void init() { - doReturn(List.of(subCommand)).when(service).buildSubCommands(any()); - when(vorgangService.getVorgang(any())).thenReturn(VORGANG); - doReturn(ENRICHED_REQUEST).when(service).enrichCollaborationRequest(any(), any()); - } + @BeforeEach + void init() { + doReturn(List.of(subCommand)).when(service).buildSubCommands(any()); + when(vorgangService.getVorgang(any())).thenReturn(VORGANG); + doReturn(ENRICHED_REQUEST).when(service).enrichCollaborationRequest(any(), any()); + } - @Test - void shouldCallGetVorgang() { - service.createFachstellenBeteiligungRequest(CollaborationRequestTestFactory.create()); + @Test + void shouldCallGetVorgang() { + createFachstellenBeteiligungRequest(); - verify(vorgangService).getVorgang(VorgangTestFactory.ID_STR); - } + verify(vorgangService).getVorgang(VorgangTestFactory.ID_STR); + } - @Test - void shouldCallEnrichCollaborationRequest() { - var collaborationRequest = CollaborationRequestTestFactory.create(); + @Test + void shouldCallEnrichCollaborationRequest() { + var collaborationRequest = CollaborationRequestTestFactory.create(); - service.createFachstellenBeteiligungRequest(collaborationRequest); + service.createFachstellenBeteiligungRequest(collaborationRequest); - verify(service).enrichCollaborationRequest(collaborationRequest, VorgangTestFactory.ID.toString()); - } + verify(service).enrichCollaborationRequest(collaborationRequest, VorgangTestFactory.ID.toString()); + } - @Test - void shouldCallBuildSubCommands() { - service.createFachstellenBeteiligungRequest(CollaborationRequestTestFactory.create()); + @Test + void shouldCallBuildSubCommands() { + createFachstellenBeteiligungRequest(); - verify(service).buildSubCommands(ENRICHED_REQUEST); - } + verify(service).buildSubCommands(ENRICHED_REQUEST); + } - @Test - void shouldCallBuildCreateSubCommandsRequest() { - service.createFachstellenBeteiligungRequest(CollaborationRequestTestFactory.create()); + @Test + void shouldCallBuildCreateSubCommandsRequest() { + createFachstellenBeteiligungRequest(); + + verify(service).buildCreateSubCommandsRequest(ENRICHED_REQUEST, List.of(subCommand)); + } - verify(service).buildCreateSubCommandsRequest(ENRICHED_REQUEST, List.of(subCommand)); + @Test + void shouldCallAddSubCommands() { + var addSubCommandsRequest = OzgCloudCreateSubCommandsRequestTestFactory.create(); + doReturn(addSubCommandsRequest).when(service).buildCreateSubCommandsRequest(any(), any()); + + createFachstellenBeteiligungRequest(); + + verify(commandService).addSubCommands(addSubCommandsRequest); + } } @Test - void shouldCallAddSubCommands() { - var addSubCommandsRequest = OzgCloudCreateSubCommandsRequestTestFactory.create(); - doReturn(addSubCommandsRequest).when(service).buildCreateSubCommandsRequest(any(), any()); + void shouldThrowExceptionIfFachstelleNotConfigured() { + when(urlProvider.isEmpty()).thenReturn(true); - service.createFachstellenBeteiligungRequest(CollaborationRequestTestFactory.create()); + assertThrows(TechnicalException.class, this::createFachstellenBeteiligungRequest); + } - verify(commandService).addSubCommands(addSubCommandsRequest); + private void createFachstellenBeteiligungRequest() { + service.createFachstellenBeteiligungRequest(CollaborationRequestTestFactory.create()); } } @@ -602,18 +620,23 @@ class CollaborationServiceTest { private final String linkToVorgang = LoremIpsum.getInstance().getUrl(); + @BeforeEach + void init() { + when(urlProvider.get()).thenReturn(provider); + } + @Test void shouldCallUrlProvider() { - when(urlProvider.getUrl(any())).thenReturn(linkToVorgang); + when(provider.getUrl(any())).thenReturn(linkToVorgang); getTemplateParameters(); - verify(urlProvider).getUrl(VorgangTestFactory.ID_STR); + verify(provider).getUrl(VorgangTestFactory.ID_STR); } @Test void shouldReturnTemplateParameters() { - when(urlProvider.getUrl(any())).thenReturn(linkToVorgang); + when(provider.getUrl(any())).thenReturn(linkToVorgang); var result = getTemplateParameters(); diff --git a/collaboration-manager-server/src/test/resources/application-itcase.yml b/collaboration-manager-server/src/test/resources/application-itcase.yml index e8da334d49bb7daa2a6bb6f128c60ea187e09d5e..dbfa482da1647ade6cc46051cd43478a2b542c21 100644 --- a/collaboration-manager-server/src/test/resources/application-itcase.yml +++ b/collaboration-manager-server/src/test/resources/application-itcase.yml @@ -9,3 +9,6 @@ logging: grpc: server: port: -1 +ozgcloud: + vorgang-manager: + service-address: vorgang-manager