diff --git a/ccd-definition/AuthorisationCaseField/court-admin.json b/ccd-definition/AuthorisationCaseField/court-admin.json index 2b27d9237e8..4221ae181d9 100644 --- a/ccd-definition/AuthorisationCaseField/court-admin.json +++ b/ccd-definition/AuthorisationCaseField/court-admin.json @@ -363,6 +363,13 @@ "UserRole": "caseworker-publiclaw-courtadmin", "CRUD": "CRUD" }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "orderFurtherDirections", + "UserRole": "caseworker-publiclaw-courtadmin", + "CRUD": "CRUD" + }, { "LiveFrom": "01/01/2017", "CaseTypeID": "CARE_SUPERVISION_EPO", diff --git a/ccd-definition/AuthorisationCaseField/judiciary.json b/ccd-definition/AuthorisationCaseField/judiciary.json index 0195c4b7a86..e2d9066803f 100644 --- a/ccd-definition/AuthorisationCaseField/judiciary.json +++ b/ccd-definition/AuthorisationCaseField/judiciary.json @@ -243,5 +243,12 @@ "CaseFieldID": "cmoEventId", "UserRole": "caseworker-publiclaw-judiciary", "CRUD": "CRU" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseFieldID": "orderFurtherDirections", + "UserRole": "caseworker-publiclaw-judiciary", + "CRUD": "CRUD" } ] diff --git a/ccd-definition/CaseEventToFields/createOrder-PREPARE_FOR_HEARING.json b/ccd-definition/CaseEventToFields/createOrder-PREPARE_FOR_HEARING.json index dc283ddc408..7db4062364e 100644 --- a/ccd-definition/CaseEventToFields/createOrder-PREPARE_FOR_HEARING.json +++ b/ccd-definition/CaseEventToFields/createOrder-PREPARE_FOR_HEARING.json @@ -39,5 +39,20 @@ "PageColumnNumber": 1, "ShowSummaryChangeOption": "Y", "CallBackURLMidEvent": "${CCD_DEF_CASE_SERVICE_BASE_URL}/callback/create-order/mid-event" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseEventID": "createOrder-PREPARE_FOR_HEARING", + "CaseFieldID": "orderFurtherDirections", + "PageFieldDisplayOrder": 1, + "DisplayContext": "OPTIONAL", + "PageID": "FurtherDirections", + "PageLabel": " ", + "PageDisplayOrder": 4, + "PageColumnNumber": 1, + "ShowSummaryChangeOption": "Y", + "PageShowCondition": "orderTypeAndDocument.type!=\"BLANK_ORDER\"", + "CallBackURLMidEvent": "${CCD_DEF_CASE_SERVICE_BASE_URL}/callback/create-order/mid-event" } ] diff --git a/ccd-definition/CaseEventToFields/createOrder.json b/ccd-definition/CaseEventToFields/createOrder.json index 5a92d0ee15e..2680db90fbf 100644 --- a/ccd-definition/CaseEventToFields/createOrder.json +++ b/ccd-definition/CaseEventToFields/createOrder.json @@ -39,5 +39,20 @@ "PageColumnNumber": 1, "ShowSummaryChangeOption": "Y", "CallBackURLMidEvent": "${CCD_DEF_CASE_SERVICE_BASE_URL}/callback/create-order/mid-event" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseEventID": "createOrder", + "CaseFieldID": "orderFurtherDirections", + "PageFieldDisplayOrder": 1, + "DisplayContext": "MANDATORY", + "PageID": "FurtherDirections", + "PageLabel": " ", + "PageDisplayOrder": 4, + "PageColumnNumber": 1, + "ShowSummaryChangeOption": "Y", + "PageShowCondition": "orderTypeAndDocument.type!=\"BLANK_ORDER\"", + "CallBackURLMidEvent": "${CCD_DEF_CASE_SERVICE_BASE_URL}/callback/create-order/mid-event" } ] diff --git a/ccd-definition/CaseEventToFields/createOrderGatekeeping.json b/ccd-definition/CaseEventToFields/createOrderGatekeeping.json index 036d7d50e6b..599f16e27f6 100644 --- a/ccd-definition/CaseEventToFields/createOrderGatekeeping.json +++ b/ccd-definition/CaseEventToFields/createOrderGatekeeping.json @@ -39,5 +39,20 @@ "PageColumnNumber": 1, "ShowSummaryChangeOption": "Y", "CallBackURLMidEvent": "${CCD_DEF_CASE_SERVICE_BASE_URL}/callback/create-order/mid-event" + }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "CaseEventID": "createOrderGatekeeping", + "CaseFieldID": "orderFurtherDirections", + "PageFieldDisplayOrder": 1, + "DisplayContext": "OPTIONAL", + "PageID": "FurtherDirections", + "PageLabel": " ", + "PageDisplayOrder": 4, + "PageColumnNumber": 1, + "ShowSummaryChangeOption": "Y", + "PageShowCondition": "orderTypeAndDocument.type!=\"BLANK_ORDER\"", + "CallBackURLMidEvent": "${CCD_DEF_CASE_SERVICE_BASE_URL}/callback/create-order/mid-event" } ] diff --git a/ccd-definition/CaseField.json b/ccd-definition/CaseField.json index 2c1730ec435..dd33e53d221 100644 --- a/ccd-definition/CaseField.json +++ b/ccd-definition/CaseField.json @@ -639,6 +639,14 @@ "FieldType": "OrderTypeAndDocument", "SecurityClassification": "Public" }, + { + "LiveFrom": "01/01/2017", + "CaseTypeID": "CARE_SUPERVISION_EPO", + "ID": "orderFurtherDirections", + "Label": "Further directions", + "FieldType": "FurtherDirections", + "SecurityClassification": "Public" + }, { "LiveFrom": "01/01/2017", "CaseTypeID": "CARE_SUPERVISION_EPO", diff --git a/ccd-definition/ComplexTypes/1_furtherDirections.json b/ccd-definition/ComplexTypes/1_furtherDirections.json new file mode 100644 index 00000000000..b17edc10e5b --- /dev/null +++ b/ccd-definition/ComplexTypes/1_furtherDirections.json @@ -0,0 +1,19 @@ +[ + { + "LiveFrom": "01/01/2017", + "ID": "FurtherDirections", + "ListElementCode": "directionsNeeded", + "FieldType": "YesOrNo", + "ElementLabel": "Do you want to add further directions to the order?", + "SecurityClassification": "Public" + }, + { + "LiveFrom": "01/01/2017", + "ID": "FurtherDirections", + "ListElementCode": "directions", + "FieldType": "TextArea", + "ElementLabel": "Give details", + "SecurityClassification": "Public", + "FieldShowCondition": "directionsNeeded = \"Yes\"" + } +] diff --git a/ccd-definition/ComplexTypes/GeneratedOrder.json b/ccd-definition/ComplexTypes/GeneratedOrder.json index 0b0b96916e0..7d4c8b1356c 100644 --- a/ccd-definition/ComplexTypes/GeneratedOrder.json +++ b/ccd-definition/ComplexTypes/GeneratedOrder.json @@ -52,5 +52,13 @@ "FieldType": "JudgeAndLegalAdvisor", "ElementLabel": "Judge and legal advisor", "SecurityClassification": "Public" + }, + { + "LiveFrom": "01/01/2017", + "ID": "GeneratedOrder", + "ListElementCode": "furtherDirections", + "FieldType": "FurtherDirections", + "ElementLabel": "Directions", + "SecurityClassification": "Public" } ] diff --git a/docker/docmosis/templates/FL-PLW-GOR-ENG-00218.docx b/docker/docmosis/templates/FL-PLW-GOR-ENG-00218.docx index edc77771762..2fe1b3e7e43 100644 Binary files a/docker/docmosis/templates/FL-PLW-GOR-ENG-00218.docx and b/docker/docmosis/templates/FL-PLW-GOR-ENG-00218.docx differ diff --git a/e2e/pages/events/createOrderEvent.page.js b/e2e/pages/events/createOrderEvent.page.js index 601c28fd89f..32597c13993 100644 --- a/e2e/pages/events/createOrderEvent.page.js +++ b/e2e/pages/events/createOrderEvent.page.js @@ -7,6 +7,11 @@ module.exports = { title: '#order_title', details: '#order_details', orderTypeList: '#orderTypeAndDocument_type', + directionsNeeded: { + yes: '#orderFurtherDirections_directionsNeeded-Yes', + no: '#orderFurtherDirections_directionsNeeded-No', + }, + directions: '#orderFurtherDirections_directions', }, selectType(type) { @@ -25,4 +30,9 @@ module.exports = { judgeAndLegalAdvisor.enterJudgeLastName(judgeLastName); judgeAndLegalAdvisor.enterLegalAdvisorName(legalAdvisorName); }, + + enterDirections(directions) { + I.click(this.fields.directionsNeeded.yes); + I.fillField(this.fields.directions, directions); + }, }; diff --git a/e2e/tests/hmctsAdministersCaseAfterSubmission_test.js b/e2e/tests/hmctsAdministersCaseAfterSubmission_test.js index 0ccb521c67f..59dff73170c 100644 --- a/e2e/tests/hmctsAdministersCaseAfterSubmission_test.js +++ b/e2e/tests/hmctsAdministersCaseAfterSubmission_test.js @@ -161,8 +161,11 @@ Scenario('HMCTS admin creates multiple orders for the case', async (I, caseViewP await createOrderEventPage.selectType(orders[1].type); await I.retryUntilExists(() => I.click('Continue'), '#judgeAndLegalAdvisor_judgeTitle'); await createOrderEventPage.enterJudgeAndLegalAdvisor(orders[1].judgeAndLegalAdvisor.judgeLastName, orders[1].judgeAndLegalAdvisor.legalAdvisorName); + await I.retryUntilExists(() => I.click('Continue'), '#orderFurtherDirections_directionsNeeded'); + await createOrderEventPage.enterDirections('example directions'); await I.completeEvent('Save and continue'); orderTime = new Date(); + I.seeEventSubmissionConfirmation(config.administrationActions.createOrder); caseViewPage.selectTab(caseViewPage.tabs.orders); I.seeAnswerInTab(1, 'Order 2', 'Type of order', orders[1].type); diff --git a/e2e/tests/judiciaryAdministersCaseAfterSubmission_test.js b/e2e/tests/judiciaryAdministersCaseAfterSubmission_test.js index 9c0de4d9b82..9fa4137de4d 100644 --- a/e2e/tests/judiciaryAdministersCaseAfterSubmission_test.js +++ b/e2e/tests/judiciaryAdministersCaseAfterSubmission_test.js @@ -97,8 +97,11 @@ Scenario('Judiciary creates multiple orders for the case', async (I, caseViewPag await createOrderEventPage.selectType(orders[1].type); await I.retryUntilExists(() => I.click('Continue'), '#judgeAndLegalAdvisor_judgeTitle'); await createOrderEventPage.enterJudgeAndLegalAdvisor(orders[1].judgeAndLegalAdvisor.judgeLastName, orders[1].judgeAndLegalAdvisor.legalAdvisorName); + await I.retryUntilExists(() => I.click('Continue'), '#orderFurtherDirections_directionsNeeded'); + await createOrderEventPage.enterDirections('example directions'); await I.completeEvent('Save and continue'); orderTime = new Date(); + I.seeEventSubmissionConfirmation(config.administrationActions.createOrder); caseViewPage.selectTab(caseViewPage.tabs.orders); I.seeAnswerInTab(1, 'Order 2', 'Type of order', orders[1].type); diff --git a/service/src/integrationTest/java/uk/gov/hmcts/reform/fpl/controllers/GeneratedOrderControllerTest.java b/service/src/integrationTest/java/uk/gov/hmcts/reform/fpl/controllers/GeneratedOrderControllerTest.java index dd25433397e..bb77aab7b9a 100644 --- a/service/src/integrationTest/java/uk/gov/hmcts/reform/fpl/controllers/GeneratedOrderControllerTest.java +++ b/service/src/integrationTest/java/uk/gov/hmcts/reform/fpl/controllers/GeneratedOrderControllerTest.java @@ -1,6 +1,10 @@ package uk.gov.hmcts.reform.fpl.controllers; +import com.fasterxml.jackson.core.type.TypeReference; import com.google.common.collect.ImmutableMap; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.OverrideAutoConfiguration; @@ -12,7 +16,9 @@ import uk.gov.hmcts.reform.ccd.client.model.CaseDetails; import uk.gov.hmcts.reform.document.domain.Document; import uk.gov.hmcts.reform.fpl.model.CaseData; +import uk.gov.hmcts.reform.fpl.model.FurtherDirections; import uk.gov.hmcts.reform.fpl.model.GeneratedOrder; +import uk.gov.hmcts.reform.fpl.model.OrderTypeAndDocument; import uk.gov.hmcts.reform.fpl.model.common.DocmosisDocument; import uk.gov.hmcts.reform.fpl.model.common.DocumentReference; import uk.gov.hmcts.reform.fpl.model.common.Element; @@ -32,6 +38,8 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.BDDMockito.given; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.reset; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static uk.gov.hmcts.reform.fpl.CaseDefinitionConstants.CASE_TYPE; @@ -86,27 +94,6 @@ void aboutToStartShouldReturnErrorsWhenFamilymanNumberIsNotProvided() { assertThat(callbackResponse.getErrors()).containsExactly("Enter Familyman case number"); } - @Test - void midEventShouldGenerateOrderDocument() throws Exception { - byte[] pdf = {1, 2, 3, 4, 5}; - Document document = document(); - DocmosisDocument docmosisDocument = new DocmosisDocument("order.pdf", pdf); - - given(docmosisDocumentGeneratorService.generateDocmosisDocument(any(), any())).willReturn(docmosisDocument); - given(uploadDocumentService.uploadPDF(userId, userAuthToken, pdf, "blank_order_c21.pdf")) - .willReturn(document); - - AboutToStartOrSubmitCallbackResponse callbackResponse = postMidEvent(callbackRequest()); - - CaseData caseData = mapper.convertValue(callbackResponse.getData(), CaseData.class); - - assertThat(caseData.getOrderTypeAndDocument().getDocument()).isEqualTo(DocumentReference.builder() - .binaryUrl(document.links.binary.href) - .filename(document.originalDocumentName) - .url(document.links.self.href) - .build()); - } - @Test void aboutToSubmitShouldAddC21OrderToCaseDataAndRemoveTemporaryCaseDataOrderFields() throws Exception { AboutToStartOrSubmitCallbackResponse callbackResponse = postAboutToSubmitEvent(callbackRequest()); @@ -174,11 +161,11 @@ private GeneratedOrder buildExpectedCareOrder() { } private void aboutToSubmitAssertions(CaseData caseData, GeneratedOrder expectedOrder) { - List> orders = caseData.getOrderCollection(); assertThat(caseData.getOrderTypeAndDocument()).isEqualTo(null); assertThat(caseData.getOrder()).isEqualTo(null); assertThat(caseData.getJudgeAndLegalAdvisor()).isEqualTo(null); + assertThat(caseData.getOrderFurtherDirections()).isEqualTo(null); assertThat(orders.get(0).getValue()).isEqualTo(expectedOrder); } @@ -216,4 +203,115 @@ private Map expectedOrderLocalAuthorityParameters() { .put("localAuthorityOrCafcass", LOCAL_AUTHORITY_NAME) .build(); } + + @Nested + class MidEvent { + private final byte[] pdf = {1, 2, 3, 4, 5}; + private Document document; + + @BeforeEach + void setUp() { + document = document(); + DocmosisDocument docmosisDocument = new DocmosisDocument("order.pdf", pdf); + + given(docmosisDocumentGeneratorService.generateDocmosisDocument(any(), any())).willReturn(docmosisDocument); + given(uploadDocumentService.uploadPDF(any(), any(), any(), any())).willReturn(document); + } + + @Test + void shouldGenerateOrderDocumentWhenOrderTypeIsBlankOrder() { + AboutToStartOrSubmitCallbackResponse callbackResponse = postMidEvent(generateBlankOrderCaseDetails()); + + CaseData caseData = mapper.convertValue(callbackResponse.getData(), CaseData.class); + + verify(uploadDocumentService, times(1)).uploadPDF(userId, userAuthToken, pdf, "blank_order_c21.pdf"); + + assertThat(caseData.getOrderTypeAndDocument().getDocument()).isEqualTo(expectedDocument()); + } + + @Test + void shouldGenerateOrderDocumentWhenOrderTypeIsCareOrderWithFurtherDirections() { + final AboutToStartOrSubmitCallbackResponse callbackResponse = postMidEvent( + generateCareOrderCaseDetailsWithFurtherDirections()); + + verify(docmosisDocumentGeneratorService, times(1)).generateDocmosisDocument(any(), any()); + verify(uploadDocumentService, times(1)).uploadPDF(userId, userAuthToken, pdf, "care_order.pdf"); + + final CaseData caseData = mapper.convertValue(callbackResponse.getData(), CaseData.class); + + assertThat(caseData.getOrderTypeAndDocument().getDocument()).isEqualTo(expectedDocument()); + } + + @Test + void shouldNotGenerateOrderDocumentWhenOrderTypeIsCareOrderWithNoFurtherDirections() { + postMidEvent(generateCareOrderCaseDetailsWithoutFurtherDirections()); + + verify(docmosisDocumentGeneratorService, never()).generateDocmosisDocument(any(), any()); + verify(uploadDocumentService, never()).uploadPDF(any(), any(), any(), any()); + } + + @AfterEach + void resetInvocations() { + reset(docmosisDocumentGeneratorService); + reset(uploadDocumentService); + } + + private CaseDetails generateBlankOrderCaseDetails() { + final CaseData.CaseDataBuilder dataBuilder = CaseData.builder(); + + dataBuilder.order(GeneratedOrder.builder().details("").build()); + dataBuilder.orderTypeAndDocument(OrderTypeAndDocument.builder().type(BLANK_ORDER).build()); + generateDefaultValues(dataBuilder); + + return CaseDetails.builder() + .data(mapper.convertValue(dataBuilder.build(), new TypeReference<>() {})) + .build(); + } + + private CaseDetails generateCareOrderCaseDetailsWithFurtherDirections() { + final CaseData.CaseDataBuilder dataBuilder = generateCommonCareOrderDetails(); + + dataBuilder.orderFurtherDirections(FurtherDirections.builder() + .directionsNeeded("Yes") + .directions("Some directions") + .build()); + + return CaseDetails.builder() + .data(mapper.convertValue(dataBuilder.build(), new TypeReference<>() {})) + .build(); + } + + private CaseDetails generateCareOrderCaseDetailsWithoutFurtherDirections() { + final CaseData.CaseDataBuilder dataBuilder = generateCommonCareOrderDetails(); + + return CaseDetails.builder() + .data(mapper.convertValue(dataBuilder.build(), new TypeReference<>() {})) + .build(); + } + + private CaseData.CaseDataBuilder generateCommonCareOrderDetails() { + final CaseData.CaseDataBuilder builder = CaseData.builder() + .orderTypeAndDocument(OrderTypeAndDocument.builder() + .type(CARE_ORDER) + .build()); + + generateDefaultValues(builder); + + return builder; + } + + private void generateDefaultValues(CaseData.CaseDataBuilder builder) { + builder.caseLocalAuthority(LOCAL_AUTHORITY_CODE); + builder.familyManCaseNumber(FAMILY_MAN_CASE_NUMBER); + builder.judgeAndLegalAdvisor(JudgeAndLegalAdvisor.builder().build()); + } + + private DocumentReference expectedDocument() { + return DocumentReference.builder() + .binaryUrl(document.links.binary.href) + .filename(document.originalDocumentName) + .url(document.links.self.href) + .build(); + } + } } diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/controllers/GeneratedOrderController.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/controllers/GeneratedOrderController.java index 3f142aa5fc1..69bb0d24e4a 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/controllers/GeneratedOrderController.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/controllers/GeneratedOrderController.java @@ -17,7 +17,9 @@ import uk.gov.hmcts.reform.fpl.config.GatewayConfiguration; import uk.gov.hmcts.reform.fpl.events.GeneratedOrderEvent; import uk.gov.hmcts.reform.fpl.model.CaseData; +import uk.gov.hmcts.reform.fpl.model.FurtherDirections; import uk.gov.hmcts.reform.fpl.model.GeneratedOrder; +import uk.gov.hmcts.reform.fpl.model.OrderTypeAndDocument; import uk.gov.hmcts.reform.fpl.model.common.DocmosisDocument; import uk.gov.hmcts.reform.fpl.model.common.Element; import uk.gov.hmcts.reform.fpl.service.DocmosisDocumentGeneratorService; @@ -31,6 +33,7 @@ import java.util.List; import static uk.gov.hmcts.reform.fpl.enums.DocmosisTemplates.ORDER; +import static uk.gov.hmcts.reform.fpl.enums.GeneratedOrderType.BLANK_ORDER; @Slf4j @Api @@ -80,12 +83,17 @@ public AboutToStartOrSubmitCallbackResponse handleMidEvent( @RequestBody CallbackRequest callbackRequest) { CaseDetails caseDetails = callbackRequest.getCaseDetails(); CaseData caseData = mapper.convertValue(caseDetails.getData(), CaseData.class); + OrderTypeAndDocument orderTypeAndDocument = caseData.getOrderTypeAndDocument(); + FurtherDirections orderFurtherDirections = caseData.getOrderFurtherDirections(); - Document document = getDocument(authorization, userId, caseData); + // Only generate a document if a blank order or further directions has been added + if (orderTypeAndDocument.getType() == BLANK_ORDER || orderFurtherDirections != null) { + Document document = getDocument(authorization, userId, caseData); - //Update orderTypeAndDocument with the document so it can be displayed in check-your-answers - caseDetails.getData().put("orderTypeAndDocument", service.buildOrderTypeAndDocument( - caseData.getOrderTypeAndDocument(), document)); + //Update orderTypeAndDocument with the document so it can be displayed in check-your-answers + caseDetails.getData().put("orderTypeAndDocument", service.buildOrderTypeAndDocument( + orderTypeAndDocument, document)); + } return AboutToStartOrSubmitCallbackResponse.builder() .data(caseDetails.getData()) @@ -108,6 +116,7 @@ public AboutToStartOrSubmitCallbackResponse handleAboutToSubmit( caseDetails.getData().remove("orderTypeAndDocument"); caseDetails.getData().remove("order"); caseDetails.getData().remove("judgeAndLegalAdvisor"); + caseDetails.getData().remove("orderFurtherDirections"); return AboutToStartOrSubmitCallbackResponse.builder() .data(caseDetails.getData()) diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/model/CaseData.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/CaseData.java index d628a96e1eb..c7e759d02b1 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/model/CaseData.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/CaseData.java @@ -159,6 +159,7 @@ public List> getAllChildren() { private final C2DocumentBundle temporaryC2Document; private final List> c2DocumentBundle; private final OrderTypeAndDocument orderTypeAndDocument; + private final FurtherDirections orderFurtherDirections; private final GeneratedOrder order; private final List> orderCollection; @@ -238,6 +239,11 @@ public Optional findRespondent(int seqNo) { ? empty() : Optional.of(getRespondents1().get(seqNo).getValue()); } + @JsonIgnore + public String getFurtherDirectionsText() { + return Optional.ofNullable(orderFurtherDirections).map(FurtherDirections::getDirections).orElse(""); + } + private final List> confidentialChildren; public List> getConfidentialChildren() { diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/model/FurtherDirections.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/FurtherDirections.java new file mode 100644 index 00000000000..97e6037acf5 --- /dev/null +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/FurtherDirections.java @@ -0,0 +1,11 @@ +package uk.gov.hmcts.reform.fpl.model; + +import lombok.Builder; +import lombok.Data; + +@Data +@Builder +public class FurtherDirections { + private final String directionsNeeded; + private final String directions; +} diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/model/GeneratedOrder.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/GeneratedOrder.java index fb805a13a34..278cdb25e7d 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/model/GeneratedOrder.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/model/GeneratedOrder.java @@ -15,4 +15,5 @@ public class GeneratedOrder { private final DocumentReference document; private final String date; private final JudgeAndLegalAdvisor judgeAndLegalAdvisor; + private final FurtherDirections furtherDirections; } diff --git a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/GeneratedOrderService.java b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/GeneratedOrderService.java index 0717941d818..62dc7550713 100644 --- a/service/src/main/java/uk/gov/hmcts/reform/fpl/service/GeneratedOrderService.java +++ b/service/src/main/java/uk/gov/hmcts/reform/fpl/service/GeneratedOrderService.java @@ -129,6 +129,7 @@ public Map getOrderTemplateData(CaseData caseData) { .put("legalAdvisorName", JudgeAndLegalAdvisorHelper.getLegalAdvisorName( caseData.getJudgeAndLegalAdvisor())) .put("children", getChildrenDetails(caseData)) + .put("furtherDirections", caseData.getFurtherDirectionsText()) .build(); return orderTemplateBuilder.build(); diff --git a/service/src/test/java/uk/gov/hmcts/reform/fpl/model/CaseDataTest.java b/service/src/test/java/uk/gov/hmcts/reform/fpl/model/CaseDataTest.java index fec68e82909..367ca4dc674 100644 --- a/service/src/test/java/uk/gov/hmcts/reform/fpl/model/CaseDataTest.java +++ b/service/src/test/java/uk/gov/hmcts/reform/fpl/model/CaseDataTest.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; +import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.skyscreamer.jsonassert.JSONAssert; @@ -164,4 +165,33 @@ public void shouldNotFindNonExistingRespondent() { assertThat(caseData.findRespondent(1)).isEqualTo(Optional.empty()); } + + @Nested + class GetFurtherDirectionsText { + private FurtherDirections furtherDirections; + private CaseData caseData; + + @Test + void shouldReturnDirectionTextWhenFurtherDirectionIsPopulated() { + furtherDirections = FurtherDirections.builder().directions("some text").build(); + caseData = CaseData.builder().orderFurtherDirections(furtherDirections).build(); + + assertThat(caseData.getFurtherDirectionsText()).isEqualTo("some text"); + } + + @Test + void shouldReturnEmptyStringWhenFurtherDirectionIsNotPopulated() { + furtherDirections = FurtherDirections.builder().build(); + caseData = CaseData.builder().orderFurtherDirections(furtherDirections).build(); + + assertThat(caseData.getFurtherDirectionsText()).isEmpty(); + } + + @Test + void shouldReturnEmptyStringWhenFurtherDirectionIsNull() { + caseData = CaseData.builder().build(); + + assertThat(caseData.getFurtherDirectionsText()).isEmpty(); + } + } } diff --git a/service/src/test/java/uk/gov/hmcts/reform/fpl/service/GeneratedOrderServiceTest.java b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/GeneratedOrderServiceTest.java index 83561ba383d..d687228574a 100644 --- a/service/src/test/java/uk/gov/hmcts/reform/fpl/service/GeneratedOrderServiceTest.java +++ b/service/src/test/java/uk/gov/hmcts/reform/fpl/service/GeneratedOrderServiceTest.java @@ -14,6 +14,7 @@ import uk.gov.hmcts.reform.fpl.model.CaseData; import uk.gov.hmcts.reform.fpl.model.Child; import uk.gov.hmcts.reform.fpl.model.ChildParty; +import uk.gov.hmcts.reform.fpl.model.FurtherDirections; import uk.gov.hmcts.reform.fpl.model.GeneratedOrder; import uk.gov.hmcts.reform.fpl.model.OrderTypeAndDocument; import uk.gov.hmcts.reform.fpl.model.common.DocumentReference; @@ -261,6 +262,7 @@ private Map createExpectedOrderData(String date, GeneratedOrderT } expectedMap + .put("furtherDirections", "Example Directions") .put("familyManCaseNumber", "123") .put("courtName", "Example Court") .put("todaysDate", date) @@ -288,6 +290,10 @@ private CaseData createPopulatedCaseData(GeneratedOrderType type, LocalDate loca .order(GeneratedOrder.builder() .title("Example Title") .details("Example details") + .build()) + .orderFurtherDirections(FurtherDirections.builder() + .directionsNeeded("Yes") + .directions("Example Directions") .build()); break; case CARE_ORDER: @@ -295,6 +301,10 @@ private CaseData createPopulatedCaseData(GeneratedOrderType type, LocalDate loca .orderTypeAndDocument(OrderTypeAndDocument.builder() .type(CARE_ORDER) .document(DocumentReference.builder().build()) + .build()) + .orderFurtherDirections(FurtherDirections.builder() + .directionsNeeded("Yes") + .directions("Example Directions") .build()); break; default: