Skip to content

Commit

Permalink
Introduced HearingDecision
Browse files Browse the repository at this point in the history
  • Loading branch information
apereverzin1 committed Feb 7, 2025
1 parent 7d4bba9 commit 1e5bf69
Show file tree
Hide file tree
Showing 5 changed files with 141 additions and 40 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,32 +2,24 @@

import static java.util.Objects.requireNonNull;

import static uk.gov.hmcts.reform.bailcaseapi.domain.entities.BailCaseFieldDefinition.CURRENT_HEARING_ID;
import static uk.gov.hmcts.reform.bailcaseapi.domain.entities.BailCaseFieldDefinition.HEARING_DECISION_LIST;
import static uk.gov.hmcts.reform.bailcaseapi.domain.entities.BailCaseFieldDefinition.HEARING_ID_LIST;
import static uk.gov.hmcts.reform.bailcaseapi.domain.entities.BailCaseFieldDefinition.IS_IMA_ENABLED;
import static uk.gov.hmcts.reform.bailcaseapi.domain.entities.ccd.field.YesOrNo.NO;
import static uk.gov.hmcts.reform.bailcaseapi.domain.entities.ccd.field.YesOrNo.YES;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import uk.gov.hmcts.reform.bailcaseapi.domain.entities.BailCase;
import uk.gov.hmcts.reform.bailcaseapi.domain.entities.HearingDecision;
import uk.gov.hmcts.reform.bailcaseapi.domain.entities.ccd.CaseDetails;
import uk.gov.hmcts.reform.bailcaseapi.domain.entities.ccd.Event;
import uk.gov.hmcts.reform.bailcaseapi.domain.entities.ccd.State;
import uk.gov.hmcts.reform.bailcaseapi.domain.entities.ccd.callback.Callback;
import uk.gov.hmcts.reform.bailcaseapi.domain.entities.ccd.callback.PreSubmitCallbackResponse;
import uk.gov.hmcts.reform.bailcaseapi.domain.entities.ccd.callback.PreSubmitCallbackStage;
import uk.gov.hmcts.reform.bailcaseapi.domain.entities.ccd.field.IdValue;
import uk.gov.hmcts.reform.bailcaseapi.domain.entities.ccd.field.YesOrNo;
import uk.gov.hmcts.reform.bailcaseapi.domain.handlers.PreSubmitCallbackStateHandler;
import uk.gov.hmcts.reform.bailcaseapi.domain.service.FeatureToggleService;
import uk.gov.hmcts.reform.bailcaseapi.domain.service.MakeNewApplicationService;

import java.util.List;
import java.util.Optional;

