Skip to content
Open
Show file tree
Hide file tree
Changes from 7 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions ccd-definition/Categories.json
Original file line number Diff line number Diff line change
Expand Up @@ -183,6 +183,14 @@
"ParentCategoryID": "orders",
"DisplayOrder": "803"
},
{
"LiveFrom": "01/01/2017",
"CaseTypeID": "CARE_SUPERVISION_EPO",
"CategoryID": "refusedOrder",
"CategoryLabel": "Refused Order",
"ParentCategoryID": "orders",
"DisplayOrder": "809"
},
{
"LiveFrom": "01/01/2017",
"CaseTypeID": "CARE_SUPERVISION_EPO",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,15 @@
"SecurityClassification": "Public",
"CategoryID": "orders"
},
{
"LiveFrom": "01/01/2017",
"ID": "UploadedCaseManagementOrder",
"ListElementCode": "refusedOrder",
"FieldType": "Document",
"ElementLabel": "Order",
"SecurityClassification": "Public",
"CategoryID": "refusedOrder"
},
{
"LiveFrom": "01/01/2017",
"ID": "UploadedCaseManagementOrder",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@
import static uk.gov.hmcts.reform.fpl.enums.HearingType.ISSUE_RESOLUTION;
import static uk.gov.hmcts.reform.fpl.enums.JudgeOrMagistrateTitle.HER_HONOUR_JUDGE;
import static uk.gov.hmcts.reform.fpl.enums.State.FINAL_HEARING;
import static uk.gov.hmcts.reform.fpl.service.document.ManageDocumentService.DOCUMENT_ACKNOWLEDGEMENT_KEY;
import static uk.gov.hmcts.reform.fpl.utils.ElementUtils.element;
import static uk.gov.hmcts.reform.fpl.utils.ElementUtils.unwrapElements;
import static uk.gov.hmcts.reform.fpl.utils.ElementUtils.wrapElements;
Expand Down Expand Up @@ -114,7 +115,8 @@ void shouldRemoveCMOFromDraftCMOsAndRequestedChangesWhenJudgeRejectsOrder() {
assertThat(responseData.getReviewCMODecision()).isEqualTo(reviewDecision);
assertThat(responseData.getOrdersToBeSent()).containsOnly(
element(cmoElement.getId(),
cmo.toBuilder().status(RETURNED).requestedChanges("Please change XYZ").build())
cmo.toBuilder().status(RETURNED).requestedChanges("Please change XYZ")
.refusedOrder(cmo.getOrder()).order(null).build())
);
}

Expand Down Expand Up @@ -319,7 +321,10 @@ void shouldRemoveRejectedBlankOrderAndSealApprovedOrderWhenJudgeRejectsOneOrderA
.build();

HearingOrder expectedRejectedOrder = draftOrder.toBuilder()
.status(RETURNED).requestedChanges("missing data").build();
.status(RETURNED).requestedChanges("missing data")
.refusedOrder(draftOrder.getOrder()).order(null)
.documentAcknowledge(List.of(DOCUMENT_ACKNOWLEDGEMENT_KEY))
.build();

CaseData responseData = extractCaseData(postAboutToSubmitEvent(caseData));

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 +3,28 @@
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
import org.springframework.boot.test.autoconfigure.OverrideAutoConfiguration;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import uk.gov.hmcts.reform.ccd.client.model.CaseDetails;
import uk.gov.hmcts.reform.fpl.controllers.AbstractCallbackTest;
import uk.gov.hmcts.reform.fpl.model.CaseData;
import uk.gov.hmcts.reform.fpl.model.common.DocumentReference;
import uk.gov.hmcts.reform.fpl.model.common.Element;
import uk.gov.hmcts.reform.fpl.model.noc.ChangeOfRepresentation;
import uk.gov.hmcts.reform.fpl.model.order.HearingOrder;

import java.util.List;
import java.util.Map;
import java.util.NoSuchElementException;
import java.util.UUID;

