From 5aaba4b85cdc5df277e532f8b80f3b380b2276cb Mon Sep 17 00:00:00 2001 From: SomeshRA Date: Tue, 17 Dec 2024 12:00:23 +0000 Subject: [PATCH 1/3] Trigger build with empty commit From c359c63a4df0f737941a29c1ac67a6306dc3b999 Mon Sep 17 00:00:00 2001 From: SomeshRA Date: Tue, 17 Dec 2024 15:32:41 +0000 Subject: [PATCH 2/3] SSCSSI-144: Testing by removing next event not present --- .../UploadWelshDocumentsSubmittedHandler.java | 3 +-- .../UploadWelshDocumentsSubmittedHandlerTest.java | 1 - 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/uk/gov/hmcts/reform/sscs/ccd/presubmit/uploadwelshdocument/UploadWelshDocumentsSubmittedHandler.java b/src/main/java/uk/gov/hmcts/reform/sscs/ccd/presubmit/uploadwelshdocument/UploadWelshDocumentsSubmittedHandler.java index 0ee9ccd7763..6a478338771 100644 --- a/src/main/java/uk/gov/hmcts/reform/sscs/ccd/presubmit/uploadwelshdocument/UploadWelshDocumentsSubmittedHandler.java +++ b/src/main/java/uk/gov/hmcts/reform/sscs/ccd/presubmit/uploadwelshdocument/UploadWelshDocumentsSubmittedHandler.java @@ -41,8 +41,7 @@ public boolean canHandle(CallbackType callbackType, Callback callb return callbackType.equals(CallbackType.SUBMITTED) && callback.getEvent().equals(EventType.UPLOAD_WELSH_DOCUMENT) - && !callback.getCaseDetails().getState().equals(State.INTERLOCUTORY_REVIEW_STATE) - && StringUtils.isNotEmpty(callback.getCaseDetails().getCaseData().getSscsWelshPreviewNextEvent()); + && !callback.getCaseDetails().getState().equals(State.INTERLOCUTORY_REVIEW_STATE); } @Override diff --git a/src/test/java/uk/gov/hmcts/reform/sscs/ccd/presubmit/uploadwelshdocument/UploadWelshDocumentsSubmittedHandlerTest.java b/src/test/java/uk/gov/hmcts/reform/sscs/ccd/presubmit/uploadwelshdocument/UploadWelshDocumentsSubmittedHandlerTest.java index 69db3e5077e..2121605ec5e 100644 --- a/src/test/java/uk/gov/hmcts/reform/sscs/ccd/presubmit/uploadwelshdocument/UploadWelshDocumentsSubmittedHandlerTest.java +++ b/src/test/java/uk/gov/hmcts/reform/sscs/ccd/presubmit/uploadwelshdocument/UploadWelshDocumentsSubmittedHandlerTest.java @@ -294,7 +294,6 @@ private Object[] generateCanHandleScenarios() { Callback callbackWithValidEventOption = buildCallback(EventType.SEND_TO_DWP.getCcdType()); return new Object[]{new Object[]{SUBMITTED, buildCallback("sendToDwp"), true}, new Object[]{ABOUT_TO_SUBMIT, buildCallback(EventType.SEND_TO_DWP.getCcdType()), false}, - new Object[]{SUBMITTED, buildCallback(null), false}, new Object[]{SUBMITTED, buildCallbackInterlocReviewState(), false} }; } From ed8fbcf84ab89ede0c401c2cf61518a573853439 Mon Sep 17 00:00:00 2001 From: SomeshRA Date: Wed, 18 Dec 2024 17:15:33 +0000 Subject: [PATCH 3/3] SSCSSI-144: SSCSCI-1013 - Fix Welsh Case Urgent Hearing along with CCD V2 update --- .../sscs/callback/UploadWelshDocumentsIt.java | 26 +- .../UploadWelshDocumentsSubmittedHandler.java | 85 +++--- ...oadWelshDocumentsSubmittedHandlerTest.java | 260 ++++++++++-------- 3 files changed, 216 insertions(+), 155 deletions(-) diff --git a/src/IntegrationTests/java/uk/gov/hmcts/reform/sscs/callback/UploadWelshDocumentsIt.java b/src/IntegrationTests/java/uk/gov/hmcts/reform/sscs/callback/UploadWelshDocumentsIt.java index 3a8f8b3e94c..fa673b46ece 100644 --- a/src/IntegrationTests/java/uk/gov/hmcts/reform/sscs/callback/UploadWelshDocumentsIt.java +++ b/src/IntegrationTests/java/uk/gov/hmcts/reform/sscs/callback/UploadWelshDocumentsIt.java @@ -1,12 +1,12 @@ package uk.gov.hmcts.reform.sscs.callback; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.BDDMockito.given; +import static org.mockito.Mockito.verify; import static uk.gov.hmcts.reform.sscs.helper.IntegrationTestHelper.assertHttpStatus; import static uk.gov.hmcts.reform.sscs.helper.IntegrationTestHelper.getRequestWithAuthHeader; @@ -101,16 +101,32 @@ public void givenSubmittedCallbackForCancelTranslation_shouldUpdateCaseAndTrigge MockHttpServletResponse response = getResponse(getRequestWithAuthHeader(json, "/ccdSubmittedEvent")); assertHttpStatus(response, HttpStatus.OK); - PreSubmitCallbackResponse result = deserialize(response.getContentAsString()); - assertNull(result.getData().getSscsWelshPreviewNextEvent()); + + verify(coreCaseDataApi).submitEventForCaseWorker(anyString(), anyString(), anyString(), eq("SSCS"), + eq("Benefit"), eq("12345656789"), eq(true), any(CaseDataContent.class)); } private void mockCcd() { + Map caseData = new HashMap<>(); + caseData.put("sscsWelshPreviewNextEvent", "sendToDwp"); + caseData.put("ccdCaseId", "12345656789"); + + StartEventResponse startEventResponse = StartEventResponse.builder() + .caseDetails(CaseDetails.builder() + .id(12345656789L) + .data(caseData) + .build()) + .build(); + + given(coreCaseDataApi.startEventForCaseWorker(eq("Bearer authToken"), eq("s2s token"), + eq("userId"), eq("SSCS"), eq("Benefit"), eq("12345656789"), + eq("updateCaseOnly"))) + .willReturn(startEventResponse); given(coreCaseDataApi.startEventForCaseWorker(eq("Bearer authToken"), eq("s2s token"), eq("userId"), eq("SSCS"), eq("Benefit"), eq("12345656789"), eq("sendToDwp"))) - .willReturn(StartEventResponse.builder().build()); + .willReturn(startEventResponse); Map data = new HashMap<>(); data.put("sscsWelshPreviewNextEvent", null); @@ -118,7 +134,7 @@ private void mockCcd() { eq("userId"), eq("SSCS"), eq("Benefit"), eq("12345656789"), eq(true), any(CaseDataContent.class))) .willReturn(CaseDetails.builder() - .id(123L) + .id(12345656789L) .data(data) .build()); } diff --git a/src/main/java/uk/gov/hmcts/reform/sscs/ccd/presubmit/uploadwelshdocument/UploadWelshDocumentsSubmittedHandler.java b/src/main/java/uk/gov/hmcts/reform/sscs/ccd/presubmit/uploadwelshdocument/UploadWelshDocumentsSubmittedHandler.java index 6a478338771..4d1007cf398 100644 --- a/src/main/java/uk/gov/hmcts/reform/sscs/ccd/presubmit/uploadwelshdocument/UploadWelshDocumentsSubmittedHandler.java +++ b/src/main/java/uk/gov/hmcts/reform/sscs/ccd/presubmit/uploadwelshdocument/UploadWelshDocumentsSubmittedHandler.java @@ -6,6 +6,7 @@ import static uk.gov.hmcts.reform.sscs.ccd.presubmit.furtherevidence.actionfurtherevidence.FurtherEvidenceActionDynamicListItems.OTHER_DOCUMENT_MANUAL; import java.time.LocalDate; +import java.util.function.Consumer; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -17,21 +18,22 @@ import uk.gov.hmcts.reform.sscs.ccd.domain.*; import uk.gov.hmcts.reform.sscs.ccd.domain.InterlocReviewState; import uk.gov.hmcts.reform.sscs.ccd.presubmit.PreSubmitCallbackHandler; -import uk.gov.hmcts.reform.sscs.ccd.presubmit.furtherevidence.actionfurtherevidence.FurtherEvidenceActionDynamicListItems; -import uk.gov.hmcts.reform.sscs.ccd.service.CcdService; +import uk.gov.hmcts.reform.sscs.ccd.service.UpdateCcdCaseService; import uk.gov.hmcts.reform.sscs.idam.IdamService; @Service @Slf4j public class UploadWelshDocumentsSubmittedHandler implements PreSubmitCallbackHandler { - private final CcdService ccdService; private final IdamService idamService; + private final UpdateCcdCaseService updateCcdCaseService; + @Autowired - public UploadWelshDocumentsSubmittedHandler(CcdService ccdService, IdamService idamService) { - this.ccdService = ccdService; + public UploadWelshDocumentsSubmittedHandler(IdamService idamService, + UpdateCcdCaseService updateCcdCaseService) { this.idamService = idamService; + this.updateCcdCaseService = updateCcdCaseService; } @Override @@ -47,22 +49,29 @@ public boolean canHandle(CallbackType callbackType, Callback callb @Override public PreSubmitCallbackResponse handle(CallbackType callbackType, Callback callback, String userAuthorisation) { String nextEvent = callback.getCaseDetails().getCaseData().getSscsWelshPreviewNextEvent(); - log.info("Next event to submit {}", nextEvent); + Consumer mutator = (SscsCaseDetails sscsCaseDetails) -> { + SscsCaseData caseData = sscsCaseDetails.getData(); + caseData.setSscsWelshPreviewNextEvent(null); + }; SscsCaseData sscsCaseData = callback.getCaseDetails().getCaseData(); - - sscsCaseData.setSscsWelshPreviewNextEvent(null); + log.info("Next event to submit {} for case reference {}", nextEvent, sscsCaseData.getCcdCaseId()); if (isValidUrgentHearingDocument(sscsCaseData)) { - setMakeCaseUrgentTriggerEvent(sscsCaseData, callback.getCaseDetails().getId(), - OTHER_DOCUMENT_MANUAL, EventType.MAKE_CASE_URGENT, "Send a case to urgent hearing"); + sscsCaseData = setMakeCaseUrgentTriggerEvent(callback.getCaseDetails().getId(), mutator).getData(); } else if (isReinstatementRequest(sscsCaseData)) { - sscsCaseData = setReinstatementRequest(sscsCaseData, callback.getCaseDetails().getId(), nextEvent); + sscsCaseData = setReinstatementRequest(sscsCaseData, callback.getCaseDetails().getId(), nextEvent, mutator); } else { - log.info("Submitting Next Event {}", nextEvent); - ccdService.updateCase(sscsCaseData, callback.getCaseDetails().getId(), - nextEvent, "Upload welsh document", - "Upload welsh document", idamService.getIdamTokens()); + if (StringUtils.isNotEmpty(nextEvent)) { + updateCcdCaseService.updateCaseV2( + callback.getCaseDetails().getId(), + nextEvent, + "Upload welsh document", + "Upload welsh document", + idamService.getIdamTokens(), + mutator + ); + } } return new PreSubmitCallbackResponse<>(sscsCaseData); } @@ -84,33 +93,37 @@ private boolean isReinstatementRequest(SscsCaseData caseData) { return (isTranslationsOutstanding && (isDocReinstatement || isWelshReinstatement)); } - private SscsCaseDetails setMakeCaseUrgentTriggerEvent( - SscsCaseData caseData, Long caseId, - FurtherEvidenceActionDynamicListItems interlocType, EventType eventType, String summary) { - return ccdService.updateCase(caseData, caseId, - eventType.getCcdType(), summary, - interlocType.getLabel(), idamService.getIdamTokens()); + private SscsCaseDetails setMakeCaseUrgentTriggerEvent(Long caseId, Consumer caseDataConsumer) { + return updateCcdCaseService.updateCaseV2( + caseId, + EventType.MAKE_CASE_URGENT.getCcdType(), + "Send a case to urgent hearing", + OTHER_DOCUMENT_MANUAL.getLabel(), + idamService.getIdamTokens(), + caseDataConsumer + ); } - private SscsCaseData setReinstatementRequest(SscsCaseData sscsCaseData, Long caseId, String nextEvent) { - - log.info("Setting Reinstatement Request for Welsh Case {}", caseId); + private SscsCaseData setReinstatementRequest(SscsCaseData sscsCaseData, Long caseId, String nextEvent, Consumer mutator) { + Consumer caseDataConsumer = sscsCaseDetails -> { + mutator.accept(sscsCaseDetails); + SscsCaseData data = sscsCaseDetails.getData(); + data.setReinstatementRegistered(LocalDate.now()); + data.setReinstatementOutcome(RequestOutcome.IN_PROGRESS); - sscsCaseData.setReinstatementRegistered(LocalDate.now()); - sscsCaseData.setReinstatementOutcome(RequestOutcome.IN_PROGRESS); + State previousState = sscsCaseData.getPreviousState(); - State previousState = sscsCaseData.getPreviousState(); - - if (previousState != null - && (previousState.equals(State.DORMANT_APPEAL_STATE) || previousState.equals(State.VOID_STATE))) { - sscsCaseData.setPreviousState(State.INTERLOCUTORY_REVIEW_STATE); - log.info("{} setting previousState from {} to interlocutoryReviewState", sscsCaseData.getCcdCaseId(), previousState.getId()); - } + if (previousState != null + && (previousState.equals(State.DORMANT_APPEAL_STATE) || previousState.equals(State.VOID_STATE))) { + data.setPreviousState(State.INTERLOCUTORY_REVIEW_STATE); + log.info("{} setting previousState from {} to interlocutoryReviewState", sscsCaseData.getCcdCaseId(), previousState.getId()); + } - sscsCaseData.setInterlocReviewState(InterlocReviewState.REVIEW_BY_JUDGE); + data.setInterlocReviewState(InterlocReviewState.REVIEW_BY_JUDGE); + }; - ccdService.updateCase(sscsCaseData, caseId, nextEvent, "Upload Welsh Document", - "Upload Welsh Document", idamService.getIdamTokens()); + updateCcdCaseService.updateCaseV2(caseId, nextEvent, "Upload Welsh Document", + "Upload Welsh Document", idamService.getIdamTokens(), caseDataConsumer); return sscsCaseData; } diff --git a/src/test/java/uk/gov/hmcts/reform/sscs/ccd/presubmit/uploadwelshdocument/UploadWelshDocumentsSubmittedHandlerTest.java b/src/test/java/uk/gov/hmcts/reform/sscs/ccd/presubmit/uploadwelshdocument/UploadWelshDocumentsSubmittedHandlerTest.java index 2121605ec5e..e7f0c45c60d 100644 --- a/src/test/java/uk/gov/hmcts/reform/sscs/ccd/presubmit/uploadwelshdocument/UploadWelshDocumentsSubmittedHandlerTest.java +++ b/src/test/java/uk/gov/hmcts/reform/sscs/ccd/presubmit/uploadwelshdocument/UploadWelshDocumentsSubmittedHandlerTest.java @@ -1,7 +1,7 @@ package uk.gov.hmcts.reform.sscs.ccd.presubmit.uploadwelshdocument; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; import static org.mockito.Mockito.*; import static uk.gov.hmcts.reform.sscs.ccd.callback.CallbackType.ABOUT_TO_SUBMIT; import static uk.gov.hmcts.reform.sscs.ccd.callback.CallbackType.SUBMITTED; @@ -12,104 +12,99 @@ import java.util.ArrayList; import java.util.List; import java.util.Optional; -import junitparams.JUnitParamsRunner; -import junitparams.Parameters; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; +import java.util.function.Consumer; +import java.util.stream.Stream; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.EnumSource; +import org.junit.jupiter.params.provider.MethodSource; +import org.mockito.ArgumentCaptor; +import org.mockito.Captor; +import org.mockito.InjectMocks; import org.mockito.Mock; -import org.mockito.MockitoAnnotations; +import org.mockito.junit.jupiter.MockitoExtension; import uk.gov.hmcts.reform.sscs.ccd.callback.Callback; import uk.gov.hmcts.reform.sscs.ccd.callback.CallbackType; import uk.gov.hmcts.reform.sscs.ccd.callback.DocumentType; import uk.gov.hmcts.reform.sscs.ccd.domain.*; import uk.gov.hmcts.reform.sscs.ccd.domain.InterlocReviewState; -import uk.gov.hmcts.reform.sscs.ccd.service.CcdService; +import uk.gov.hmcts.reform.sscs.ccd.service.UpdateCcdCaseService; import uk.gov.hmcts.reform.sscs.idam.IdamService; -import uk.gov.hmcts.reform.sscs.idam.IdamTokens; -@RunWith(JUnitParamsRunner.class) +@ExtendWith(MockitoExtension.class) public class UploadWelshDocumentsSubmittedHandlerTest { private static final String USER_AUTHORISATION = "Bearer token"; - private UploadWelshDocumentsSubmittedHandler handler; - - @Mock - private CcdService ccdService; @Mock private IdamService idamService; - @Mock private Callback callback; - @Mock private CaseDetails caseDetails; + @Mock + private UpdateCcdCaseService updateCcdCaseService; private SscsCaseData sscsCaseData; - @Before - public void setUp() { - MockitoAnnotations.openMocks(this); - handler = new UploadWelshDocumentsSubmittedHandler(ccdService, idamService); - when(callback.getEvent()).thenReturn(EventType.UPLOAD_WELSH_DOCUMENT); - sscsCaseData = SscsCaseData.builder().appeal(Appeal.builder().build()) - .sscsWelshPreviewNextEvent("sendToDwp") - .build(); - when(callback.getCaseDetails()).thenReturn(caseDetails); - when(caseDetails.getCaseData()).thenReturn(sscsCaseData); + @Captor + private ArgumentCaptor> consumerArgumentCaptor; + + @InjectMocks + private UploadWelshDocumentsSubmittedHandler handler; + + @BeforeEach + void setUp() { + handler = new UploadWelshDocumentsSubmittedHandler( + idamService, updateCcdCaseService); + sscsCaseData = SscsCaseData.builder().appeal(Appeal.builder().build()) + .sscsWelshPreviewNextEvent("sendToDwp") + .build(); } - @Test - @Parameters(method = "generateCanHandleScenarios") - public void givenCanHandleIsCalled_shouldReturnCorrectResult(CallbackType callbackType, - Callback callback, - boolean expectedResult) { + @ParameterizedTest + @MethodSource("generateCanHandleScenarios") + void givenCanHandleIsCalled_shouldReturnCorrectResult(CallbackType callbackType, + Callback callback, + boolean expectedResult) { boolean actualResult = handler.canHandle(callbackType, callback); assertEquals(expectedResult, actualResult); } @Test - public void shouldCallUpdateCaseWithCorrectEvent() { + void shouldCallUpdateCaseWithCorrectEvent() { + when(callback.getCaseDetails()).thenReturn(caseDetails); + when(caseDetails.getCaseData()).thenReturn(sscsCaseData); + SscsCaseData caseData = callback.getCaseDetails().getCaseData(); - IdamTokens idamTokens = IdamTokens.builder().build(); - when(idamService.getIdamTokens()).thenReturn(idamTokens); - when(ccdService.updateCase(caseData, callback.getCaseDetails().getId(), EventType.SEND_TO_DWP.getCcdType(), - "Upload welsh document", - "Upload welsh document", idamTokens)) - .thenReturn(SscsCaseDetails.builder().data(SscsCaseData.builder().build()).build()); handler.handle(SUBMITTED, callback, USER_AUTHORISATION); - verify(ccdService).updateCase(caseData, callback.getCaseDetails().getId(), EventType.SEND_TO_DWP.getCcdType(), - "Upload welsh document", "Upload welsh document", idamTokens); - verify(ccdService, never()).updateCase(caseData, callback.getCaseDetails().getId(), EventType.MAKE_CASE_URGENT.getCcdType(), - "Send a case to urgent hearing", OTHER_DOCUMENT_MANUAL.getLabel(), idamTokens); - assertNull(caseData.getSscsWelshPreviewNextEvent()); + verifyEventTrigger(EventType.SEND_TO_DWP, "Upload welsh document", "Upload welsh document", caseData); } @Test - public void shouldCallUpdateCaseWithUrgentCaseEvent() { + void shouldCallUpdateCaseWithUrgentCaseEvent() { + when(callback.getCaseDetails()).thenReturn(caseDetails); + when(caseDetails.getCaseData()).thenReturn(sscsCaseData); SscsCaseData caseData = buildDataWithUrgentRequestDocument(); - IdamTokens idamTokens = IdamTokens.builder().build(); - when(idamService.getIdamTokens()).thenReturn(idamTokens); - - when(ccdService.updateCase(caseData, callback.getCaseDetails().getId(), - EventType.MAKE_CASE_URGENT.getCcdType(), "Send a case to urgent hearing", - OTHER_DOCUMENT_MANUAL.getLabel(), idamTokens)) - .thenReturn(SscsCaseDetails.builder().data(SscsCaseData.builder().build()).build()); + when(updateCcdCaseService.updateCaseV2(anyLong(), anyString(), anyString(), anyString(), any(), any())) + .thenReturn(SscsCaseDetails.builder().data(caseData).build()); handler.handle(SUBMITTED, callback, USER_AUTHORISATION); - verify(ccdService).updateCase(caseData, callback.getCaseDetails().getId(), EventType.MAKE_CASE_URGENT.getCcdType(), - "Send a case to urgent hearing", OTHER_DOCUMENT_MANUAL.getLabel(), idamTokens); - assertNull(caseData.getSscsWelshPreviewNextEvent()); - + verifyEventTrigger(EventType.MAKE_CASE_URGENT, "Send a case to urgent hearing", OTHER_DOCUMENT_MANUAL.getLabel(), caseData); } @Test - public void shouldCallUpdateCaseWithUrgentCaseEventWhenWelshDocumentIsUrgentHaringRequest() { + void shouldCallUpdateCaseWithUrgentCaseEventWhenWelshDocumentIsUrgentHaringRequest() { + when(callback.getCaseDetails()).thenReturn(caseDetails); + when(caseDetails.getCaseData()).thenReturn(sscsCaseData); + SscsWelshDocument sscsWelshDocument = SscsWelshDocument.builder().value(SscsWelshDocumentDetails.builder().documentType(DocumentType.URGENT_HEARING_REQUEST.getValue()).build()).build(); List sscsWelshDocuments = new ArrayList<>(); sscsWelshDocuments.add(sscsWelshDocument); @@ -122,43 +117,31 @@ public void shouldCallUpdateCaseWithUrgentCaseEventWhenWelshDocumentIsUrgentHari caseData.setSscsWelshDocuments(sscsWelshDocuments); caseData.setSscsDocument(sscsDocuments); - IdamTokens idamTokens = IdamTokens.builder().build(); - when(idamService.getIdamTokens()).thenReturn(idamTokens); - - when(ccdService.updateCase(caseData, callback.getCaseDetails().getId(), - EventType.MAKE_CASE_URGENT.getCcdType(), "Send a case to urgent hearing", - OTHER_DOCUMENT_MANUAL.getLabel(), idamTokens)) - .thenReturn(SscsCaseDetails.builder().data(SscsCaseData.builder().build()).build()); + when(updateCcdCaseService.updateCaseV2(anyLong(), anyString(), anyString(), anyString(), any(), any())) + .thenReturn(SscsCaseDetails.builder().data(caseData).build()); handler.handle(SUBMITTED, callback, USER_AUTHORISATION); - verify(ccdService).updateCase(caseData, callback.getCaseDetails().getId(), EventType.MAKE_CASE_URGENT.getCcdType(), - "Send a case to urgent hearing", OTHER_DOCUMENT_MANUAL.getLabel(), idamTokens); - assertNull(caseData.getSscsWelshPreviewNextEvent()); + verifyEventTrigger(EventType.MAKE_CASE_URGENT, "Send a case to urgent hearing", OTHER_DOCUMENT_MANUAL.getLabel(), caseData); } @Test - public void shouldCallUpdateButNotCallUpdateUrgentCaseEventWhenUrgentCaseIsYes() { + void shouldCallUpdateButNotCallUpdateUrgentCaseEventWhenUrgentCaseIsYes() { + when(callback.getCaseDetails()).thenReturn(caseDetails); + when(caseDetails.getCaseData()).thenReturn(sscsCaseData); + SscsCaseData caseData = buildDataWithUrgentRequestDocument(); caseData.setUrgentCase("Yes"); - IdamTokens idamTokens = IdamTokens.builder().build(); - when(idamService.getIdamTokens()).thenReturn(idamTokens); - when(ccdService.updateCase(caseData, callback.getCaseDetails().getId(), EventType.SEND_TO_DWP.getCcdType(), - "Upload welsh document", - "Upload welsh document", idamTokens)) - .thenReturn(SscsCaseDetails.builder().data(SscsCaseData.builder().build()).build()); handler.handle(SUBMITTED, callback, USER_AUTHORISATION); - verify(ccdService).updateCase(caseData, callback.getCaseDetails().getId(), EventType.SEND_TO_DWP.getCcdType(), - "Upload welsh document", "Upload welsh document", idamTokens); - verify(ccdService, never()).updateCase(caseData, callback.getCaseDetails().getId(), EventType.MAKE_CASE_URGENT.getCcdType(), - "Send a case to urgent hearing", OTHER_DOCUMENT_MANUAL.getLabel(), idamTokens); - assertNull(caseData.getSscsWelshPreviewNextEvent()); + verifyEventTrigger(EventType.SEND_TO_DWP, "Upload welsh document", "Upload welsh document", caseData); } @Test - public void shouldSetReinstatementRequestWithWelshAndNonWelshReinstatementDocumentsWhenNonVoidOrDormant() { + void shouldSetReinstatementRequestWithWelshAndNonWelshReinstatementDocumentsWhenNonVoidOrDormant() { + when(callback.getCaseDetails()).thenReturn(caseDetails); + when(caseDetails.getCaseData()).thenReturn(sscsCaseData); SscsWelshDocument sscsWelshDocument = SscsWelshDocument.builder().value(SscsWelshDocumentDetails.builder().documentType(DocumentType.REINSTATEMENT_REQUEST.getValue()).build()).build(); @@ -176,18 +159,17 @@ public void shouldSetReinstatementRequestWithWelshAndNonWelshReinstatementDocume handler.handle(SUBMITTED, callback, USER_AUTHORISATION); - assertNull(caseData.getSscsWelshPreviewNextEvent()); + verifyEventTrigger(EventType.SEND_TO_DWP, "Upload Welsh Document", "Upload Welsh Document", caseData); assertEquals(RequestOutcome.IN_PROGRESS, caseData.getReinstatementOutcome()); assertEquals(InterlocReviewState.REVIEW_BY_JUDGE, caseData.getInterlocReviewState()); assertEquals(State.APPEAL_CREATED, caseData.getPreviousState()); } - @Test - @Parameters({ - "DORMANT_APPEAL_STATE", - "VOID_STATE", - }) - public void shouldSetReinstatementRequestWithWelshAndNonWelshReinstatementDocumentsWhenVoidOrDormant(State state) { + @ParameterizedTest + @EnumSource(value = State.class, names = {"DORMANT_APPEAL_STATE", "VOID_STATE"}) + void shouldSetReinstatementRequestWithWelshAndNonWelshReinstatementDocumentsWhenVoidOrDormant(State state) { + when(callback.getCaseDetails()).thenReturn(caseDetails); + when(caseDetails.getCaseData()).thenReturn(sscsCaseData); SscsWelshDocument sscsWelshDocument = SscsWelshDocument.builder().value(SscsWelshDocumentDetails.builder().documentType(DocumentType.REINSTATEMENT_REQUEST.getValue()).build()).build(); @@ -205,14 +187,16 @@ public void shouldSetReinstatementRequestWithWelshAndNonWelshReinstatementDocume handler.handle(SUBMITTED, callback, USER_AUTHORISATION); - assertNull(caseData.getSscsWelshPreviewNextEvent()); + verifyEventTrigger(EventType.SEND_TO_DWP, "Upload Welsh Document", "Upload Welsh Document", caseData); assertEquals(RequestOutcome.IN_PROGRESS, caseData.getReinstatementOutcome()); assertEquals(State.INTERLOCUTORY_REVIEW_STATE, caseData.getPreviousState()); assertEquals(InterlocReviewState.REVIEW_BY_JUDGE, caseData.getInterlocReviewState()); } @Test - public void shouldSetReinstatementRequestWithWelshButNoNonWelshReinstatementDocuments() { + void shouldSetReinstatementRequestWithWelshButNoNonWelshReinstatementDocuments() { + when(callback.getCaseDetails()).thenReturn(caseDetails); + when(caseDetails.getCaseData()).thenReturn(sscsCaseData); SscsWelshDocument sscsWelshDocument = SscsWelshDocument.builder().value(SscsWelshDocumentDetails.builder().documentType(DocumentType.REINSTATEMENT_REQUEST.getValue()).build()).build(); @@ -231,14 +215,16 @@ public void shouldSetReinstatementRequestWithWelshButNoNonWelshReinstatementDocu handler.handle(SUBMITTED, callback, USER_AUTHORISATION); - assertNull(caseData.getSscsWelshPreviewNextEvent()); + verifyEventTrigger(EventType.SEND_TO_DWP, "Upload Welsh Document", "Upload Welsh Document", caseData); assertEquals(RequestOutcome.IN_PROGRESS, caseData.getReinstatementOutcome()); assertEquals(InterlocReviewState.REVIEW_BY_JUDGE, caseData.getInterlocReviewState()); assertEquals(State.APPEAL_CREATED, caseData.getPreviousState()); } @Test - public void shouldSetReinstatementRequestWithNoWelshButNonWelshReinstatementDocuments() { + void shouldSetReinstatementRequestWithNoWelshButNonWelshReinstatementDocuments() { + when(callback.getCaseDetails()).thenReturn(caseDetails); + when(caseDetails.getCaseData()).thenReturn(sscsCaseData); SscsWelshDocument sscsWelshDocument = SscsWelshDocument.builder().value(SscsWelshDocumentDetails.builder().documentType(DocumentType.OTHER_DOCUMENT.getValue()).build()).build(); @@ -255,16 +241,20 @@ public void shouldSetReinstatementRequestWithNoWelshButNonWelshReinstatementDocu caseData.setPreviousState(State.APPEAL_CREATED); caseData.setState(State.INTERLOCUTORY_REVIEW_STATE); + + handler.handle(SUBMITTED, callback, USER_AUTHORISATION); - assertNull(caseData.getSscsWelshPreviewNextEvent()); + verifyEventTrigger(EventType.SEND_TO_DWP, "Upload Welsh Document", "Upload Welsh Document", caseData); assertEquals(RequestOutcome.IN_PROGRESS, caseData.getReinstatementOutcome()); assertEquals(InterlocReviewState.REVIEW_BY_JUDGE, caseData.getInterlocReviewState()); assertEquals(State.APPEAL_CREATED, caseData.getPreviousState()); } @Test - public void shouldNotSetReinstatementRequestWithNoWelshAndNoNonWelshReinstatementDocuments() { + void shouldNotSetReinstatementRequestWithNoWelshAndNoNonWelshReinstatementDocuments() { + when(callback.getCaseDetails()).thenReturn(caseDetails); + when(caseDetails.getCaseData()).thenReturn(sscsCaseData); SscsWelshDocument sscsWelshDocument = SscsWelshDocument.builder().value(SscsWelshDocumentDetails.builder().documentType(DocumentType.OTHER_DOCUMENT.getValue()).build()).build(); @@ -283,47 +273,89 @@ public void shouldNotSetReinstatementRequestWithNoWelshAndNoNonWelshReinstatemen handler.handle(SUBMITTED, callback, USER_AUTHORISATION); - assertNull(caseData.getSscsWelshPreviewNextEvent()); + verifyEventTrigger(EventType.SEND_TO_DWP, "Upload welsh document", "Upload welsh document", caseData); assertNull(caseData.getReinstatementOutcome()); assertNull(caseData.getInterlocReviewState()); assertEquals(State.APPEAL_CREATED, caseData.getPreviousState()); assertEquals(State.INTERLOCUTORY_REVIEW_STATE, caseData.getState()); } - private Object[] generateCanHandleScenarios() { - Callback callbackWithValidEventOption = buildCallback(EventType.SEND_TO_DWP.getCcdType()); - return new Object[]{new Object[]{SUBMITTED, buildCallback("sendToDwp"), true}, - new Object[]{ABOUT_TO_SUBMIT, buildCallback(EventType.SEND_TO_DWP.getCcdType()), false}, - new Object[]{SUBMITTED, buildCallbackInterlocReviewState(), false} - }; + @Test + void shouldUpdateCaseWhenNextEventIsNotEmpty() { + when(callback.getCaseDetails()).thenReturn(caseDetails); + when(caseDetails.getCaseData()).thenReturn(sscsCaseData); + sscsCaseData.setSscsWelshPreviewNextEvent("sendToDwp"); + + handler.handle(SUBMITTED, callback, USER_AUTHORISATION); + + verify(updateCcdCaseService).updateCaseV2(eq(callback.getCaseDetails().getId()), eq("sendToDwp"), + eq("Upload welsh document"), eq("Upload welsh document"), any(), any()); + } + + @Test + void shouldNotUpdateCaseWhenNextEventIsEmpty() { + when(callback.getCaseDetails()).thenReturn(caseDetails); + when(caseDetails.getCaseData()).thenReturn(sscsCaseData); + sscsCaseData.setSscsWelshPreviewNextEvent(""); + + handler.handle(SUBMITTED, callback, USER_AUTHORISATION); + + verify(updateCcdCaseService, never()).updateCaseV2(anyLong(), anyString(), anyString(), anyString(), any(), any()); + } + + @Test + void shouldNotUpdateCaseWhenNextEventIsNull() { + when(callback.getCaseDetails()).thenReturn(caseDetails); + when(caseDetails.getCaseData()).thenReturn(sscsCaseData); + sscsCaseData.setSscsWelshPreviewNextEvent(null); + + handler.handle(SUBMITTED, callback, USER_AUTHORISATION); + + verify(updateCcdCaseService, never()).updateCaseV2(anyLong(), anyString(), anyString(), anyString(), any(), any()); + } + + private void verifyEventTrigger(EventType makeCaseUrgent, String summary, String description, SscsCaseData caseData) { + verify(updateCcdCaseService).updateCaseV2(eq(callback.getCaseDetails().getId()), eq(makeCaseUrgent.getCcdType()), + eq(summary), eq(description), any(), consumerArgumentCaptor.capture()); + SscsCaseDetails sscsCaseDetails = SscsCaseDetails.builder().data(caseData).build(); + consumerArgumentCaptor.getValue().accept(sscsCaseDetails); + assertNull(caseData.getSscsWelshPreviewNextEvent()); + } + + private static Stream generateCanHandleScenarios() { + return Stream.of( + Arguments.of(SUBMITTED, buildCallback("sendToDwp"), true), + Arguments.of(ABOUT_TO_SUBMIT, buildCallback(EventType.SEND_TO_DWP.getCcdType()), false), + Arguments.of(SUBMITTED, buildCallbackInterlocReviewState(), false) + ); } - private Callback buildCallback(String sscsWelshPreviewNextEvent) { + private static Callback buildCallback(String sscsWelshPreviewNextEvent) { SscsCaseData sscsCaseData = SscsCaseData.builder() - .sscsWelshPreviewNextEvent(sscsWelshPreviewNextEvent) - .state(State.VALID_APPEAL) - .build(); + .sscsWelshPreviewNextEvent(sscsWelshPreviewNextEvent) + .state(State.VALID_APPEAL) + .build(); CaseDetails caseDetails = new CaseDetails<>(123L, "sscs", - State.VALID_APPEAL, sscsCaseData, LocalDateTime.now(), "Benefit"); + State.VALID_APPEAL, sscsCaseData, LocalDateTime.now(), "Benefit"); return new Callback<>(caseDetails, Optional.empty(), UPLOAD_WELSH_DOCUMENT, false); } - private Callback buildCallbackInterlocReviewState() { + private static Callback buildCallbackInterlocReviewState() { SscsCaseData sscsCaseData = SscsCaseData.builder() - .state(State.INTERLOCUTORY_REVIEW_STATE) - .build(); + .state(State.INTERLOCUTORY_REVIEW_STATE) + .build(); CaseDetails caseDetails = new CaseDetails<>(123L, "sscs", - State.INTERLOCUTORY_REVIEW_STATE, sscsCaseData, LocalDateTime.now(), "Benefit"); + State.INTERLOCUTORY_REVIEW_STATE, sscsCaseData, LocalDateTime.now(), "Benefit"); return new Callback<>(caseDetails, Optional.empty(), UPLOAD_WELSH_DOCUMENT, false); } private SscsCaseData buildDataWithUrgentRequestDocument() { SscsDocument sscsDocument = SscsDocument.builder().value( - SscsDocumentDetails - .builder() - .documentType(DocumentType.URGENT_HEARING_REQUEST.getValue()) - .documentDateAdded(LocalDateTime.now().toString()) - .build()) + SscsDocumentDetails + .builder() + .documentType(DocumentType.URGENT_HEARING_REQUEST.getValue()) + .documentDateAdded(LocalDateTime.now().toString()) + .build()) .build(); List sscsDocuments = new ArrayList<>(); sscsDocuments.add(sscsDocument);