diff --git a/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/functions/OnboardingFunctions.java b/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/functions/OnboardingFunctions.java index 0601b271e..62ed9313f 100644 --- a/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/functions/OnboardingFunctions.java +++ b/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/functions/OnboardingFunctions.java @@ -92,7 +92,8 @@ public HttpResponseMessage startOrchestration( */ @FunctionName("Onboardings") public void onboardingsOrchestrator( - @DurableOrchestrationTrigger(name = "taskOrchestrationContext") TaskOrchestrationContext ctx) { + @DurableOrchestrationTrigger(name = "taskOrchestrationContext") TaskOrchestrationContext ctx, + ExecutionContext functionContext) { String onboardingId = ctx.getInput(String.class); Onboarding onboarding = service.getOnboarding(onboardingId) .orElseThrow(() -> new ResourceNotFoundException(String.format("Onboarding with id %s not found!", onboardingId))); @@ -111,6 +112,7 @@ public void onboardingsOrchestrator( Optional optNextStatus = workflowExecutor.execute(ctx, onboarding); optNextStatus.ifPresent(onboardingStatus -> service.updateOnboardingStatus(onboardingId, onboardingStatus)); } catch (Exception ex) { + functionContext.getLogger().warning("Error during workflowExecutor execute, msg: " + ex.getMessage()); service.updateOnboardingStatusAndInstanceId(onboardingId, OnboardingStatus.FAILED, ctx.getInstanceId()); } } diff --git a/apps/onboarding-functions/src/test/java/it/pagopa/selfcare/onboarding/functions/OnboardingFunctionsTest.java b/apps/onboarding-functions/src/test/java/it/pagopa/selfcare/onboarding/functions/OnboardingFunctionsTest.java index 716491231..3c246bc8a 100644 --- a/apps/onboarding-functions/src/test/java/it/pagopa/selfcare/onboarding/functions/OnboardingFunctionsTest.java +++ b/apps/onboarding-functions/src/test/java/it/pagopa/selfcare/onboarding/functions/OnboardingFunctionsTest.java @@ -53,6 +53,13 @@ public class OnboardingFunctionsTest { CompletionService completionService; final String onboardinString = "{\"onboardingId\":\"onboardingId\"}"; + + static ExecutionContext executionContext; + + static { + executionContext = mock(ExecutionContext.class); + when(executionContext.getLogger()).thenReturn(Logger.getGlobal()); + } @Test public void startAndWaitOrchestration() throws Exception { // Setup @@ -97,9 +104,10 @@ public HttpResponseMessage.Builder answer(InvocationOnMock invocation) { void onboardingsOrchestrator_throwExceptionIfOnboardingNotPresent() { final String onboardingId = "onboardingId"; TaskOrchestrationContext orchestrationContext = mock(TaskOrchestrationContext.class); + when(orchestrationContext.getInput(String.class)).thenReturn(onboardingId); when(service.getOnboarding(onboardingId)).thenReturn(Optional.empty()); - assertThrows(ResourceNotFoundException.class, () -> function.onboardingsOrchestrator(orchestrationContext)); + assertThrows(ResourceNotFoundException.class, () -> function.onboardingsOrchestrator(orchestrationContext, executionContext)); } @Test @@ -111,13 +119,14 @@ void onboardingsOrchestrator_throwExceptionActivity() { final String instanceId = "instanceId"; TaskOrchestrationContext orchestrationContext = mock(TaskOrchestrationContext.class); + when(orchestrationContext.getInput(String.class)).thenReturn(onboarding.getOnboardingId()); when(orchestrationContext.getInstanceId()).thenReturn(instanceId); when(service.getOnboarding(onboarding.getOnboardingId())).thenReturn(Optional.of(onboarding)); when(orchestrationContext.callActivity(any(),any(),any(),any())).thenThrow(new RuntimeException()); - function.onboardingsOrchestrator(orchestrationContext); + function.onboardingsOrchestrator(orchestrationContext, executionContext); Mockito.verify(service, times(1)) .updateOnboardingStatusAndInstanceId(onboarding.getOnboardingId(), OnboardingStatus.FAILED, instanceId); @@ -132,7 +141,7 @@ void onboardingsOrchestratorContractRegistration() { TaskOrchestrationContext orchestrationContext = mockTaskOrchestrationContext(onboarding); - function.onboardingsOrchestrator(orchestrationContext); + function.onboardingsOrchestrator(orchestrationContext, executionContext); ArgumentCaptor captorActivity = ArgumentCaptor.forClass(String.class); Mockito.verify(orchestrationContext, times(3)) @@ -153,8 +162,9 @@ void onboardingsOrchestratorForApprove() { onboarding.setWorkflowType(WorkflowType.FOR_APPROVE); TaskOrchestrationContext orchestrationContext = mockTaskOrchestrationContext(onboarding); + - function.onboardingsOrchestrator(orchestrationContext); + function.onboardingsOrchestrator(orchestrationContext, executionContext); ArgumentCaptor captorActivity = ArgumentCaptor.forClass(String.class); Mockito.verify(orchestrationContext, times(1)) @@ -173,8 +183,9 @@ void onboardingsOrchestratorForApproveWhenToBeValidated() { onboarding.setWorkflowType(WorkflowType.FOR_APPROVE); TaskOrchestrationContext orchestrationContext = mockTaskOrchestrationContext(onboarding); + - function.onboardingsOrchestrator(orchestrationContext); + function.onboardingsOrchestrator(orchestrationContext, executionContext); ArgumentCaptor captorActivity = ArgumentCaptor.forClass(String.class); Mockito.verify(orchestrationContext, times(3)) @@ -196,8 +207,9 @@ void onboardingsOrchestratorConfirmation() { onboarding.setInstitution(new Institution()); TaskOrchestrationContext orchestrationContext = mockTaskOrchestrationContext(onboarding); + - function.onboardingsOrchestrator(orchestrationContext); + function.onboardingsOrchestrator(orchestrationContext, executionContext); ArgumentCaptor captorActivity = ArgumentCaptor.forClass(String.class); Mockito.verify(orchestrationContext, times(3)) @@ -218,8 +230,9 @@ void onboardingsOrchestratorRegistrationRequestApprove() { onboarding.setWorkflowType(WorkflowType.FOR_APPROVE_PT); TaskOrchestrationContext orchestrationContext = mockTaskOrchestrationContext(onboarding); + - function.onboardingsOrchestrator(orchestrationContext); + function.onboardingsOrchestrator(orchestrationContext, executionContext); ArgumentCaptor captorActivity = ArgumentCaptor.forClass(String.class); Mockito.verify(orchestrationContext, times(2)) @@ -244,8 +257,7 @@ TaskOrchestrationContext mockTaskOrchestrationContext(Onboarding onboarding) { @Test void buildContract() { - ExecutionContext executionContext = mock(ExecutionContext.class); - when(executionContext.getLogger()).thenReturn(Logger.getGlobal()); + doNothing().when(service).createContract(any()); function.buildContract(onboardinString, executionContext); @@ -256,7 +268,7 @@ void buildContract() { @Test void saveToken() { - ExecutionContext executionContext = mock(ExecutionContext.class); + when(executionContext.getLogger()).thenReturn(Logger.getGlobal()); doNothing().when(service).saveTokenWithContract(any()); @@ -268,7 +280,7 @@ void saveToken() { @Test void sendMailRegistrationWithContract() { - ExecutionContext executionContext = mock(ExecutionContext.class); + when(executionContext.getLogger()).thenReturn(Logger.getGlobal()); doNothing().when(service).sendMailRegistrationWithContract(any()); @@ -280,7 +292,7 @@ void sendMailRegistrationWithContract() { @Test void sendMailRegistration() { - ExecutionContext executionContext = mock(ExecutionContext.class); + when(executionContext.getLogger()).thenReturn(Logger.getGlobal()); doNothing().when(service).sendMailRegistration(any()); @@ -292,7 +304,7 @@ void sendMailRegistration() { @Test void sendMailRegistrationApprove() { - ExecutionContext executionContext = mock(ExecutionContext.class); + when(executionContext.getLogger()).thenReturn(Logger.getGlobal()); doNothing().when(service).sendMailRegistrationApprove(any()); @@ -304,7 +316,7 @@ void sendMailRegistrationApprove() { @Test void sendMailOnboardingApprove() { - ExecutionContext executionContext = mock(ExecutionContext.class); + when(executionContext.getLogger()).thenReturn(Logger.getGlobal()); doNothing().when(service).sendMailOnboardingApprove(any()); @@ -316,7 +328,7 @@ void sendMailOnboardingApprove() { @Test void sendMailRegistrationWithContractWhenApprove() { - ExecutionContext executionContext = mock(ExecutionContext.class); + when(executionContext.getLogger()).thenReturn(Logger.getGlobal()); doNothing().when(service).sendMailRegistrationWithContractWhenApprove(any()); @@ -336,8 +348,9 @@ void onboardingCompletionOrchestrator() { onboarding.setInstitution(new Institution()); TaskOrchestrationContext orchestrationContext = mockTaskOrchestrationContext(onboarding); + - function.onboardingsOrchestrator(orchestrationContext); + function.onboardingsOrchestrator(orchestrationContext, executionContext); ArgumentCaptor captorActivity = ArgumentCaptor.forClass(String.class); Mockito.verify(orchestrationContext, times(3)) @@ -362,8 +375,9 @@ void onboardingRejectedOrchestrator() { onboarding.setInstitution(new Institution()); TaskOrchestrationContext orchestrationContext = mockTaskOrchestrationContext(onboarding); + - function.onboardingsOrchestrator(orchestrationContext); + function.onboardingsOrchestrator(orchestrationContext, executionContext); ArgumentCaptor captorActivity = ArgumentCaptor.forClass(String.class); Mockito.verify(orchestrationContext, times(1)) @@ -373,7 +387,7 @@ void onboardingRejectedOrchestrator() { @Test void createInstitutionAndPersistInstitutionId() { - ExecutionContext executionContext = mock(ExecutionContext.class); + when(executionContext.getLogger()).thenReturn(Logger.getGlobal()); when(completionService.createInstitutionAndPersistInstitutionId(any())) .thenReturn("id"); @@ -386,7 +400,7 @@ void createInstitutionAndPersistInstitutionId() { @Test void sendCompletedEmail() { - ExecutionContext executionContext = mock(ExecutionContext.class); + when(executionContext.getLogger()).thenReturn(Logger.getGlobal()); doNothing().when(completionService).sendCompletedEmail(any()); @@ -398,7 +412,7 @@ void sendCompletedEmail() { @Test void sendMailRejection() { - ExecutionContext executionContext = mock(ExecutionContext.class); + when(executionContext.getLogger()).thenReturn(Logger.getGlobal()); doNothing().when(completionService).sendMailRejection(any());