import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static uk.gov.hmcts.reform.fpl.controllers.support.MigrateCaseController.MIGRATION_ID_KEY;
import static uk.gov.hmcts.reform.fpl.utils.ElementUtils.element;
import static uk.gov.hmcts.reform.fpl.utils.TestDataHelper.testDocumentReference;

@WebMvcTest(MigrateCaseController.class)
@OverrideAutoConfiguration(enabled = true)
Expand Down Expand Up @@ -80,4 +87,62 @@ void shouldRedactStrings() {
}

}

@Nested
class Dfpl2773 {
private static final String MIGRATION_ID = "DFPL-2773";
private static final DocumentReference ORDER_DOCUMENT = testDocumentReference();
private static final UUID HEARING_ORDER_ID = UUID.randomUUID();

@Test
void shouldMigrateRefusedOrder() {
CaseData after = extractCaseData(postAboutToSubmitEvent(CaseDetails.builder()
.data(Map.of("refusedHearingOrders",
List.of(element(HEARING_ORDER_ID, HearingOrder.builder().order(ORDER_DOCUMENT).build())),
MIGRATION_ID_KEY, MIGRATION_ID))
.build()));

assertThat(after.getRefusedHearingOrders())
.isEqualTo(List.of(element(HEARING_ORDER_ID,
HearingOrder.builder().refusedOrder(ORDER_DOCUMENT)
.documentAcknowledge(List.of("ACK_RELATED_TO_CASE")).build())));
}

@ParameterizedTest
@ValueSource(strings = {
"CTSC", "LA", "Resp0", "Child0", "Resp1", "Child1", "Resp2", "Child2", "Resp3", "Child3", "Resp4", "Child4",
"Resp5", "Child5", "Resp6", "Child6", "Resp7", "Child7", "Resp8", "Child8", "Resp9", "Child9",
"Child10", "Child11", "Child12", "Child13", "Child14"
})
void shouldMigrateConfidentialRefusedOrder(String suffix) {
CaseData after = extractCaseData(postAboutToSubmitEvent(CaseDetails.builder()
.data(Map.of("refusedHearingOrders" + suffix,
List.of(element(HEARING_ORDER_ID, HearingOrder.builder().order(ORDER_DOCUMENT).build())),
MIGRATION_ID_KEY, MIGRATION_ID))
.build()));

after.getConfidentialRefusedOrders().processAllConfidentialOrders((suffixAfter, orders) -> {
if (suffixAfter.equals(suffix)) {
assertThat(orders).isEqualTo(List.of(element(HEARING_ORDER_ID,
HearingOrder.builder().refusedOrder(ORDER_DOCUMENT)
.documentAcknowledge(List.of("ACK_RELATED_TO_CASE")).build())));
} else {
assertThat(orders).isNull();
}
});
}

@Test
void shouldNotMigrateIfEmptyOrNull() {
CaseData after = extractCaseData(postAboutToSubmitEvent(CaseDetails.builder()
.data(Map.of(MIGRATION_ID_KEY, MIGRATION_ID))
.build()));

assertThat(after.getRefusedHearingOrders()).isNull();

after.getConfidentialRefusedOrders().processAllConfidentialOrders((suffixAfter, orders) -> {
assertThat(orders).isNull();
});
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,10 @@
import uk.gov.hmcts.reform.fpl.controllers.CallbackController;
import uk.gov.hmcts.reform.fpl.enums.YesNo;
import uk.gov.hmcts.reform.fpl.model.CaseData;
import uk.gov.hmcts.reform.fpl.model.ConfidentialRefusedOrders;
import uk.gov.hmcts.reform.fpl.model.common.Element;
import uk.gov.hmcts.reform.fpl.model.noc.ChangeOfRepresentation;
import uk.gov.hmcts.reform.fpl.model.order.HearingOrder;
import uk.gov.hmcts.reform.fpl.service.CaseConverter;
import uk.gov.hmcts.reform.fpl.service.JudicialService;
import uk.gov.hmcts.reform.fpl.service.MigrateCaseService;
Expand All @@ -28,6 +30,9 @@
import java.util.UUID;
import java.util.function.Consumer;

import static org.apache.commons.lang3.ObjectUtils.isNotEmpty;
import static uk.gov.hmcts.reform.fpl.utils.ElementUtils.element;

@Slf4j
@RestController
@RequestMapping("/callback/migrate-case")
Expand All @@ -46,7 +51,8 @@ public class MigrateCaseController extends CallbackController {
"DFPL-2740", this::run2740,
"DFPL-2744", this::run2744,
"DFPL-2739", this::run2739,
"DFPL-2756", this::run2756
"DFPL-2756", this::run2756,
"DFPL-2773", this::run2773
);
private final CaseConverter caseConverter;
private final JudicialService judicialService;
Expand Down Expand Up @@ -151,4 +157,36 @@ private void run2739(CaseDetails caseDetails) {
UUID.fromString("3ef67b37-17ee-48ca-9d32-58c887a6918d"),
UUID.fromString("dbe742bb-f7a1-4373-8100-52261c81ef34")));
}

