Skip to content

Commit

Permalink
CIV-16533 Raise query state behaviours (#6140)
Browse files Browse the repository at this point in the history
* Updated Querymanagemant handler and utils
* Updated qm unsupported role error log
* CIV-16533 Raise query state behaviours
---------

Co-authored-by: GarethLancaster <31533575+Gareth40342@users.noreply.github.com>
Co-authored-by: Gareth Lancaster <90632240+Gareth40343@users.noreply.github.com>
Co-authored-by: Harry H <33700332+HarryH96@users.noreply.github.com>
  • Loading branch information
4 people authored Feb 19, 2025
1 parent b63a5c6 commit 2425c7c
Show file tree
Hide file tree
Showing 2 changed files with 102 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,14 @@
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.CaseState;
import uk.gov.hmcts.reform.civil.model.CaseData;
import uk.gov.hmcts.reform.civil.model.querymanagement.CaseMessage;
import uk.gov.hmcts.reform.civil.service.CoreCaseUserService;
import uk.gov.hmcts.reform.civil.service.UserService;
import uk.gov.hmcts.reform.idam.client.models.UserInfo;

import java.util.Arrays;
import java.util.List;
import java.util.Map;

Expand All @@ -23,7 +25,11 @@
import static uk.gov.hmcts.reform.civil.callback.CallbackType.ABOUT_TO_SUBMIT;
import static uk.gov.hmcts.reform.civil.callback.CallbackType.SUBMITTED;
import static uk.gov.hmcts.reform.civil.callback.CaseEvent.queryManagementRaiseQuery;
import static uk.gov.hmcts.reform.civil.enums.CaseState.CLOSED;
import static uk.gov.hmcts.reform.civil.utils.CaseQueriesUtil.buildLatestQuery;
import static uk.gov.hmcts.reform.civil.enums.CaseState.CASE_DISMISSED;
import static uk.gov.hmcts.reform.civil.enums.CaseState.PENDING_CASE_ISSUED;
import static uk.gov.hmcts.reform.civil.enums.CaseState.PROCEEDS_IN_HERITAGE_SYSTEM;
import static uk.gov.hmcts.reform.civil.utils.CaseQueriesUtil.getUserQueriesByRole;

@Service
Expand All @@ -36,10 +42,12 @@ public class RaiseQueryCallbackHandler extends CallbackHandler {
protected final UserService userService;
protected final CoreCaseUserService coreCaseUserService;

public static final String INVALID_CASE_STATE_ERROR = "If your case is offline, you cannot raise a query.";

@Override
protected Map<String, Callback> callbacks() {
return Map.of(
callbackKey(ABOUT_TO_START), this::emptyCallbackResponse,
callbackKey(ABOUT_TO_START), this::checkCaseState,
callbackKey(ABOUT_TO_SUBMIT), this::setManagementQuery,
callbackKey(SUBMITTED), this::emptySubmittedCallbackResponse
);
Expand All @@ -50,6 +58,18 @@ public List<CaseEvent> handledEvents() {
return EVENTS;
}

private CallbackResponse checkCaseState(CallbackParams callbackParams) {
List<CaseState> invalidStates = Arrays.asList(PENDING_CASE_ISSUED, CASE_DISMISSED,
PROCEEDS_IN_HERITAGE_SYSTEM, CLOSED);
if (invalidStates.contains(callbackParams.getCaseData().getCcdState())) {
List<String> errors = List.of(INVALID_CASE_STATE_ERROR);

return AboutToStartOrSubmitCallbackResponse.builder()
.errors(errors).build();
}
return emptyCallbackResponse(callbackParams);
}

private CallbackResponse setManagementQuery(CallbackParams callbackParams) {
CaseData caseData = callbackParams.getCaseData();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import org.mockito.junit.jupiter.MockitoExtension;
import uk.gov.hmcts.reform.ccd.client.model.AboutToStartOrSubmitCallbackResponse;
import uk.gov.hmcts.reform.civil.callback.CallbackParams;
import uk.gov.hmcts.reform.civil.enums.CaseState;
import uk.gov.hmcts.reform.civil.handler.callback.BaseCallbackHandlerTest;
import uk.gov.hmcts.reform.civil.model.CaseData;
import uk.gov.hmcts.reform.civil.model.common.Element;
Expand All @@ -27,13 +28,15 @@
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.when;
import static uk.gov.hmcts.reform.civil.callback.CallbackType.ABOUT_TO_START;
import static uk.gov.hmcts.reform.civil.callback.CallbackType.ABOUT_TO_SUBMIT;
import static uk.gov.hmcts.reform.civil.callback.CaseEvent.queryManagementRaiseQuery;
import static uk.gov.hmcts.reform.civil.enums.CaseRole.APPLICANTSOLICITORONE;
import static uk.gov.hmcts.reform.civil.enums.CaseRole.RESPONDENTSOLICITORONE;
import static uk.gov.hmcts.reform.civil.enums.CaseRole.RESPONDENTSOLICITORTWO;
import static uk.gov.hmcts.reform.civil.enums.YesOrNo.NO;
import static uk.gov.hmcts.reform.civil.enums.YesOrNo.YES;
import static uk.gov.hmcts.reform.civil.handler.callback.user.RaiseQueryCallbackHandler.INVALID_CASE_STATE_ERROR;

@ExtendWith(MockitoExtension.class)
class RaiseQueryCallbackHandlerTest extends BaseCallbackHandlerTest {
Expand Down Expand Up @@ -62,6 +65,84 @@ public void handleEventsReturnsTheExpectedCallbackEvents() {
@Nested
class AboutToStartCallback {

@Test
public void shouldNotReturnError_whenClaimIssued() {
CaseData caseData = CaseData.builder()
.ccdCaseReference(CASE_ID)
.ccdState(CaseState.CASE_ISSUED)
.build();

CallbackParams params = callbackParamsOf(caseData, ABOUT_TO_START);

var response = (AboutToStartOrSubmitCallbackResponse) handler.handle(params);

assertThat(response.getErrors()).isNull();
}

@Test
public void shouldReturnError_whenClaimPendingIssued() {
CaseData caseData = CaseData.builder()
.ccdCaseReference(CASE_ID)
.ccdState(CaseState.PENDING_CASE_ISSUED)
.build();

CallbackParams params = callbackParamsOf(caseData, ABOUT_TO_START);

var response = (AboutToStartOrSubmitCallbackResponse) handler.handle(params);

assertThat(response.getErrors()).isNotNull();
assertThat(response.getErrors()).containsOnly(INVALID_CASE_STATE_ERROR);
}

@Test
public void shouldReturnError_whenCaseDismissedState() {
CaseData caseData = CaseData.builder()
.ccdCaseReference(CASE_ID)
.ccdState(CaseState.CASE_DISMISSED)
.build();

CallbackParams params = callbackParamsOf(caseData, ABOUT_TO_START);

var response = (AboutToStartOrSubmitCallbackResponse) handler.handle(params);

assertThat(response.getErrors()).isNotNull();
assertThat(response.getErrors()).containsOnly(INVALID_CASE_STATE_ERROR);
}

@Test
public void shouldReturnError_whenCaseOffline() {
CaseData caseData = CaseData.builder()
.ccdCaseReference(CASE_ID)
.ccdState(CaseState.PROCEEDS_IN_HERITAGE_SYSTEM)
.build();

CallbackParams params = callbackParamsOf(caseData, ABOUT_TO_START);

var response = (AboutToStartOrSubmitCallbackResponse) handler.handle(params);

assertThat(response.getErrors()).isNotNull();
assertThat(response.getErrors()).containsOnly(INVALID_CASE_STATE_ERROR);
}

@Test
public void shouldReturnError_whenCaseClosed() {
CaseData caseData = CaseData.builder()
.ccdCaseReference(CASE_ID)
.ccdState(CaseState.CLOSED)
.build();

CallbackParams params = callbackParamsOf(caseData, ABOUT_TO_START);

var response = (AboutToStartOrSubmitCallbackResponse) handler.handle(params);

assertThat(response.getErrors()).isNotNull();
assertThat(response.getErrors()).containsOnly(INVALID_CASE_STATE_ERROR);
}
}

@Nested
class AboutToSubmitCallback {

@BeforeEach
void setupTest() {
objectMapper.registerModule(new JavaTimeModule());
Expand Down

0 comments on commit 2425c7c

Please sign in to comment.