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 c4612f319..48efd4323 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 @@ -78,7 +78,7 @@ public HttpResponseMessage startOrchestration( DurableTaskClient client = durableContext.getClient(); String instanceId = client.scheduleNewOrchestrationInstance("Onboardings", onboardingId); - context.getLogger().info(String.format("%s %s", CREATED_NEW_ONBOARDING_ORCHESTRATION_WITH_INSTANCE_ID_MSG, instanceId)); + context.getLogger().info(() -> String.format("%s %s", CREATED_NEW_ONBOARDING_ORCHESTRATION_WITH_INSTANCE_ID_MSG, instanceId)); try { @@ -161,7 +161,10 @@ public void onboardingsOrchestrator( } Optional optNextStatus = workflowExecutor.execute(ctx, onboarding); - optNextStatus.ifPresent(onboardingStatus -> service.updateOnboardingStatus(onboardingId, onboardingStatus)); + optNextStatus.ifPresent(onboardingStatus -> { + service.updateOnboardingStatus(onboardingId, onboardingStatus); + workflowExecutor.postProcessor(ctx, onboarding, onboardingStatus); + }); } catch (TaskFailedException ex) { functionContext.getLogger().warning("Error during workflowExecutor execute, msg: " + ex.getMessage()); service.updateOnboardingStatusAndInstanceId(onboardingId, OnboardingStatus.FAILED, ctx.getInstanceId()); @@ -178,7 +181,7 @@ public void onboardingsOrchestrator( */ @FunctionName(BUILD_CONTRACT_ACTIVITY_NAME) public void buildContract(@DurableActivityTrigger(name = "onboardingString") String onboardingWorkflowString, final ExecutionContext context) { - context.getLogger().info(String.format(FORMAT_LOGGER_ONBOARDING_STRING, BUILD_CONTRACT_ACTIVITY_NAME, onboardingWorkflowString)); + context.getLogger().info(() -> String.format(FORMAT_LOGGER_ONBOARDING_STRING, BUILD_CONTRACT_ACTIVITY_NAME, onboardingWorkflowString)); service.createContract(readOnboardingWorkflowValue(objectMapper, onboardingWorkflowString)); } @@ -187,7 +190,7 @@ public void buildContract(@DurableActivityTrigger(name = "onboardingString") Str */ @FunctionName(SAVE_TOKEN_WITH_CONTRACT_ACTIVITY_NAME) public void saveToken(@DurableActivityTrigger(name = "onboardingString") String onboardingWorkflowString, final ExecutionContext context) { - context.getLogger().info(String.format(FORMAT_LOGGER_ONBOARDING_STRING, SAVE_TOKEN_WITH_CONTRACT_ACTIVITY_NAME, onboardingWorkflowString)); + context.getLogger().info(() -> String.format(FORMAT_LOGGER_ONBOARDING_STRING, SAVE_TOKEN_WITH_CONTRACT_ACTIVITY_NAME, onboardingWorkflowString)); service.saveTokenWithContract(readOnboardingWorkflowValue(objectMapper, onboardingWorkflowString)); } @@ -196,90 +199,97 @@ public void saveToken(@DurableActivityTrigger(name = "onboardingString") String */ @FunctionName(SEND_MAIL_REGISTRATION_FOR_CONTRACT) public void sendMailRegistrationForContract(@DurableActivityTrigger(name = "onboardingString") String onboardingWorkflowString, final ExecutionContext context) { - context.getLogger().info(String.format(FORMAT_LOGGER_ONBOARDING_STRING, SEND_MAIL_REGISTRATION_FOR_CONTRACT, onboardingWorkflowString)); + context.getLogger().info(() -> String.format(FORMAT_LOGGER_ONBOARDING_STRING, SEND_MAIL_REGISTRATION_FOR_CONTRACT, onboardingWorkflowString)); service.sendMailRegistrationForContract(readOnboardingWorkflowValue(objectMapper, onboardingWorkflowString)); } @FunctionName(SEND_MAIL_REGISTRATION_FOR_CONTRACT_WHEN_APPROVE_ACTIVITY) public void sendMailRegistrationForContractWhenApprove(@DurableActivityTrigger(name = "onboardingString") String onboardingWorkflowString, final ExecutionContext context) { - context.getLogger().info(String.format(FORMAT_LOGGER_ONBOARDING_STRING, SEND_MAIL_REGISTRATION_FOR_CONTRACT_WHEN_APPROVE_ACTIVITY, onboardingWorkflowString)); + context.getLogger().info(() -> String.format(FORMAT_LOGGER_ONBOARDING_STRING, SEND_MAIL_REGISTRATION_FOR_CONTRACT_WHEN_APPROVE_ACTIVITY, onboardingWorkflowString)); service.sendMailRegistrationForContractWhenApprove(readOnboardingWorkflowValue(objectMapper, onboardingWorkflowString)); } @FunctionName(SEND_MAIL_REGISTRATION_REQUEST_ACTIVITY) public void sendMailRegistration(@DurableActivityTrigger(name = "onboardingString") String onboardingString, final ExecutionContext context) { - context.getLogger().info(String.format(FORMAT_LOGGER_ONBOARDING_STRING, SEND_MAIL_REGISTRATION_REQUEST_ACTIVITY, onboardingString)); + context.getLogger().info(() -> String.format(FORMAT_LOGGER_ONBOARDING_STRING, SEND_MAIL_REGISTRATION_REQUEST_ACTIVITY, onboardingString)); service.sendMailRegistration(readOnboardingValue(objectMapper, onboardingString)); } @FunctionName(SEND_MAIL_REGISTRATION_APPROVE_ACTIVITY) public void sendMailRegistrationApprove(@DurableActivityTrigger(name = "onboardingString") String onboardingString, final ExecutionContext context) { - context.getLogger().info(String.format(FORMAT_LOGGER_ONBOARDING_STRING, SEND_MAIL_REGISTRATION_APPROVE_ACTIVITY, onboardingString)); + context.getLogger().info(() -> String.format(FORMAT_LOGGER_ONBOARDING_STRING, SEND_MAIL_REGISTRATION_APPROVE_ACTIVITY, onboardingString)); service.sendMailRegistrationApprove(readOnboardingValue(objectMapper, onboardingString)); } @FunctionName(SEND_MAIL_ONBOARDING_APPROVE_ACTIVITY) public void sendMailOnboardingApprove(@DurableActivityTrigger(name = "onboardingString") String onboardingString, final ExecutionContext context) { - context.getLogger().info(String.format(FORMAT_LOGGER_ONBOARDING_STRING, SEND_MAIL_ONBOARDING_APPROVE_ACTIVITY, onboardingString)); + context.getLogger().info(() -> String.format(FORMAT_LOGGER_ONBOARDING_STRING, SEND_MAIL_ONBOARDING_APPROVE_ACTIVITY, onboardingString)); service.sendMailOnboardingApprove(readOnboardingValue(objectMapper, onboardingString)); } @FunctionName(CREATE_INSTITUTION_ACTIVITY) public String createInstitutionAndPersistInstitutionId(@DurableActivityTrigger(name = "onboardingString") String onboardingString, final ExecutionContext context) { - context.getLogger().info(String.format(FORMAT_LOGGER_ONBOARDING_STRING, CREATE_INSTITUTION_ACTIVITY, onboardingString)); + context.getLogger().info(() -> String.format(FORMAT_LOGGER_ONBOARDING_STRING, CREATE_INSTITUTION_ACTIVITY, onboardingString)); return completionService.createInstitutionAndPersistInstitutionId(readOnboardingValue(objectMapper, onboardingString)); } @FunctionName(STORE_ONBOARDING_ACTIVATEDAT) public void storeOnboardingActivatedAt(@DurableActivityTrigger(name = "onboardingString") String onboardingString, final ExecutionContext context) { - context.getLogger().info(String.format(FORMAT_LOGGER_ONBOARDING_STRING, STORE_ONBOARDING_ACTIVATEDAT, onboardingString)); + context.getLogger().info(() -> String.format(FORMAT_LOGGER_ONBOARDING_STRING, STORE_ONBOARDING_ACTIVATEDAT, onboardingString)); completionService.persistActivatedAt(readOnboardingValue(objectMapper, onboardingString)); } + @FunctionName(REJECT_OUTDATED_ONBOARDINGS) + public void rejectOutdatedOnboardings(@DurableActivityTrigger(name = "onboardingString") String onboardingString, final ExecutionContext context) { + context.getLogger().info(() -> String.format(FORMAT_LOGGER_ONBOARDING_STRING, REJECT_OUTDATED_ONBOARDINGS, onboardingString)); + completionService.rejectOutdatedOnboardings(readOnboardingValue(objectMapper, onboardingString)); + } + @FunctionName(CREATE_ONBOARDING_ACTIVITY) public void createOnboarding(@DurableActivityTrigger(name = "onboardingString") String onboardingString, final ExecutionContext context) { - context.getLogger().info(String.format(FORMAT_LOGGER_ONBOARDING_STRING, CREATE_ONBOARDING_ACTIVITY, onboardingString)); + context.getLogger().info(() -> String.format(FORMAT_LOGGER_ONBOARDING_STRING, CREATE_ONBOARDING_ACTIVITY, onboardingString)); completionService.persistOnboarding(readOnboardingValue(objectMapper, onboardingString)); } @FunctionName(SEND_MAIL_COMPLETION_ACTIVITY) public void sendMailCompletion(@DurableActivityTrigger(name = "onboardingString") String onboardingWorkflowString, final ExecutionContext context) { - context.getLogger().info(String.format(FORMAT_LOGGER_ONBOARDING_STRING, SEND_MAIL_COMPLETION_ACTIVITY, onboardingWorkflowString)); + context.getLogger().info(() -> String.format(FORMAT_LOGGER_ONBOARDING_STRING, SEND_MAIL_COMPLETION_ACTIVITY, onboardingWorkflowString)); completionService.sendCompletedEmail(readOnboardingWorkflowValue(objectMapper, onboardingWorkflowString)); } @FunctionName(SEND_MAIL_REJECTION_ACTIVITY) public void sendMailRejection(@DurableActivityTrigger(name = "onboardingString") String onboardingString, final ExecutionContext context) { - context.getLogger().info(String.format(FORMAT_LOGGER_ONBOARDING_STRING, SEND_MAIL_REJECTION_ACTIVITY, onboardingString)); + context.getLogger().info(() -> String.format(FORMAT_LOGGER_ONBOARDING_STRING, SEND_MAIL_REJECTION_ACTIVITY, onboardingString)); completionService.sendMailRejection(context, readOnboardingValue(objectMapper, onboardingString)); } @FunctionName(CREATE_USERS_ACTIVITY) public void createOnboardedUsers(@DurableActivityTrigger(name = "onboardingString") String onboardingString, final ExecutionContext context) { - context.getLogger().info(String.format(FORMAT_LOGGER_ONBOARDING_STRING, CREATE_USERS_ACTIVITY, onboardingString)); + context.getLogger().info(() -> String.format(FORMAT_LOGGER_ONBOARDING_STRING, CREATE_USERS_ACTIVITY, onboardingString)); completionService.persistUsers(readOnboardingValue(objectMapper, onboardingString)); } @FunctionName(SEND_MAIL_COMPLETION_AGGREGATE_ACTIVITY) public void sendMailCompletionAggregate(@DurableActivityTrigger(name = "onboardingString") String onboardingString, final ExecutionContext context) { - context.getLogger().info(String.format(FORMAT_LOGGER_ONBOARDING_STRING, SEND_MAIL_COMPLETION_AGGREGATE_ACTIVITY, onboardingString)); + context.getLogger().info(() -> String.format(FORMAT_LOGGER_ONBOARDING_STRING, SEND_MAIL_COMPLETION_AGGREGATE_ACTIVITY, onboardingString)); completionService.sendCompletedEmailAggregate(readOnboardingValue(objectMapper, onboardingString)); } @FunctionName(CREATE_AGGREGATE_ONBOARDING_REQUEST_ACTIVITY) public String createAggregateOnboardingRequest(@DurableActivityTrigger(name = "onboardingString") String onboardingAggregateOrchestratorInputString, final ExecutionContext context) { - context.getLogger().info(String.format(FORMAT_LOGGER_ONBOARDING_STRING, CREATE_AGGREGATE_ONBOARDING_REQUEST_ACTIVITY, onboardingAggregateOrchestratorInputString)); + context.getLogger().info(() -> String.format(FORMAT_LOGGER_ONBOARDING_STRING, CREATE_AGGREGATE_ONBOARDING_REQUEST_ACTIVITY, onboardingAggregateOrchestratorInputString)); return completionService.createAggregateOnboardingRequest(readOnboardingAggregateOrchestratorInputValue(objectMapper, onboardingAggregateOrchestratorInputString)); } + @FunctionName(CREATE_DELEGATION_ACTIVITY) public String createDelegationForAggregation(@DurableActivityTrigger(name = "onboardingString") String onboardingString, final ExecutionContext context) { - context.getLogger().info(String.format(FORMAT_LOGGER_ONBOARDING_STRING, CREATE_USERS_ACTIVITY, onboardingString)); + context.getLogger().info(() -> String.format(FORMAT_LOGGER_ONBOARDING_STRING, CREATE_USERS_ACTIVITY, onboardingString)); return completionService.createDelegation(readOnboardingValue(objectMapper, onboardingString)); } @FunctionName(EXISTS_DELEGATION_ACTIVITY) public String existsDelegation(@DurableActivityTrigger(name = "onboardingString") String onboardingString, final ExecutionContext context) { - context.getLogger().info(String.format(FORMAT_LOGGER_ONBOARDING_STRING, EXISTS_DELEGATION_ACTIVITY, onboardingString)); + context.getLogger().info(() -> String.format(FORMAT_LOGGER_ONBOARDING_STRING, EXISTS_DELEGATION_ACTIVITY, onboardingString)); return completionService.existsDelegation(readOnboardingAggregateOrchestratorInputValue(objectMapper, onboardingString)); } diff --git a/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/functions/utils/ActivityName.java b/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/functions/utils/ActivityName.java index a3a802816..6b01f699f 100644 --- a/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/functions/utils/ActivityName.java +++ b/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/functions/utils/ActivityName.java @@ -14,6 +14,7 @@ public class ActivityName { public static final String SEND_MAIL_COMPLETION_ACTIVITY = "SendMailCompletion"; public static final String SEND_MAIL_REJECTION_ACTIVITY = "SendMailRejection"; public static final String STORE_ONBOARDING_ACTIVATEDAT = "StoreOnboardingActivatedAt"; + public static final String REJECT_OUTDATED_ONBOARDINGS = "RejectOutdatedOnboardings"; public static final String CREATE_USERS_ACTIVITY = "CreateUsers"; public static final String SEND_ONBOARDING_NOTIFICATION = "SendOnboardingNotification"; public static final String CREATE_AGGREGATE_ONBOARDING_REQUEST_ACTIVITY = "CreateAggregateOnboardingRequest"; diff --git a/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/service/CompletionService.java b/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/service/CompletionService.java index 19174fa80..51f5fd77c 100644 --- a/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/service/CompletionService.java +++ b/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/service/CompletionService.java @@ -15,6 +15,8 @@ public interface CompletionService { void persistActivatedAt(Onboarding onboarding); + void rejectOutdatedOnboardings(Onboarding onboarding); + void sendCompletedEmail(OnboardingWorkflow onboardingWorkflow); void sendCompletedEmailAggregate(Onboarding onboarding); @@ -28,4 +30,5 @@ public interface CompletionService { void sendTestEmail(ExecutionContext context); String existsDelegation(OnboardingAggregateOrchestratorInput onboardingAggregateOrchestratorInput); + } diff --git a/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/service/CompletionServiceDefault.java b/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/service/CompletionServiceDefault.java index 83a6d1385..e619c3bbc 100644 --- a/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/service/CompletionServiceDefault.java +++ b/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/service/CompletionServiceDefault.java @@ -40,6 +40,7 @@ import java.util.Optional; import java.util.stream.Collectors; +import static it.pagopa.selfcare.onboarding.common.OnboardingStatus.REJECTED; import static it.pagopa.selfcare.onboarding.common.PartyRole.MANAGER; import static it.pagopa.selfcare.onboarding.common.WorkflowType.CONFIRMATION_AGGREGATE; import static it.pagopa.selfcare.onboarding.service.OnboardingService.USERS_FIELD_LIST; @@ -217,6 +218,15 @@ public void persistActivatedAt(Onboarding onboarding) { .where("_id", onboarding.getId()); } + @Override + public void rejectOutdatedOnboardings(Onboarding onboarding) { + LocalDateTime now = LocalDateTime.now(); + onboardingRepository + .update("status = ?1 and updatedAt = ?2 ", REJECTED, now) + .where("productId = ?1 and institution.origin = ?2 and institution.originId = ?3 and status = PENDING or status = TOBEVALIDATED", + onboarding.getProductId(), onboarding.getInstitution().getOrigin(), onboarding.getInstitution().getOriginId()); + } + @Override public void sendCompletedEmailAggregate(Onboarding onboarding) { List destinationMails = getDestinationMails(onboarding); diff --git a/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/workflow/WorkflowExecutor.java b/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/workflow/WorkflowExecutor.java index d3e4f176d..1b8121bff 100644 --- a/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/workflow/WorkflowExecutor.java +++ b/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/workflow/WorkflowExecutor.java @@ -16,6 +16,7 @@ import java.util.Objects; import java.util.Optional; +import static it.pagopa.selfcare.onboarding.common.OnboardingStatus.COMPLETED; import static it.pagopa.selfcare.onboarding.functions.utils.ActivityName.*; import static it.pagopa.selfcare.onboarding.utils.Utils.*; public interface WorkflowExecutor { @@ -77,7 +78,7 @@ default Optional onboardingCompletionActivity(TaskOrchestratio Onboarding onboarding = onboardingWorkflow.getOnboarding(); createInstitutionAndOnboarding(ctx, onboarding); ctx.callActivity(SEND_MAIL_COMPLETION_ACTIVITY, getOnboardingWorkflowString(objectMapper(), onboardingWorkflow), optionsRetry(), String.class).await(); - return Optional.of(OnboardingStatus.COMPLETED); + return Optional.of(COMPLETED); } default Optional onboardingCompletionUsersActivity(TaskOrchestrationContext ctx, OnboardingWorkflow onboardingWorkflow) { @@ -86,7 +87,7 @@ default Optional onboardingCompletionUsersActivity(TaskOrchest ctx.callActivity(CREATE_USERS_ACTIVITY, onboardingString, optionsRetry(), String.class).await(); ctx.callActivity(STORE_ONBOARDING_ACTIVATEDAT, onboardingString, optionsRetry(), String.class).await(); ctx.callActivity(SEND_MAIL_COMPLETION_ACTIVITY, onboardingWorkflowString, optionsRetry(), String.class).await(); - return Optional.of(OnboardingStatus.COMPLETED); + return Optional.of(COMPLETED); } default void createInstitutionAndOnboardingAggregate(TaskOrchestrationContext ctx, Onboarding onboarding, OnboardingMapper onboardingMapper){ @@ -103,7 +104,7 @@ default void createInstitutionAndOnboardingAggregate(TaskOrchestrationContext ct default Optional onboardingCompletionActivityWithoutMail(TaskOrchestrationContext ctx, Onboarding onboarding) { createInstitutionAndOnboarding(ctx, onboarding); - return Optional.of(OnboardingStatus.COMPLETED); + return Optional.of(COMPLETED); } private String onboardingStringWithTestEnvProductId(String testEnvProductId, String onboardingWithInstitutionIdString) { @@ -122,4 +123,11 @@ default Optional executeRejectedState(TaskOrchestrationContext return Optional.empty(); } + default void postProcessor(TaskOrchestrationContext ctx, Onboarding onboarding, OnboardingStatus onboardingStatus) { + if (COMPLETED.equals(onboardingStatus)) { + final String onboardingString = getOnboardingString(objectMapper(), onboarding); + ctx.callActivity(REJECT_OUTDATED_ONBOARDINGS, onboardingString, optionsRetry(), String.class).await(); + } + } + } 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 fae9f1d19..e03d7e62a 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 @@ -181,13 +181,14 @@ void onboardingOrchestratorContractRegistrationAggregator_Pending(){ function.onboardingsOrchestrator(orchestrationContext, executionContext); ArgumentCaptor captorActivity = ArgumentCaptor.forClass(String.class); - Mockito.verify(orchestrationContext, times(5)) + Mockito.verify(orchestrationContext, times(6)) .callActivity(captorActivity.capture(), any(), any(),any()); assertEquals(CREATE_INSTITUTION_ACTIVITY, captorActivity.getAllValues().get(0)); assertEquals(CREATE_ONBOARDING_ACTIVITY, captorActivity.getAllValues().get(1)); assertEquals(CREATE_USERS_ACTIVITY, captorActivity.getAllValues().get(2)); assertEquals(STORE_ONBOARDING_ACTIVATEDAT, captorActivity.getAllValues().get(3)); assertEquals(SEND_MAIL_COMPLETION_ACTIVITY, captorActivity.getAllValues().get(4)); + assertEquals(REJECT_OUTDATED_ONBOARDINGS, captorActivity.getAllValues().get(5)); Mockito.verify(orchestrationContext, times(3)) .callSubOrchestrator(eq(ONBOARDINGS_AGGREGATE_ORCHESTRATOR), any(), any()); @@ -325,17 +326,17 @@ void onboardingsOrchestratorConfirmation() { TaskOrchestrationContext orchestrationContext = mockTaskOrchestrationContext(onboarding); - function.onboardingsOrchestrator(orchestrationContext, executionContext); ArgumentCaptor captorActivity = ArgumentCaptor.forClass(String.class); - verify(orchestrationContext, times(5)) + verify(orchestrationContext, times(6)) .callActivity(captorActivity.capture(), any(), any(),any()); assertEquals(CREATE_INSTITUTION_ACTIVITY, captorActivity.getAllValues().get(0)); assertEquals(CREATE_ONBOARDING_ACTIVITY, captorActivity.getAllValues().get(1)); assertEquals(CREATE_USERS_ACTIVITY, captorActivity.getAllValues().get(2)); assertEquals(STORE_ONBOARDING_ACTIVATEDAT, captorActivity.getAllValues().get(3)); assertEquals(SEND_MAIL_COMPLETION_ACTIVITY, captorActivity.getAllValues().get(4)); + assertEquals(REJECT_OUTDATED_ONBOARDINGS, captorActivity.getAllValues().get(5)); verify(service, times(1)) .updateOnboardingStatus(onboarding.getId(), OnboardingStatus.COMPLETED); @@ -352,11 +353,10 @@ void onboardingsOrchestratorConfirmationWithTestProductIds() { TaskOrchestrationContext orchestrationContext = mockTaskOrchestrationContext(onboarding); - function.onboardingsOrchestrator(orchestrationContext, executionContext); ArgumentCaptor captorActivity = ArgumentCaptor.forClass(String.class); - verify(orchestrationContext, times(7)) + verify(orchestrationContext, times(8)) .callActivity(captorActivity.capture(), any(), any(),any()); assertEquals(CREATE_INSTITUTION_ACTIVITY, captorActivity.getAllValues().get(0)); assertEquals(CREATE_ONBOARDING_ACTIVITY, captorActivity.getAllValues().get(1)); @@ -365,6 +365,7 @@ void onboardingsOrchestratorConfirmationWithTestProductIds() { assertEquals(CREATE_ONBOARDING_ACTIVITY, captorActivity.getAllValues().get(4)); assertEquals(CREATE_USERS_ACTIVITY, captorActivity.getAllValues().get(5)); assertEquals(SEND_MAIL_COMPLETION_ACTIVITY, captorActivity.getAllValues().get(6)); + assertEquals(REJECT_OUTDATED_ONBOARDINGS, captorActivity.getAllValues().get(7)); verify(service, times(1)) .updateOnboardingStatus(onboarding.getId(), OnboardingStatus.COMPLETED); @@ -384,7 +385,7 @@ void onboardingOrchestratorConfirmAggregate(){ function.onboardingsOrchestrator(orchestrationContext, executionContext); ArgumentCaptor captorActivity = ArgumentCaptor.forClass(String.class); - Mockito.verify(orchestrationContext, times(6)) + Mockito.verify(orchestrationContext, times(7)) .callActivity(captorActivity.capture(), any(), any(),any()); assertEquals(CREATE_INSTITUTION_ACTIVITY, captorActivity.getAllValues().get(0)); assertEquals(CREATE_ONBOARDING_ACTIVITY, captorActivity.getAllValues().get(1)); @@ -392,6 +393,7 @@ void onboardingOrchestratorConfirmAggregate(){ assertEquals(CREATE_USERS_ACTIVITY, captorActivity.getAllValues().get(3)); assertEquals(STORE_ONBOARDING_ACTIVATEDAT, captorActivity.getAllValues().get(4)); assertEquals(SEND_MAIL_COMPLETION_AGGREGATE_ACTIVITY, captorActivity.getAllValues().get(5)); + assertEquals(REJECT_OUTDATED_ONBOARDINGS, captorActivity.getAllValues().get(6)); Mockito.verify(service, times(1)) .updateOnboardingStatus(onboarding.getId(), OnboardingStatus.COMPLETED); @@ -489,12 +491,13 @@ void onboardingsOrchestratorImport() { function.onboardingsOrchestrator(orchestrationContext, executionContext); ArgumentCaptor captorActivity = ArgumentCaptor.forClass(String.class); - verify(orchestrationContext, times(4)) + verify(orchestrationContext, times(5)) .callActivity(captorActivity.capture(), any(), any(),any()); assertEquals(CREATE_INSTITUTION_ACTIVITY, captorActivity.getAllValues().get(0)); assertEquals(CREATE_ONBOARDING_ACTIVITY, captorActivity.getAllValues().get(1)); assertEquals(CREATE_USERS_ACTIVITY, captorActivity.getAllValues().get(2)); assertEquals(STORE_ONBOARDING_ACTIVATEDAT, captorActivity.getAllValues().get(3)); + assertEquals(REJECT_OUTDATED_ONBOARDINGS, captorActivity.getAllValues().get(4)); verify(service, times(1)) .updateOnboardingStatus(onboarding.getId(), OnboardingStatus.COMPLETED); @@ -513,11 +516,13 @@ void onboardingsOrchestratorNewAdmin() { function.onboardingsOrchestrator(orchestrationContext, executionContext); ArgumentCaptor captorActivity = ArgumentCaptor.forClass(String.class); - verify(orchestrationContext, times(3)) + verify(orchestrationContext, times(4)) .callActivity(captorActivity.capture(), any(), any(),any()); assertEquals(CREATE_USERS_ACTIVITY, captorActivity.getAllValues().get(0)); assertEquals(STORE_ONBOARDING_ACTIVATEDAT, captorActivity.getAllValues().get(1)); assertEquals(SEND_MAIL_COMPLETION_ACTIVITY, captorActivity.getAllValues().get(2)); + assertEquals(REJECT_OUTDATED_ONBOARDINGS, captorActivity.getAllValues().get(3)); + verify(service, times(1)) .updateOnboardingStatus(onboarding.getId(), OnboardingStatus.COMPLETED); } @@ -557,13 +562,14 @@ void onboardingsOrchestratorForApprovePtWhenToBeValidated() { function.onboardingsOrchestrator(orchestrationContext, executionContext); ArgumentCaptor captorActivity = ArgumentCaptor.forClass(String.class); - verify(orchestrationContext, times(5)) + verify(orchestrationContext, times(6)) .callActivity(captorActivity.capture(), any(), any(),any()); assertEquals(CREATE_INSTITUTION_ACTIVITY, captorActivity.getAllValues().get(0)); assertEquals(CREATE_ONBOARDING_ACTIVITY, captorActivity.getAllValues().get(1)); assertEquals(CREATE_USERS_ACTIVITY, captorActivity.getAllValues().get(2)); assertEquals(STORE_ONBOARDING_ACTIVATEDAT, captorActivity.getAllValues().get(3)); assertEquals(SEND_MAIL_COMPLETION_ACTIVITY, captorActivity.getAllValues().get(4)); + assertEquals(REJECT_OUTDATED_ONBOARDINGS, captorActivity.getAllValues().get(5)); verify(service, times(1)) .updateOnboardingStatus(onboarding.getId(), OnboardingStatus.COMPLETED); @@ -690,18 +696,17 @@ void onboardingCompletionOrchestrator() { TaskOrchestrationContext orchestrationContext = mockTaskOrchestrationContext(onboarding); - function.onboardingsOrchestrator(orchestrationContext, executionContext); ArgumentCaptor captorActivity = ArgumentCaptor.forClass(String.class); - verify(orchestrationContext, times(5)) + verify(orchestrationContext, times(6)) .callActivity(captorActivity.capture(), any(), any(),any()); assertEquals(CREATE_INSTITUTION_ACTIVITY, captorActivity.getAllValues().get(0)); assertEquals(CREATE_ONBOARDING_ACTIVITY, captorActivity.getAllValues().get(1)); assertEquals(CREATE_USERS_ACTIVITY, captorActivity.getAllValues().get(2)); assertEquals(STORE_ONBOARDING_ACTIVATEDAT, captorActivity.getAllValues().get(3)); assertEquals(SEND_MAIL_COMPLETION_ACTIVITY, captorActivity.getAllValues().get(4)); - assertEquals(SEND_MAIL_COMPLETION_ACTIVITY, captorActivity.getAllValues().get(4)); + assertEquals(REJECT_OUTDATED_ONBOARDINGS, captorActivity.getAllValues().get(5)); verify(service, times(1)) .updateOnboardingStatus(onboarding.getId(), OnboardingStatus.COMPLETED); @@ -741,6 +746,18 @@ void createInstitutionAndPersistInstitutionId() { .createInstitutionAndPersistInstitutionId(any()); } + @Test + void rejectOutdatingOnboardings() { + + when(executionContext.getLogger()).thenReturn(Logger.getGlobal()); + doNothing().when(completionService).rejectOutdatedOnboardings(any()); + + function.rejectOutdatedOnboardings(onboardinString, executionContext); + + verify(completionService, times(1)) + .rejectOutdatedOnboardings(any()); + } + @Test void createOnboarding() { diff --git a/apps/onboarding-functions/src/test/java/it/pagopa/selfcare/onboarding/service/CompletionServiceDefaultTest.java b/apps/onboarding-functions/src/test/java/it/pagopa/selfcare/onboarding/service/CompletionServiceDefaultTest.java index 8e02a7835..a34aa065f 100644 --- a/apps/onboarding-functions/src/test/java/it/pagopa/selfcare/onboarding/service/CompletionServiceDefaultTest.java +++ b/apps/onboarding-functions/src/test/java/it/pagopa/selfcare/onboarding/service/CompletionServiceDefaultTest.java @@ -202,6 +202,26 @@ void persistUpadatedAt() { .update("activatedAt = ?1 and updatedAt = ?2 ", any(), any()); } + @Test + void rejectOutdatedOnboardings(){ + + Onboarding onboarding = createOnboarding(); + onboarding.getInstitution().setOriginId("originId"); + onboarding.getInstitution().setOrigin(Origin.IPA); + + PanacheUpdate panacheUpdateMock = mock(PanacheUpdate.class); + when(panacheUpdateMock.where("productId = ?1 and institution.origin = ?2 and institution.originId = ?3 and status = PENDING or status = TOBEVALIDATED", + onboarding.getProductId(), onboarding.getInstitution().getOrigin(), onboarding.getInstitution().getOriginId())) + .thenReturn(Long.valueOf(1)); + when(onboardingRepository.update("status = ?1 and updatedAt = ?2 ", any(), any())) + .thenReturn(panacheUpdateMock); + + completionServiceDefault.rejectOutdatedOnboardings(onboarding); + + verify(onboardingRepository, times(1)) + .update("status = ?1 and updatedAt = ?2 ", any(), any()); + } + @Test void createInstitutionAndPersistInstitutionId_notFoundInstitutionAndCreateSaAnac() { Onboarding onboarding = createOnboarding();