private void run2773(CaseDetails caseDetails) {
CaseData caseData = getCaseData(caseDetails);

if (isNotEmpty(caseData.getRefusedHearingOrders())) {
caseDetails.getData().put("refusedHearingOrders", migrateRefusedOrders(caseData.getRefusedHearingOrders()));
}

// Process all confidential refused orders
ConfidentialRefusedOrders existingConfidentialRefusedOrders = caseData.getConfidentialRefusedOrders();
if (existingConfidentialRefusedOrders != null) {
existingConfidentialRefusedOrders.processAllConfidentialOrders((suffix, refusedOrderElements) -> {
if (isNotEmpty(refusedOrderElements)) {
caseDetails.getData().put(
existingConfidentialRefusedOrders.getFieldBaseName() + suffix,
migrateRefusedOrders(refusedOrderElements));
}
});
}
}

// one off migration only, can't any reason to keep this method in the future
private List<Element<HearingOrder>> migrateRefusedOrders(List<Element<HearingOrder>> refusedOrders) {
return refusedOrders.stream()
.map(refusedOrderElement -> element(
refusedOrderElement.getId(),
refusedOrderElement.getValue().toBuilder()
.refusedOrder(refusedOrderElement.getValue().getOrder())
.order(null)
.build()))
.toList();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ public class HearingOrder implements RemovableOrder, AmendableOrder, Translatabl
private DocumentReference orderConfidential;
private DocumentReference translatedOrder;
private DocumentReference lastUploadedOrder;
private DocumentReference refusedOrder;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

guess this is so it doesn't freak out when trying to deserialise

private String hearing;
// Case management order, 21 June 2020
private UUID hearingId;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,8 @@ public Element<HearingOrder> buildSealedHearingOrder(ReviewDecision reviewDecisi
public Element<HearingOrder> buildRejectedHearingOrder(
Element<HearingOrder> hearingOrderElement, String changesRequested) {
return element(hearingOrderElement.getId(), hearingOrderElement.getValue().toBuilder()
.refusedOrder(hearingOrderElement.getValue().getOrder())
.order(null)
.status(CMOStatus.RETURNED)
.requestedChanges(changesRequested)
.build());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,7 @@ void shouldBuildRejectedHearingOrderWhenJudgeRequestsChanges() {
element(ORDER_ID, hearingOrder), changesRequested);

assertThat(actual).isEqualTo(element(ORDER_ID, hearingOrder.toBuilder()
.status(CMOStatus.RETURNED).requestedChanges(changesRequested).build()));
.status(CMOStatus.RETURNED).requestedChanges(changesRequested)
.refusedOrder(hearingOrder.getOrder()).order(null).build()));
}
}