@Slf4j
@Component
public class MakeNewApplicationSubmitHandler implements PreSubmitCallbackStateHandler<BailCase> {
Expand All @@ -51,9 +43,11 @@ public boolean canHandle(PreSubmitCallbackStage callbackStage, Callback<BailCase
}

@Override
public PreSubmitCallbackResponse<BailCase> handle(PreSubmitCallbackStage callbackStage, Callback<BailCase> callback,
PreSubmitCallbackResponse<BailCase> callbackResponse) {

public PreSubmitCallbackResponse<BailCase> handle(
PreSubmitCallbackStage callbackStage,
Callback<BailCase> callback,
PreSubmitCallbackResponse<BailCase> callbackResponse
) {
requireNonNull(callbackResponse, "callback must not be null");

if (!canHandle(callbackStage, callback)) {
Expand All @@ -77,14 +71,7 @@ public PreSubmitCallbackResponse<BailCase> handle(PreSubmitCallbackStage callbac
YesOrNo isImaEnabled = featureToggleService.imaEnabled() ? YES : NO;
bailCase.write(IS_IMA_ENABLED, isImaEnabled);

Optional<String> currentHearingIdOpt = detailsBefore.read(CURRENT_HEARING_ID);
Optional<List<IdValue<String>>> hearingIdListOpt = detailsBefore.read(HEARING_ID_LIST);
Optional<List<IdValue<HearingDecision>>> hearingDecisionListOpt = detailsBefore.read(HEARING_DECISION_LIST);
currentHearingIdOpt.ifPresent(currentHearingId -> bailCase.write(CURRENT_HEARING_ID, currentHearingId));
hearingIdListOpt.ifPresent(hearingIdList -> bailCase.write(HEARING_ID_LIST, hearingIdList));
hearingDecisionListOpt.ifPresent(
hearingDecisionList -> bailCase.write(HEARING_DECISION_LIST, hearingDecisionList)
);
makeNewApplicationService.preserveHearingsData(bailCase, detailsBefore);

return new PreSubmitCallbackResponse<>(bailCase, State.APPLICATION_SUBMITTED);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@
public class HearingDecisionProcessor {
public void processHearingDecision(BailCase bailCase) {
Optional<String> decisionOpt = bailCase.read(DECISION_GRANTED_OR_REFUSED, String.class);
log.info("----------------decisionOpt: {}", decisionOpt);
String decision = decisionOpt.orElse("decided");
processHearingDecision(bailCase, decision);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,21 @@
import java.util.stream.Collectors;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import uk.gov.hmcts.reform.bailcaseapi.domain.UserDetailsHelper;
import uk.gov.hmcts.reform.bailcaseapi.domain.entities.BailCase;
import uk.gov.hmcts.reform.bailcaseapi.domain.entities.BailCaseFieldDefinition;
import uk.gov.hmcts.reform.bailcaseapi.domain.entities.DynamicList;
import uk.gov.hmcts.reform.bailcaseapi.domain.entities.HearingDecision;
import uk.gov.hmcts.reform.bailcaseapi.domain.entities.PriorApplication;
import uk.gov.hmcts.reform.bailcaseapi.domain.entities.UserDetails;
import uk.gov.hmcts.reform.bailcaseapi.domain.entities.UserRoleLabel;
import uk.gov.hmcts.reform.bailcaseapi.domain.entities.ccd.field.IdValue;

import static uk.gov.hmcts.reform.bailcaseapi.domain.entities.BailCaseFieldDefinition.CURRENT_HEARING_ID;
import static uk.gov.hmcts.reform.bailcaseapi.domain.entities.BailCaseFieldDefinition.HEARING_DECISION_LIST;
import static uk.gov.hmcts.reform.bailcaseapi.domain.entities.BailCaseFieldDefinition.HEARING_ID_LIST;

@Service
public class MakeNewApplicationService {
private final Appender<PriorApplication> appender;
Expand Down Expand Up @@ -68,6 +72,17 @@ public void clearFieldsAboutToSubmit(BailCase bailCase) {
clearUnrelatedFields(bailCase, VALID_ABOUT_TO_SUBMIT_MAKE_NEW_APPLICATION_FIELDS);
}

public void preserveHearingsData(BailCase bailCase, BailCase detailsBefore) {
Optional<String> currentHearingIdOpt = detailsBefore.read(CURRENT_HEARING_ID, String.class);
Optional<List<IdValue<String>>> hearingIdListOpt = detailsBefore.read(HEARING_ID_LIST);
Optional<List<IdValue<HearingDecision>>> hearingDecisionListOpt = detailsBefore.read(HEARING_DECISION_LIST);
currentHearingIdOpt.ifPresent(currentHearingId -> bailCase.write(CURRENT_HEARING_ID, currentHearingId));
hearingIdListOpt.ifPresent(hearingIdList -> bailCase.write(HEARING_ID_LIST, hearingIdList));
hearingDecisionListOpt.ifPresent(
hearingDecisionList -> bailCase.write(HEARING_DECISION_LIST, hearingDecisionList)
);
}

private void clearRoleDependentFields(BailCase bailCase) {
UserRoleLabel userRoleLabel = userDetailsHelper.getLoggedInUserRoleLabel(userDetails);

Expand Down Expand Up @@ -109,12 +124,14 @@ public BailCase getBailCaseFromString(String caseDataJson) {
if (caseDataJson == null || caseDataJson.isEmpty()) {
throw new IllegalArgumentException("CaseData (json) is missing");
}
BailCase bailCase = new BailCase();

BailCase bailCase;
try {
bailCase = mapper.readValue(caseDataJson, BailCase.class);
} catch (JsonProcessingException e) {
throw new IllegalArgumentException("Could not convert data", e);
}

return bailCase;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,30 +59,33 @@ public void setUp() {
}

@Test
void should_handle_make_new_application_about_to_submit() {

void should_handle_make_new_application_about_to_submit_and_do_not_preserve_hearing_data() {
// given
when(callback.getEvent()).thenReturn(Event.MAKE_NEW_APPLICATION);
when(callback.getCaseDetails()).thenReturn(caseDetails);
when(callback.getCaseDetailsBefore()).thenReturn(Optional.of(caseDetailsBefore));
when(caseDetails.getCaseData()).thenReturn(bailCase);
when(caseDetailsBefore.getCaseData()).thenReturn(bailCaseBefore);

// when
PreSubmitCallbackResponse<BailCase> response =
makeNewApplicationSubmitHandler.handle(ABOUT_TO_SUBMIT, callback, callbackResponse);

// then
assertThat(response).isNotNull();
assertThat(response.getData()).isNotEmpty();
assertThat(response.getData()).isEqualTo(bailCase);
assertThat(response.getErrors()).isEmpty();

verify(makeNewApplicationService, times(1)).clearFieldsAboutToSubmit(bailCase);
verify(makeNewApplicationService, times(1)).appendPriorApplication(bailCase, bailCaseBefore);
verify(makeNewApplicationService).clearFieldsAboutToSubmit(bailCase);
verify(makeNewApplicationService).appendPriorApplication(bailCase, bailCaseBefore);
verify(makeNewApplicationService).preserveHearingsData(bailCase, bailCaseBefore);
when(featureToggleService.imaEnabled()).thenReturn(false);
verify(bailCase).write(IS_IMA_ENABLED, YesOrNo.NO);
}

@Test
void it_can_handle_callback() {

for (Event event : Event.values()) {

when(callback.getEvent()).thenReturn(event);
Expand All @@ -100,12 +103,14 @@ void it_can_handle_callback() {

@Test
void should_throw_when_case_details_before_is_not_present() {

// given
when(callback.getEvent()).thenReturn(Event.MAKE_NEW_APPLICATION);
when(callback.getCaseDetails()).thenReturn(caseDetails);
when(caseDetails.getCaseData()).thenReturn(bailCase);
when(callback.getCaseDetailsBefore()).thenReturn(Optional.empty());

// when
// then
assertThatThrownBy(() ->
makeNewApplicationSubmitHandler.handle(PreSubmitCallbackStage.ABOUT_TO_SUBMIT, callback, callbackResponse))
.hasMessage("Case details before missing")
Expand All @@ -115,20 +120,23 @@ void should_throw_when_case_details_before_is_not_present() {
@ParameterizedTest
@CsvSource({"true", "false"})
void should_set_ima_field(boolean featureFlag) {
// given
when(featureToggleService.imaEnabled()).thenReturn(featureFlag);
when(callback.getEvent()).thenReturn(Event.MAKE_NEW_APPLICATION);
when(callback.getCaseDetails()).thenReturn(caseDetails);
when(callback.getCaseDetailsBefore()).thenReturn(Optional.of(caseDetailsBefore));
when(caseDetails.getCaseData()).thenReturn(bailCase);
when(caseDetailsBefore.getCaseData()).thenReturn(bailCaseBefore);

// when
makeNewApplicationSubmitHandler.handle(PreSubmitCallbackStage.ABOUT_TO_SUBMIT, callback, callbackResponse);

// then
verify(bailCase, times(1)).write(IS_IMA_ENABLED, featureFlag ? YesOrNo.YES : YesOrNo.NO);
}

@Test
void should_not_allow_null_arguments() {

assertThatThrownBy(() -> makeNewApplicationSubmitHandler
.canHandle(null, callback))
.hasMessage("callbackStage must not be null")
Expand All @@ -152,12 +160,15 @@ void should_not_allow_null_arguments() {

@Test
void handler_throws_error_if_cannot_actually_handle() {

// given
assertThatThrownBy(() -> makeNewApplicationSubmitHandler.handle(ABOUT_TO_SUBMIT, callback, callbackResponse))
.hasMessage("Cannot handle callback")
.isExactlyInstanceOf(IllegalStateException.class);

when(callback.getEvent()).thenReturn(Event.MAKE_NEW_APPLICATION);

// when
// then
assertThatThrownBy(() -> makeNewApplicationSubmitHandler.handle(ABOUT_TO_SUBMIT, callback, callbackResponse))
.isExactlyInstanceOf(NullPointerException.class);

Expand Down
Loading

0 comments on commit 1e5bf69

Please sign in to comment.