diff --git a/docker/docmosis/templates/CV-UNS-DEC-ENG-01286.docx b/docker/docmosis/templates/CV-UNS-DEC-ENG-01286.docx index 63bb1643393..f9444fe4ad0 100644 Binary files a/docker/docmosis/templates/CV-UNS-DEC-ENG-01286.docx and b/docker/docmosis/templates/CV-UNS-DEC-ENG-01286.docx differ diff --git a/src/main/java/uk/gov/hmcts/reform/civil/handler/callback/user/GenerateDirectionOrderCallbackHandler.java b/src/main/java/uk/gov/hmcts/reform/civil/handler/callback/user/GenerateDirectionOrderCallbackHandler.java index ef24a2f2d49..4f74745872c 100644 --- a/src/main/java/uk/gov/hmcts/reform/civil/handler/callback/user/GenerateDirectionOrderCallbackHandler.java +++ b/src/main/java/uk/gov/hmcts/reform/civil/handler/callback/user/GenerateDirectionOrderCallbackHandler.java @@ -33,6 +33,8 @@ import uk.gov.hmcts.reform.civil.model.finalorders.FinalOrderAppeal; import uk.gov.hmcts.reform.civil.model.finalorders.FinalOrderFurtherHearing; import uk.gov.hmcts.reform.civil.model.finalorders.FinalOrderRepresentation; +import uk.gov.hmcts.reform.civil.model.finalorders.OrderAfterHearingDate; +import uk.gov.hmcts.reform.civil.model.finalorders.OrderAfterHearingDateType; import uk.gov.hmcts.reform.civil.model.finalorders.OrderMade; import uk.gov.hmcts.reform.civil.model.finalorders.OrderMadeOnDetails; import uk.gov.hmcts.reform.civil.model.finalorders.OrderMadeOnDetailsOrderWithoutNotice; @@ -90,6 +92,9 @@ import static uk.gov.hmcts.reform.civil.enums.finalorders.FinalOrderRepresentationList.CLAIMANT_AND_DEFENDANT; import static uk.gov.hmcts.reform.civil.enums.finalorders.FinalOrderToggle.SHOW; import static uk.gov.hmcts.reform.civil.model.common.DynamicList.fromList; +import static uk.gov.hmcts.reform.civil.model.finalorders.OrderAfterHearingDateType.DATE_RANGE; +import static uk.gov.hmcts.reform.civil.model.finalorders.OrderAfterHearingDateType.SINGLE_DATE; +import static uk.gov.hmcts.reform.civil.service.docmosis.caseprogression.JudgeOrderDownloadGenerator.BLANK_TEMPLATE_TO_BE_USED_AFTER_A_HEARING; import static uk.gov.hmcts.reform.civil.utils.ElementUtils.element; @Service @@ -141,6 +146,10 @@ public class GenerateDirectionOrderCallbackHandler extends CallbackHandler { + " Standard Direction Order (SDO) otherwise use Not suitable for SDO."; public static final String NOT_ALLOWED_FOR_TRACK = "The Make an order event is not available for Small Claims and Fast Track cases until the track has" + " been allocated. You must use the Standard Direction Order (SDO) to proceed."; + public static final String FUTURE_SINGLE_DATE_ERROR = "The date in Order made may not be later than the established date"; + public static final String FUTURE_DATE_FROM_ERROR = "The date in Order made 'Date from' may not be later than the established date"; + public static final String FUTURE_DATE_TO_ERROR = "The date in Order made 'Date to' may not be later than the established date"; + public static final String DATE_FROM_AFTER_DATE_TO_ERROR = "The date in Order made 'Date from' may not be later than the 'Date to'"; private String defendantTwoPartyName; private String claimantTwoPartyName; public static final String APPEAL_NOTICE_DATE = "Appeal notice date"; @@ -163,6 +172,7 @@ protected Map callbacks() { callbackKey(MID, "populate-form-values"), this::populateFormValues, callbackKey(MID, "create-download-template-document"), this::generateTemplate, callbackKey(MID, "validate-and-generate-document"), this::validateFormAndGeneratePreviewDocument, + callbackKey(MID, "hearing-date-order"), this::addingHearingDateToTemplate, callbackKey(ABOUT_TO_SUBMIT), this::addGeneratedDocumentToCollection, callbackKey(SUBMITTED), this::buildConfirmation ); @@ -224,7 +234,9 @@ private CallbackResponse nullPreviousSelections(CaseData.CaseDataBuilder c caseDataBuilder.finalOrderTrackAllocation(null) .finalOrderAllocateToTrack(null) .finalOrderIntermediateTrackComplexityBand(null) - .finalOrderDownloadTemplateOptions(null); + .finalOrderDownloadTemplateOptions(null) + .orderAfterHearingDate(null) + .showOrderAfterHearingDatePage(null); return AboutToStartOrSubmitCallbackResponse.builder() .data(caseDataBuilder.build().toMap(objectMapper)) @@ -235,6 +247,30 @@ private CallbackResponse generateTemplate(CallbackParams callbackParams) { CaseData caseData = callbackParams.getCaseData(); CaseData.CaseDataBuilder caseDataBuilder = caseData.toBuilder(); + if (!BLANK_TEMPLATE_TO_BE_USED_AFTER_A_HEARING.equals(caseData.getFinalOrderDownloadTemplateOptions().getValue().getLabel())) { + CaseDocument documentDownload = judgeOrderDownloadGenerator.generate(caseData, callbackParams.getParams().get(BEARER_TOKEN).toString()); + caseDataBuilder.finalOrderDownloadTemplateDocument(documentDownload); + caseDataBuilder.showOrderAfterHearingDatePage(NO); + } else { + caseDataBuilder.showOrderAfterHearingDatePage(YES); + } + + return AboutToStartOrSubmitCallbackResponse.builder() + .data(caseDataBuilder.build().toMap(objectMapper)) + .build(); + } + + private CallbackResponse addingHearingDateToTemplate(CallbackParams callbackParams) { + CaseData caseData = callbackParams.getCaseData(); + CaseData.CaseDataBuilder caseDataBuilder = caseData.toBuilder(); + List errors = validateOrderAfterHearingDates(caseData); + + if (!errors.isEmpty()) { + return AboutToStartOrSubmitCallbackResponse.builder() + .errors(errors) + .build(); + } + CaseDocument documentDownload = judgeOrderDownloadGenerator.generate(caseData, callbackParams.getParams().get(BEARER_TOKEN).toString()); caseDataBuilder.finalOrderDownloadTemplateDocument(documentDownload); @@ -752,4 +788,27 @@ private String getDocumentFilename(CaseData caseData, CaseDocument document, Str } return updatedFileName.append(".").append(ext).toString(); } + + private List validateOrderAfterHearingDates(CaseData caseData) { + List errors = new ArrayList<>(); + LocalDate now = LocalDate.now(); + OrderAfterHearingDate orderAfterHearingDate = caseData.getOrderAfterHearingDate(); + OrderAfterHearingDateType dateType = orderAfterHearingDate.getDateType(); + + if (dateType.equals(SINGLE_DATE) && orderAfterHearingDate.getDate().isAfter(now)) { + errors.add(FUTURE_SINGLE_DATE_ERROR); + } + if (dateType.equals(DATE_RANGE)) { + if (orderAfterHearingDate.getFromDate().isAfter(now)) { + errors.add(FUTURE_DATE_FROM_ERROR); + } + if (orderAfterHearingDate.getToDate().isAfter(now)) { + errors.add(FUTURE_DATE_TO_ERROR); + } + if (orderAfterHearingDate.getFromDate().isAfter(orderAfterHearingDate.getToDate())) { + errors.add(DATE_FROM_AFTER_DATE_TO_ERROR); + } + } + return errors; + } } diff --git a/src/main/java/uk/gov/hmcts/reform/civil/model/CaseDataCaseProgression.java b/src/main/java/uk/gov/hmcts/reform/civil/model/CaseDataCaseProgression.java index fffdeb7aa14..7378b0deff9 100644 --- a/src/main/java/uk/gov/hmcts/reform/civil/model/CaseDataCaseProgression.java +++ b/src/main/java/uk/gov/hmcts/reform/civil/model/CaseDataCaseProgression.java @@ -44,6 +44,7 @@ import uk.gov.hmcts.reform.civil.model.finalorders.FinalOrderFurtherHearing; import uk.gov.hmcts.reform.civil.model.finalorders.FinalOrderRecitalsRecorded; import uk.gov.hmcts.reform.civil.model.finalorders.FinalOrderRepresentation; +import uk.gov.hmcts.reform.civil.model.finalorders.OrderAfterHearingDate; import uk.gov.hmcts.reform.civil.model.finalorders.OrderMade; import uk.gov.hmcts.reform.civil.model.finalorders.OrderMadeOnDetails; import uk.gov.hmcts.reform.civil.model.finalorders.OrderMadeOnDetailsOrderWithoutNotice; @@ -178,6 +179,8 @@ public class CaseDataCaseProgression extends CaseDataCaseSdo implements Mappable private CaseDocument finalOrderDownloadTemplateDocument; private Document uploadOrderDocumentFromTemplate; private String finalOrderTrackToggle; + private OrderAfterHearingDate orderAfterHearingDate; + private YesOrNo showOrderAfterHearingDatePage; // judge final freeform orders private final FinalOrderSelection finalOrderSelection; diff --git a/src/main/java/uk/gov/hmcts/reform/civil/model/docmosis/casepogression/JudgeFinalOrderForm.java b/src/main/java/uk/gov/hmcts/reform/civil/model/docmosis/casepogression/JudgeFinalOrderForm.java index 282505c11a7..72940c14e4f 100644 --- a/src/main/java/uk/gov/hmcts/reform/civil/model/docmosis/casepogression/JudgeFinalOrderForm.java +++ b/src/main/java/uk/gov/hmcts/reform/civil/model/docmosis/casepogression/JudgeFinalOrderForm.java @@ -81,4 +81,5 @@ public class JudgeFinalOrderForm implements MappableObject { private final YesOrNo claimTrack; private final String trackAndComplexityBandText; private final String dateNowPlus7; + private final String orderAfterHearingDate; } diff --git a/src/main/java/uk/gov/hmcts/reform/civil/model/finalorders/OrderAfterHearingDate.java b/src/main/java/uk/gov/hmcts/reform/civil/model/finalorders/OrderAfterHearingDate.java new file mode 100644 index 00000000000..c6f90f748b1 --- /dev/null +++ b/src/main/java/uk/gov/hmcts/reform/civil/model/finalorders/OrderAfterHearingDate.java @@ -0,0 +1,21 @@ +package uk.gov.hmcts.reform.civil.model.finalorders; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDate; + +@Data +@Builder(toBuilder = true) +@NoArgsConstructor +@AllArgsConstructor +public class OrderAfterHearingDate { + + private OrderAfterHearingDateType dateType; + private LocalDate date; + private LocalDate fromDate; + private LocalDate toDate; + private String bespokeDates; +} diff --git a/src/main/java/uk/gov/hmcts/reform/civil/model/finalorders/OrderAfterHearingDateType.java b/src/main/java/uk/gov/hmcts/reform/civil/model/finalorders/OrderAfterHearingDateType.java new file mode 100644 index 00000000000..59de71f13e9 --- /dev/null +++ b/src/main/java/uk/gov/hmcts/reform/civil/model/finalorders/OrderAfterHearingDateType.java @@ -0,0 +1,7 @@ +package uk.gov.hmcts.reform.civil.model.finalorders; + +public enum OrderAfterHearingDateType { + SINGLE_DATE, + DATE_RANGE, + BESPOKE_RANGE +} diff --git a/src/main/java/uk/gov/hmcts/reform/civil/service/docmosis/caseprogression/JudgeOrderDownloadGenerator.java b/src/main/java/uk/gov/hmcts/reform/civil/service/docmosis/caseprogression/JudgeOrderDownloadGenerator.java index 174496deec9..7c6710cd376 100644 --- a/src/main/java/uk/gov/hmcts/reform/civil/service/docmosis/caseprogression/JudgeOrderDownloadGenerator.java +++ b/src/main/java/uk/gov/hmcts/reform/civil/service/docmosis/caseprogression/JudgeOrderDownloadGenerator.java @@ -20,6 +20,7 @@ import java.time.LocalDate; import java.time.format.DateTimeFormatter; +import java.util.Locale; import static java.lang.String.format; import static java.util.Objects.nonNull; @@ -49,6 +50,8 @@ public class JudgeOrderDownloadGenerator extends JudgeFinalOrderGenerator implem public static final String INTERMEDIATE_NO_BAND_WITH_REASON = "This case is allocated to the Intermediate Track and is not allocated a complexity band because %s."; public static final String INTERMEDIATE_WITH_BAND_NO_REASON = "This case is allocated to the Intermediate Track and is allocated to complexity band %s."; public static final String INTERMEDIATE_WITH_BAND_WITH_REASON = "This case is allocated to the Intermediate Track and is allocated to complexity band %s because %s."; + public static final String ORDER_AFTER_HEARING_ON = "This order is made following a hearing on %s."; + public static final String ORDER_AFTER_HEARING_BETWEEN = "This order is made following a hearing between %s and %s."; private final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("d MMMM yyyy"); public JudgeOrderDownloadGenerator(DocumentManagementService documentManagementService, DocumentGeneratorService documentGeneratorService, @@ -103,7 +106,9 @@ public JudgeFinalOrderForm getDownloadTemplate(CaseData caseData, String authori } public JudgeFinalOrderForm getBlankAfterHearing(CaseData caseData, String authorisation) { - return getBaseTemplateData(caseData, authorisation).build(); + return getBaseTemplateData(caseData, authorisation) + .orderAfterHearingDate(getOrderAfterHearingDateText(caseData)) + .build(); } public JudgeFinalOrderForm getBlankBeforeHearing(CaseData caseData, String authorisation) { @@ -182,4 +187,13 @@ public String getComplexityBand(CaseData caseData) { return null; } + private String getOrderAfterHearingDateText(CaseData caseData) { + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd MMMM yyyy", Locale.ENGLISH); + return switch (caseData.getOrderAfterHearingDate().getDateType()) { + case SINGLE_DATE -> format(ORDER_AFTER_HEARING_ON, caseData.getOrderAfterHearingDate().getDate().format(formatter)); + case DATE_RANGE -> format(ORDER_AFTER_HEARING_BETWEEN, caseData.getOrderAfterHearingDate().getFromDate().format(formatter), + caseData.getOrderAfterHearingDate().getToDate().format(formatter)); + case BESPOKE_RANGE -> format(ORDER_AFTER_HEARING_ON, caseData.getOrderAfterHearingDate().getBespokeDates()); + }; + } } diff --git a/src/test/java/uk/gov/hmcts/reform/civil/handler/callback/user/GenerateDirectionOrderCallbackHandlerTest.java b/src/test/java/uk/gov/hmcts/reform/civil/handler/callback/user/GenerateDirectionOrderCallbackHandlerTest.java index f40dfc52a6a..786fc803dc1 100644 --- a/src/test/java/uk/gov/hmcts/reform/civil/handler/callback/user/GenerateDirectionOrderCallbackHandlerTest.java +++ b/src/test/java/uk/gov/hmcts/reform/civil/handler/callback/user/GenerateDirectionOrderCallbackHandlerTest.java @@ -51,6 +51,8 @@ import uk.gov.hmcts.reform.civil.model.finalorders.FinalOrderRecitalsRecorded; import uk.gov.hmcts.reform.civil.model.finalorders.FinalOrderRepresentation; import uk.gov.hmcts.reform.civil.model.finalorders.FinalOrdersComplexityBand; +import uk.gov.hmcts.reform.civil.model.finalorders.OrderAfterHearingDate; +import uk.gov.hmcts.reform.civil.model.finalorders.OrderAfterHearingDateType; import uk.gov.hmcts.reform.civil.model.finalorders.OrderMade; import uk.gov.hmcts.reform.civil.referencedata.model.LocationRefData; import uk.gov.hmcts.reform.civil.sampledata.CaseDataBuilder; @@ -100,7 +102,11 @@ import static uk.gov.hmcts.reform.civil.handler.callback.user.GenerateDirectionOrderCallbackHandler.BODY_1_V_1; import static uk.gov.hmcts.reform.civil.handler.callback.user.GenerateDirectionOrderCallbackHandler.BODY_1_V_2; import static uk.gov.hmcts.reform.civil.handler.callback.user.GenerateDirectionOrderCallbackHandler.BODY_2_V_1; +import static uk.gov.hmcts.reform.civil.handler.callback.user.GenerateDirectionOrderCallbackHandler.DATE_FROM_AFTER_DATE_TO_ERROR; import static uk.gov.hmcts.reform.civil.handler.callback.user.GenerateDirectionOrderCallbackHandler.FURTHER_HEARING_OTHER_ALT_LOCATION; +import static uk.gov.hmcts.reform.civil.handler.callback.user.GenerateDirectionOrderCallbackHandler.FUTURE_DATE_FROM_ERROR; +import static uk.gov.hmcts.reform.civil.handler.callback.user.GenerateDirectionOrderCallbackHandler.FUTURE_DATE_TO_ERROR; +import static uk.gov.hmcts.reform.civil.handler.callback.user.GenerateDirectionOrderCallbackHandler.FUTURE_SINGLE_DATE_ERROR; import static uk.gov.hmcts.reform.civil.handler.callback.user.GenerateDirectionOrderCallbackHandler.HEADER; import static uk.gov.hmcts.reform.civil.model.common.DynamicList.fromList; import static uk.gov.hmcts.reform.civil.utils.ElementUtils.element; @@ -1021,7 +1027,87 @@ class MidEventGenerateTemplatesMinti { private static final String PAGE_ID = "create-download-template-document"; @Test - void shouldGenerateFreeFormOrder_onMidEventCallback() { + void shouldNotGenerateAfterHearingTemplateBeforeHearingDate_onMidEventCallback() { + // Given + CaseData caseData = CaseDataBuilder.builder().atStateNotificationAcknowledged().build().toBuilder() + .finalOrderDownloadTemplateOptions(DynamicList.builder() + .value(DynamicListElement.builder() + .label("Blank template to be used after a hearing") + .build()) + .build()) + .build(); + CallbackParams params = callbackParamsOf(caseData, MID, PAGE_ID); + // When + var response = (AboutToStartOrSubmitCallbackResponse) handler.handle(params); + // Then + assertThat(response.getData()).extracting("finalOrderDownloadTemplateDocument").isNull(); + assertThat(response.getData()).extracting("showOrderAfterHearingDatePage").isEqualTo("Yes"); + } + + @Test + void shouldGenerateTemplateBeforeHearing_onMidEventCallback() { + // Given + CaseData caseData = CaseDataBuilder.builder().atStateNotificationAcknowledged().build().toBuilder() + .finalOrderDownloadTemplateOptions(DynamicList.builder() + .value(DynamicListElement.builder() + .label("Blank template to be used before a hearing/box work") + .build()) + .build()) + .build(); + CallbackParams params = callbackParamsOf(caseData, MID, PAGE_ID); + // When + when(judgeOrderDownloadGenerator.generate(any(), any())).thenReturn(finalOrder); + var response = (AboutToStartOrSubmitCallbackResponse) handler.handle(params); + // Then + assertThat(response.getData()).extracting("finalOrderDownloadTemplateDocument").isNotNull(); + assertThat(response.getData()).extracting("showOrderAfterHearingDatePage").isEqualTo("No"); + } + + @Test + void shouldGenerateTemplateFixDateForCCMC_onMidEventCallback() { + // Given + CaseData caseData = CaseDataBuilder.builder().atStateNotificationAcknowledged().build().toBuilder() + .finalOrderDownloadTemplateOptions(DynamicList.builder() + .value(DynamicListElement.builder() + .label("Fix a date for CCMC") + .build()) + .build()) + .build(); + CallbackParams params = callbackParamsOf(caseData, MID, PAGE_ID); + // When + when(judgeOrderDownloadGenerator.generate(any(), any())).thenReturn(finalOrder); + var response = (AboutToStartOrSubmitCallbackResponse) handler.handle(params); + // Then + assertThat(response.getData()).extracting("finalOrderDownloadTemplateDocument").isNotNull(); + assertThat(response.getData()).extracting("showOrderAfterHearingDatePage").isEqualTo("No"); + } + + @Test + void shouldGenerateTemplateFixDateForCMC_onMidEventCallback() { + // Given + CaseData caseData = CaseDataBuilder.builder().atStateNotificationAcknowledged().build().toBuilder() + .finalOrderDownloadTemplateOptions(DynamicList.builder() + .value(DynamicListElement.builder() + .label("Fix a date for CMC") + .build()) + .build()) + .build(); + CallbackParams params = callbackParamsOf(caseData, MID, PAGE_ID); + // When + when(judgeOrderDownloadGenerator.generate(any(), any())).thenReturn(finalOrder); + var response = (AboutToStartOrSubmitCallbackResponse) handler.handle(params); + // Then + assertThat(response.getData()).extracting("finalOrderDownloadTemplateDocument").isNotNull(); + assertThat(response.getData()).extracting("showOrderAfterHearingDatePage").isEqualTo("No"); + } + } + + @Nested + class MidEventGenerateTemplatesAfterHearingMinti { + private static final String PAGE_ID = "hearing-date-order"; + + @Test + void shouldGenerateAfterHearingTemplateBeforeHearingDate_onMidEventCallback_noDateValidationErrors() { // Given CaseData caseData = CaseDataBuilder.builder().atStateNotificationAcknowledged().build().toBuilder() .finalOrderDownloadTemplateOptions(DynamicList.builder() @@ -1029,6 +1115,10 @@ void shouldGenerateFreeFormOrder_onMidEventCallback() { .label("Blank template to be used after a hearing") .build()) .build()) + .orderAfterHearingDate(OrderAfterHearingDate.builder() + .dateType(OrderAfterHearingDateType.SINGLE_DATE) + .date(LocalDate.now().minusDays(2)) + .build()) .build(); CallbackParams params = callbackParamsOf(caseData, MID, PAGE_ID); // When @@ -1036,8 +1126,73 @@ void shouldGenerateFreeFormOrder_onMidEventCallback() { var response = (AboutToStartOrSubmitCallbackResponse) handler.handle(params); // Then assertThat(response.getData()).extracting("finalOrderDownloadTemplateDocument").isNotNull(); + assertThat(response.getErrors()).isNull(); + } + + @Test + void shouldReturnError_whenSingleDateIsInFuture() { + // Given + CaseData caseData = CaseDataBuilder.builder().atStateNotificationAcknowledged().build().toBuilder() + .finalOrderDownloadTemplateOptions(DynamicList.builder() + .value(DynamicListElement.builder() + .label("Blank template to be used after a hearing") + .build()) + .build()) + .orderAfterHearingDate(OrderAfterHearingDate.builder() + .dateType(OrderAfterHearingDateType.SINGLE_DATE) + .date(LocalDate.now().plusDays(2)) + .build()) + .build(); + CallbackParams params = callbackParamsOf(caseData, MID, PAGE_ID); + // When + var response = (AboutToStartOrSubmitCallbackResponse) handler.handle(params); + // Then + assertThat(response.getErrors()).hasSize(1).containsExactlyInAnyOrder(FUTURE_SINGLE_DATE_ERROR); + } + + @Test + void shouldReturnError_whenDateRangeDatesAreInFuture() { + // Given + CaseData caseData = CaseDataBuilder.builder().atStateNotificationAcknowledged().build().toBuilder() + .finalOrderDownloadTemplateOptions(DynamicList.builder() + .value(DynamicListElement.builder() + .label("Blank template to be used after a hearing") + .build()) + .build()) + .orderAfterHearingDate(OrderAfterHearingDate.builder() + .dateType(OrderAfterHearingDateType.DATE_RANGE) + .fromDate(LocalDate.now().plusDays(2)) + .toDate(LocalDate.now().plusDays(3)) + .build()) + .build(); + CallbackParams params = callbackParamsOf(caseData, MID, PAGE_ID); + // When + var response = (AboutToStartOrSubmitCallbackResponse) handler.handle(params); + // Then + assertThat(response.getErrors()).hasSize(2).containsExactlyInAnyOrder(FUTURE_DATE_FROM_ERROR, FUTURE_DATE_TO_ERROR); } + @Test + void shouldReturnError_whenFromDateIsAfterToDate() { + // Given + CaseData caseData = CaseDataBuilder.builder().atStateNotificationAcknowledged().build().toBuilder() + .finalOrderDownloadTemplateOptions(DynamicList.builder() + .value(DynamicListElement.builder() + .label("Blank template to be used after a hearing") + .build()) + .build()) + .orderAfterHearingDate(OrderAfterHearingDate.builder() + .dateType(OrderAfterHearingDateType.DATE_RANGE) + .fromDate(LocalDate.now().minusDays(2)) + .toDate(LocalDate.now().minusDays(3)) + .build()) + .build(); + CallbackParams params = callbackParamsOf(caseData, MID, PAGE_ID); + // When + var response = (AboutToStartOrSubmitCallbackResponse) handler.handle(params); + // Then + assertThat(response.getErrors()).hasSize(1).containsExactlyInAnyOrder(DATE_FROM_AFTER_DATE_TO_ERROR); + } } @Nested diff --git a/src/test/java/uk/gov/hmcts/reform/civil/service/docmosis/caseprogression/JudgeOrderDownloadGeneratorTest.java b/src/test/java/uk/gov/hmcts/reform/civil/service/docmosis/caseprogression/JudgeOrderDownloadGeneratorTest.java index 4dd049a7ca5..9cc5aa68c76 100644 --- a/src/test/java/uk/gov/hmcts/reform/civil/service/docmosis/caseprogression/JudgeOrderDownloadGeneratorTest.java +++ b/src/test/java/uk/gov/hmcts/reform/civil/service/docmosis/caseprogression/JudgeOrderDownloadGeneratorTest.java @@ -24,6 +24,8 @@ import uk.gov.hmcts.reform.civil.model.defaultjudgment.CaseLocationCivil; import uk.gov.hmcts.reform.civil.model.docmosis.DocmosisDocument; import uk.gov.hmcts.reform.civil.model.finalorders.FinalOrdersComplexityBand; +import uk.gov.hmcts.reform.civil.model.finalorders.OrderAfterHearingDate; +import uk.gov.hmcts.reform.civil.model.finalorders.OrderAfterHearingDateType; import uk.gov.hmcts.reform.civil.referencedata.model.LocationRefData; import uk.gov.hmcts.reform.civil.sampledata.CaseDataBuilder; import uk.gov.hmcts.reform.civil.sampledata.CaseDocumentBuilder; @@ -126,12 +128,25 @@ public void setUp() { FIX_A_DATE_FOR_CMC }) void getDownloadTemplate(String templateToUse) { - CaseData caseData = CaseDataBuilder.builder().atStateNotificationAcknowledged().build().toBuilder() - .finalOrderDownloadTemplateOptions(DynamicList.builder() - .value(DynamicListElement.dynamicElement(templateToUse)) - .build()) - .build(); - judgeOrderDownloadGenerator.getDownloadTemplate(caseData, "auth"); + if (templateToUse.equals(BLANK_TEMPLATE_TO_BE_USED_AFTER_A_HEARING)) { + CaseData caseData = CaseDataBuilder.builder().atStateNotificationAcknowledged().build().toBuilder() + .finalOrderDownloadTemplateOptions(DynamicList.builder() + .value(DynamicListElement.dynamicElement(templateToUse)) + .build()) + .orderAfterHearingDate(OrderAfterHearingDate.builder() + .dateType(OrderAfterHearingDateType.BESPOKE_RANGE) + .bespokeDates("12-01-2025, 14-12-2024 to 19-12-2024") + .build()) + .build(); + judgeOrderDownloadGenerator.getDownloadTemplate(caseData, "auth"); + } else { + CaseData caseData = CaseDataBuilder.builder().atStateNotificationAcknowledged().build().toBuilder() + .finalOrderDownloadTemplateOptions(DynamicList.builder() + .value(DynamicListElement.dynamicElement(templateToUse)) + .build()) + .build(); + judgeOrderDownloadGenerator.getDownloadTemplate(caseData, "auth"); + } switch (templateToUse) { case BLANK_TEMPLATE_TO_BE_USED_AFTER_A_HEARING: @@ -319,6 +334,10 @@ void shouldGenerateBlankTemplateAfterHearing_whenOptionSelected() { .value(DynamicListElement .dynamicElement("Blank template to be used after a hearing")) .build()) + .orderAfterHearingDate(OrderAfterHearingDate.builder() + .dateType(OrderAfterHearingDateType.BESPOKE_RANGE) + .bespokeDates("12-01-2025, 14-12-2024 to 19-12-2024") + .build()) .caseManagementLocation(caseManagementLocation) .build(); CaseDocument caseDocument = judgeOrderDownloadGenerator.generate(caseData, BEARER_TOKEN);