From e2b71a5da046a983033be411eb3016929cc97881 Mon Sep 17 00:00:00 2001 From: Deepthi Doppalapudi <107422736+deepthidoppalapudihmcts@users.noreply.github.com> Date: Tue, 4 Feb 2025 11:23:02 +0000 Subject: [PATCH] CIV-16322 Work allocation task for caseworker to take case offline when CML of GA is updated (#5991) * CIV-16322 added code to trigger wa task when cml is not in ea court * CIV-16322 corrected checkstyle issues * CIV-16322 added unit test for coverage * CIV-16322 added a new field gaEaCourtLocation * CIV-16322 test fix * Update Jenkinsfile_CNP * Revert "CIV-16322 test fix" This reverts commit aea915753808a03dd6115f754372e741e28a6e8c. * CIV-16322 added condition to check only for Lip cases * Reapply "CIV-16322 test fix" This reverts commit 36709233cb66a5a2a7612d1d92ad95c3c8ac1e90. * Revert "Reapply "CIV-16322 test fix"" This reverts commit 4edf1da0e3ba79c2d79d29a9194bf23e292c7380. --------- Co-authored-by: Raja Mani Co-authored-by: sankhajuria --- ...erGenAppLocationUpdateCallbackHandler.java | 14 +- .../hmcts/reform/civil/model/CaseData.java | 1 + ...nAppLocationUpdateCallbackHandlerTest.java | 282 +++++++++++++----- .../civil/sampledata/CaseDataBuilder.java | 1 + .../GeneralApplicationDetailsBuilder.java | 3 +- .../service/GenAppStateHelperServiceTest.java | 1 + 6 files changed, 219 insertions(+), 83 deletions(-) diff --git a/src/main/java/uk/gov/hmcts/reform/civil/handler/callback/camunda/caseevents/TriggerGenAppLocationUpdateCallbackHandler.java b/src/main/java/uk/gov/hmcts/reform/civil/handler/callback/camunda/caseevents/TriggerGenAppLocationUpdateCallbackHandler.java index 4664afc38b7..a6e11ffdc51 100644 --- a/src/main/java/uk/gov/hmcts/reform/civil/handler/callback/camunda/caseevents/TriggerGenAppLocationUpdateCallbackHandler.java +++ b/src/main/java/uk/gov/hmcts/reform/civil/handler/callback/camunda/caseevents/TriggerGenAppLocationUpdateCallbackHandler.java @@ -10,7 +10,9 @@ import uk.gov.hmcts.reform.civil.callback.CallbackHandler; import uk.gov.hmcts.reform.civil.callback.CallbackParams; import uk.gov.hmcts.reform.civil.callback.CaseEvent; +import uk.gov.hmcts.reform.civil.enums.YesOrNo; import uk.gov.hmcts.reform.civil.model.CaseData; +import uk.gov.hmcts.reform.civil.service.FeatureToggleService; import uk.gov.hmcts.reform.civil.service.GenAppStateHelperService; import java.util.List; @@ -19,9 +21,9 @@ import static uk.gov.hmcts.reform.civil.callback.CallbackParams.Params.BEARER_TOKEN; import static uk.gov.hmcts.reform.civil.callback.CallbackType.ABOUT_TO_SUBMIT; import static uk.gov.hmcts.reform.civil.callback.CaseEvent.TRIGGER_LOCATION_UPDATE; -import static uk.gov.hmcts.reform.civil.callback.CaseEvent.TRIGGER_UPDATE_GA_LOCATION; import static uk.gov.hmcts.reform.civil.callback.CaseEvent.TRIGGER_TASK_RECONFIG; import static uk.gov.hmcts.reform.civil.callback.CaseEvent.TRIGGER_TASK_RECONFIG_GA; +import static uk.gov.hmcts.reform.civil.callback.CaseEvent.TRIGGER_UPDATE_GA_LOCATION; @Slf4j @Service @@ -32,6 +34,7 @@ public class TriggerGenAppLocationUpdateCallbackHandler extends CallbackHandler TRIGGER_TASK_RECONFIG_GA); private final GenAppStateHelperService helperService; + private final FeatureToggleService featureToggleService; private final ObjectMapper objectMapper; @Override @@ -48,8 +51,15 @@ public List handledEvents() { private CallbackResponse triggerGaEvent(CallbackParams callbackParams) { CaseData caseData = callbackParams.getCaseData(); + CaseData.CaseDataBuilder caseDataBuilder = caseData.toBuilder(); + String authToken = callbackParams.getParams().get(BEARER_TOKEN).toString(); try { + if (!(featureToggleService.isGaForLipsEnabledAndLocationWhiteListed(caseData + .getCaseManagementLocation().getBaseLocation())) + && caseData.isLipCase()) { + caseDataBuilder.gaEaCourtLocation(YesOrNo.YES); + } if (caseData.getGeneralApplications() != null && !caseData.getGeneralApplications().isEmpty()) { caseData = helperService.updateApplicationLocationDetailsInClaim(caseData, authToken); if (callbackParams.getRequest().getEventId().equals(TRIGGER_UPDATE_GA_LOCATION.name())) { @@ -65,7 +75,7 @@ private CallbackResponse triggerGaEvent(CallbackParams callbackParams) { return AboutToStartOrSubmitCallbackResponse.builder().errors(List.of(errorMessage)).build(); } return AboutToStartOrSubmitCallbackResponse.builder() - .data(caseData.toBuilder().build().toMap(objectMapper)) + .data(caseDataBuilder.build().toMap(objectMapper)) .build(); } diff --git a/src/main/java/uk/gov/hmcts/reform/civil/model/CaseData.java b/src/main/java/uk/gov/hmcts/reform/civil/model/CaseData.java index 42f516a589a..63fc760af22 100644 --- a/src/main/java/uk/gov/hmcts/reform/civil/model/CaseData.java +++ b/src/main/java/uk/gov/hmcts/reform/civil/model/CaseData.java @@ -184,6 +184,7 @@ public class CaseData extends CaseDataParent implements MappableObject { private final YesOrNo parentClaimantIsApplicant; private final GAHearingDateGAspec generalAppHearingDate; private final Document generalAppN245FormUpload; + private final YesOrNo gaEaCourtLocation; @Builder.Default private final List> generalAppRespondentSolicitors = new ArrayList<>(); diff --git a/src/test/java/uk/gov/hmcts/reform/civil/handler/callback/camunda/caseevents/TriggerGenAppLocationUpdateCallbackHandlerTest.java b/src/test/java/uk/gov/hmcts/reform/civil/handler/callback/camunda/caseevents/TriggerGenAppLocationUpdateCallbackHandlerTest.java index f0351aa6fe1..d6b8a6edd73 100644 --- a/src/test/java/uk/gov/hmcts/reform/civil/handler/callback/camunda/caseevents/TriggerGenAppLocationUpdateCallbackHandlerTest.java +++ b/src/test/java/uk/gov/hmcts/reform/civil/handler/callback/camunda/caseevents/TriggerGenAppLocationUpdateCallbackHandlerTest.java @@ -1,5 +1,7 @@ package uk.gov.hmcts.reform.civil.handler.callback.camunda.caseevents; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; @@ -10,9 +12,11 @@ import uk.gov.hmcts.reform.civil.callback.CallbackParams; import uk.gov.hmcts.reform.civil.handler.callback.BaseCallbackHandlerTest; import uk.gov.hmcts.reform.civil.model.CaseData; +import uk.gov.hmcts.reform.civil.model.defaultjudgment.CaseLocationCivil; import uk.gov.hmcts.reform.civil.sampledata.CallbackParamsBuilder; import uk.gov.hmcts.reform.civil.sampledata.CaseDataBuilder; import uk.gov.hmcts.reform.civil.sampledata.GeneralApplicationDetailsBuilder; +import uk.gov.hmcts.reform.civil.service.FeatureToggleService; import uk.gov.hmcts.reform.civil.service.GenAppStateHelperService; import java.util.HashMap; @@ -40,100 +44,218 @@ class TriggerGenAppLocationUpdateCallbackHandlerTest extends BaseCallbackHandler @Mock private GenAppStateHelperService helperService; + @Mock + private FeatureToggleService featureToggleService; @Mock private com.fasterxml.jackson.databind.ObjectMapper objectMapper; private static final String authToken = "Bearer TestAuthToken"; - @Test - void handleEventsReturnsTheExpectedCallbackEvent() { - assertThat(handler.handledEvents()).contains(TRIGGER_UPDATE_GA_LOCATION); - assertThat(handler.handledEvents()).contains(TRIGGER_TASK_RECONFIG_GA); - } + @Nested + class AboutToSubmitCallback { - @Test - void shouldTriggerGeneralApplicationEvent_whenCaseHasGeneralApplication() { - CaseData caseData = GeneralApplicationDetailsBuilder.builder() - .getTestCaseDataWithDetails(CaseData.builder().build(), - true, - true, - true, true, - getOriginalStatusOfGeneralApplication() - ); - when(helperService.updateApplicationLocationDetailsInClaim(any(), any())).thenReturn(caseData); - CallbackParams params = CallbackParamsBuilder.builder() - .of(ABOUT_TO_SUBMIT, caseData) - .request(CallbackRequest.builder() - .eventId(TRIGGER_UPDATE_GA_LOCATION.name()) - .build()) - .build(); - var response = (AboutToStartOrSubmitCallbackResponse) handler.handle(params); - - assertThat(response.getErrors()).isNull(); - verify(helperService, times(1)).updateApplicationLocationDetailsInClaim(any(), any()); - verify(helperService, times(1)).triggerEvent(caseData, TRIGGER_LOCATION_UPDATE); - verify(helperService, times(1)).triggerEvent(caseData, TRIGGER_LOCATION_UPDATE); - verifyNoMoreInteractions(helperService); - } + @BeforeEach + public void before() { + when(featureToggleService.isGaForLipsEnabledAndLocationWhiteListed(any())).thenReturn(true); + } - @Test - void shouldNotTriggerGeneralApplicationEvent_whenCaseHasNoGeneralApplication() { - CaseData caseData = CaseDataBuilder.builder().atStatePendingClaimIssuedUnrepresentedDefendant().build(); - CallbackParams params = callbackParamsOf(caseData, ABOUT_TO_SUBMIT); + @Test + void shouldTriggerGeneralApplicationEvent_whenCaseHasGeneralApplication() { + CaseData caseData = GeneralApplicationDetailsBuilder.builder() + .getTestCaseDataWithDetails(CaseData.builder().build(), + true, + true, + true, true, + getOriginalStatusOfGeneralApplication() + ); - var response = (AboutToStartOrSubmitCallbackResponse) handler.handle(params); + when(helperService.updateApplicationLocationDetailsInClaim(any(), any())).thenReturn(caseData); + CallbackParams params = CallbackParamsBuilder.builder() + .of(ABOUT_TO_SUBMIT, caseData) + .request(CallbackRequest.builder() + .eventId(TRIGGER_UPDATE_GA_LOCATION.name()) + .build()) + .build(); + var response = (AboutToStartOrSubmitCallbackResponse) handler.handle(params); - verifyNoInteractions(helperService); - assertThat(response.getErrors()).isNull(); - } + assertThat(response.getErrors()).isNull(); + verify(helperService, times(1)).updateApplicationLocationDetailsInClaim(any(), any()); + verify(helperService, times(1)).triggerEvent(caseData, TRIGGER_LOCATION_UPDATE); + verify(helperService, times(1)).triggerEvent(caseData, TRIGGER_LOCATION_UPDATE); + verifyNoMoreInteractions(helperService); + } - @Test - void triggerGeneralApplicationEventThrowsException_HandleFailure() { - CaseData caseData = GeneralApplicationDetailsBuilder.builder() - .getTestCaseDataWithDetails(CaseData.builder().ccdCaseReference(1234L).build(), - true, - true, - true, true, - getOriginalStatusOfGeneralApplication() - ); - String expectedErrorMessage = "Could not trigger event to update location on application under case: " - + caseData.getCcdCaseReference(); - when(helperService.updateApplicationLocationDetailsInClaim(any(), any())).thenReturn(caseData); - CallbackParams params = callbackParamsOf(caseData, ABOUT_TO_SUBMIT); - - var response = (AboutToStartOrSubmitCallbackResponse) handler.handle(params); - - assertThat(response.getErrors()).isNotNull(); - assertThat(response.getErrors()).contains(expectedErrorMessage); - } + @Test + void shouldTriggerGeneralApplicationEvent_whenCaseHasGeneralApplicationNotRepresented() { + CaseData caseData = GeneralApplicationDetailsBuilder.builder() + .getTestCaseDataWithLocationDetailsLip(CaseData.builder().build(), + true, + true, + true, true, + getOriginalStatusOfGeneralApplication() + ); - @Test - void shouldTriggerReconfigureWhenCallbackEventIsReconfigGA() { - CaseData caseData = GeneralApplicationDetailsBuilder.builder() - .getTestCaseDataWithDetails(CaseData.builder().build(), - true, - true, - true, true, - getOriginalStatusOfGeneralApplication() - ); - when(helperService.updateApplicationLocationDetailsInClaim(any(), any())).thenReturn(caseData); - CallbackParams callbackParams = CallbackParamsBuilder.builder() - .of(ABOUT_TO_SUBMIT, caseData) - .request(CallbackRequest.builder() - .eventId(TRIGGER_TASK_RECONFIG_GA.name()) - .build()) - .build(); - var response = (AboutToStartOrSubmitCallbackResponse) handler.handle(callbackParams); - assertThat(response.getErrors()).isNull(); - verify(helperService, times(1)).triggerEvent(caseData, TRIGGER_TASK_RECONFIG); + when(helperService.updateApplicationLocationDetailsInClaim(any(), any())).thenReturn(caseData); + CallbackParams params = CallbackParamsBuilder.builder() + .of(ABOUT_TO_SUBMIT, caseData) + .request(CallbackRequest.builder() + .eventId(TRIGGER_UPDATE_GA_LOCATION.name()) + .build()) + .build(); + var response = (AboutToStartOrSubmitCallbackResponse) handler.handle(params); + + assertThat(response.getErrors()).isNull(); + verify(helperService, times(1)).updateApplicationLocationDetailsInClaim(any(), any()); + verify(helperService, times(1)).triggerEvent(caseData, TRIGGER_LOCATION_UPDATE); + verify(helperService, times(1)).triggerEvent(caseData, TRIGGER_LOCATION_UPDATE); + verifyNoMoreInteractions(helperService); + } + + @Test + void shouldTriggerGeneralApplicationEvent_whenCaseHasGeneralApplicationNotRepresentedAndNotInEa() { + CaseData caseData = GeneralApplicationDetailsBuilder.builder() + .getTestCaseDataWithLocationDetailsLip(CaseData.builder().build(), + true, + true, + true, true, + getOriginalStatusOfGeneralApplication() + ); + when(featureToggleService.isGaForLipsEnabledAndLocationWhiteListed(any())).thenReturn(false); + when(helperService.updateApplicationLocationDetailsInClaim(any(), any())).thenReturn(caseData); + CallbackParams params = CallbackParamsBuilder.builder() + .of(ABOUT_TO_SUBMIT, caseData) + .request(CallbackRequest.builder() + .eventId(TRIGGER_UPDATE_GA_LOCATION.name()) + .build()) + .build(); + var response = (AboutToStartOrSubmitCallbackResponse) handler.handle(params); + + assertThat(response.getErrors()).isNull(); + verify(helperService, times(1)).updateApplicationLocationDetailsInClaim(any(), any()); + verify(helperService, times(1)).triggerEvent(caseData, TRIGGER_LOCATION_UPDATE); + verify(helperService, times(1)).triggerEvent(caseData, TRIGGER_LOCATION_UPDATE); + verifyNoMoreInteractions(helperService); + } + + @Test + void shouldTriggerGeneralApplicationEvent_whenCaseHasGeneralApplicationRepresentedAndNotInEa() { + CaseData caseData = GeneralApplicationDetailsBuilder.builder() + .getTestCaseDataWithDetails(CaseData.builder().build(), + true, + true, + true, true, + getOriginalStatusOfGeneralApplication() + ); + when(featureToggleService.isGaForLipsEnabledAndLocationWhiteListed(any())).thenReturn(false); + when(helperService.updateApplicationLocationDetailsInClaim(any(), any())).thenReturn(caseData); + CallbackParams params = CallbackParamsBuilder.builder() + .of(ABOUT_TO_SUBMIT, caseData) + .request(CallbackRequest.builder() + .eventId(TRIGGER_UPDATE_GA_LOCATION.name()) + .build()) + .build(); + var response = (AboutToStartOrSubmitCallbackResponse) handler.handle(params); + + assertThat(response.getErrors()).isNull(); + verify(helperService, times(1)).updateApplicationLocationDetailsInClaim(any(), any()); + verify(helperService, times(1)).triggerEvent(caseData, TRIGGER_LOCATION_UPDATE); + verify(helperService, times(1)).triggerEvent(caseData, TRIGGER_LOCATION_UPDATE); + verifyNoMoreInteractions(helperService); + } + + @Test + void shouldNotTriggerGeneralApplicationEvent_whenCaseHasNoGeneralApplicationLip() { + CaseData caseData = CaseDataBuilder.builder().atStateClaimIssued1v1LiP() + .caseManagementLocation( + CaseLocationCivil.builder().baseLocation("00000") + .region("2").build()).build(); + CallbackParams params = callbackParamsOf(caseData, ABOUT_TO_SUBMIT); + + var response = (AboutToStartOrSubmitCallbackResponse) handler.handle(params); + + verifyNoInteractions(helperService); + assertThat(response.getErrors()).isNull(); + } + + @Test + void shouldNotTriggerGeneralApplicationEvent_whenCaseHasNoGeneralApplication() { + CaseData caseData = CaseDataBuilder.builder().atStatePendingClaimIssuedUnrepresentedDefendant().caseManagementLocation( + CaseLocationCivil.builder().baseLocation("00000") + .region("2").build()).build(); + CallbackParams params = callbackParamsOf(caseData, ABOUT_TO_SUBMIT); + + var response = (AboutToStartOrSubmitCallbackResponse) handler.handle(params); + + verifyNoInteractions(helperService); + assertThat(response.getErrors()).isNull(); + } + + @Test + void shouldTriggerCivilServiceEvent_whenLocationIsNotInEaRegion() { + CaseData caseData = CaseDataBuilder.builder().atStatePendingClaimIssuedUnrepresentedDefendant().caseManagementLocation( + CaseLocationCivil.builder().baseLocation("00000") + .region("2").build()).build(); + CallbackParams params = callbackParamsOf(caseData, ABOUT_TO_SUBMIT); + when(featureToggleService.isGaForLipsEnabledAndLocationWhiteListed(any())).thenReturn(false); + var response = (AboutToStartOrSubmitCallbackResponse) handler.handle(params); + + assertThat(response.getErrors()).isNull(); + } + + @Test + void triggerGeneralApplicationEventThrowsException_HandleFailure() { + CaseData caseData = GeneralApplicationDetailsBuilder.builder() + .getTestCaseDataWithDetails(CaseData.builder().ccdCaseReference(1234L).build(), + true, + true, + true, true, + getOriginalStatusOfGeneralApplication() + ); + String expectedErrorMessage = "Could not trigger event to update location on application under case: " + + caseData.getCcdCaseReference(); + when(helperService.updateApplicationLocationDetailsInClaim(any(), any())).thenReturn(caseData); + CallbackParams params = callbackParamsOf(caseData, ABOUT_TO_SUBMIT); + + var response = (AboutToStartOrSubmitCallbackResponse) handler.handle(params); + + assertThat(response.getErrors()).isNotNull(); + assertThat(response.getErrors()).contains(expectedErrorMessage); + } + + @Test + void shouldTriggerReconfigureWhenCallbackEventIsReconfigGA() { + CaseData caseData = GeneralApplicationDetailsBuilder.builder() + .getTestCaseDataWithDetails(CaseData.builder().build(), + true, + true, + true, true, + getOriginalStatusOfGeneralApplication() + ); + when(helperService.updateApplicationLocationDetailsInClaim(any(), any())).thenReturn(caseData); + CallbackParams callbackParams = CallbackParamsBuilder.builder() + .of(ABOUT_TO_SUBMIT, caseData) + .request(CallbackRequest.builder() + .eventId(TRIGGER_TASK_RECONFIG_GA.name()) + .build()) + .build(); + var response = (AboutToStartOrSubmitCallbackResponse) handler.handle(callbackParams); + assertThat(response.getErrors()).isNull(); + verify(helperService, times(1)).triggerEvent(caseData, TRIGGER_TASK_RECONFIG); + } + + private Map getOriginalStatusOfGeneralApplication() { + Map latestStatus = new HashMap<>(); + latestStatus.put("1234", "Application Submitted - Awaiting Judicial Decision"); + latestStatus.put("2345", "Order Made"); + return latestStatus; + } } - private Map getOriginalStatusOfGeneralApplication() { - Map latestStatus = new HashMap<>(); - latestStatus.put("1234", "Application Submitted - Awaiting Judicial Decision"); - latestStatus.put("2345", "Order Made"); - return latestStatus; + @Test + void handleEventsReturnsTheExpectedCallbackEvent() { + assertThat(handler.handledEvents()).contains(TRIGGER_UPDATE_GA_LOCATION); + assertThat(handler.handledEvents()).contains(TRIGGER_TASK_RECONFIG_GA); } } diff --git a/src/test/java/uk/gov/hmcts/reform/civil/sampledata/CaseDataBuilder.java b/src/test/java/uk/gov/hmcts/reform/civil/sampledata/CaseDataBuilder.java index d11240262b7..7c7913b886f 100644 --- a/src/test/java/uk/gov/hmcts/reform/civil/sampledata/CaseDataBuilder.java +++ b/src/test/java/uk/gov/hmcts/reform/civil/sampledata/CaseDataBuilder.java @@ -3287,6 +3287,7 @@ public CaseDataBuilder atStatePendingClaimIssuedUnrepresentedDefendant() { respondent1OrgRegistered = NO; respondent2Represented = NO; respondent2OrgRegistered = NO; + respondent1OrganisationPolicy = OrganisationPolicy.builder() .orgPolicyCaseAssignedRole("[RESPONDENTSOLICITORONE]") .build(); diff --git a/src/test/java/uk/gov/hmcts/reform/civil/sampledata/GeneralApplicationDetailsBuilder.java b/src/test/java/uk/gov/hmcts/reform/civil/sampledata/GeneralApplicationDetailsBuilder.java index b36017c4655..1257f975f58 100644 --- a/src/test/java/uk/gov/hmcts/reform/civil/sampledata/GeneralApplicationDetailsBuilder.java +++ b/src/test/java/uk/gov/hmcts/reform/civil/sampledata/GeneralApplicationDetailsBuilder.java @@ -341,7 +341,7 @@ public CaseData getTestCaseDataWithDetails(CaseData caseData, return caseDataBuilder.build(); } - public CaseData getTestCaseDataWithLocationDetails(CaseData caseData, + public CaseData getTestCaseDataWithLocationDetailsLip(CaseData caseData, boolean withGADetails, boolean withGADetailsResp, boolean withGADetailsResp2, boolean withGADetailsMaster, @@ -350,6 +350,7 @@ public CaseData getTestCaseDataWithLocationDetails(CaseData caseData, CaseData.CaseDataBuilder caseDataBuilder = caseData.toBuilder(); caseDataBuilder.caseManagementLocation(CaseLocationCivil.builder().baseLocation("000000") .region("2").build()); + caseDataBuilder.respondent1Represented(NO); caseDataBuilder.ccdCaseReference(1L); if (!Collections.isEmpty(applicationIdStatus)) { List genApps = new ArrayList<>(); diff --git a/src/test/java/uk/gov/hmcts/reform/civil/service/GenAppStateHelperServiceTest.java b/src/test/java/uk/gov/hmcts/reform/civil/service/GenAppStateHelperServiceTest.java index 4d003cec5df..aa60976e46c 100644 --- a/src/test/java/uk/gov/hmcts/reform/civil/service/GenAppStateHelperServiceTest.java +++ b/src/test/java/uk/gov/hmcts/reform/civil/service/GenAppStateHelperServiceTest.java @@ -508,5 +508,6 @@ private Map getOriginalStatusOfGeneralApplication() { latestStatus.put("2345", "Order Made"); return latestStatus; } + } }