Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@
import javax.inject.Inject;
import javax.json.JsonObject;

import java.time.ZoneId;

import static uk.gov.justice.hearing.courts.HearingResulted.hearingResulted;
import static uk.gov.justice.services.core.enveloper.Enveloper.envelop;
import static uk.gov.moj.cpp.sjp.event.processor.results.converter.judicialresult.JCaseResultsConstants.DATE_FORMAT;
Expand All @@ -37,6 +39,7 @@ public class CaseListedProcessor {
private static final String PUBLIC_EVENTS_HEARING_RESULTED = "public.events.hearing.hearing-resulted";

public static final String SJP_COMMAND_SAVE_APPLICATION_OFFENCES_RESULTS = "sjp.command.save-application-offences-results";
private static final String LONDON_ZONE_ID = "Europe/London";

@Handles(CaseListedInCriminalCourtsV2.EVENT_NAME)
public void handleCaseListedInCCReferToCourt(final JsonEnvelope caseListedInCcForReferToCourtEnvelope) {
Expand All @@ -47,9 +50,10 @@ public void handleCaseListedInCCReferToCourt(final JsonEnvelope caseListedInCcFo
LOGGER.info("Received CaseListedInCcForReferToCourt for caseId {}", caseId);

final PublicHearingResulted publicHearingResulted = sjpToHearingConverter.convertCaseDecisionInCcForReferToCourt(caseListedInCcForReferToCourtEnvelope);
ZoneId zoneId = ZoneId.of(LONDON_ZONE_ID);
final Envelope<HearingResulted> publicHearingResultedEnvelope = envelop(hearingResulted()
.withHearing(publicHearingResulted.getHearing())
.withHearingDay(publicHearingResulted.getSharedTime().format(DATE_FORMAT))
.withHearingDay(publicHearingResulted.getSharedTime().withZoneSameInstant(zoneId).format(DATE_FORMAT))
.withSharedTime(publicHearingResulted.getSharedTime())
.withIsReshare(false)
.build())
Expand All @@ -60,7 +64,7 @@ public void handleCaseListedInCCReferToCourt(final JsonEnvelope caseListedInCcFo
final Envelope<HearingResulted> hearingResultedEnvelope = envelop(HearingResulted
.hearingResulted()
.withHearing(publicHearingResulted.getHearing())
.withHearingDay(publicHearingResulted.getSharedTime().format(DATE_FORMAT))
.withHearingDay(publicHearingResulted.getSharedTime().withZoneSameInstant(zoneId).format(DATE_FORMAT))
.withSharedTime(publicHearingResulted.getSharedTime())
.withIsReshare(false)
.build())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,49 @@ public void handleCaseListedInCC_shouldInitiatePublicHearingResultedEvent() {
.withName(PUBLIC_EVENTS_HEARING_RESULTED));
}

@Test
public void shouldHandleCaseListedInCCReferToCourtIfTheHearingDateInMidNight() {
final UUID caseId = randomUUID();

final JsonEnvelope privateEvent = createEnvelope(PRIVATE_CASE_LISTED_IN_REFER_TO_COURT_EVENT,
createObjectBuilder()
.add(CASE_ID, caseId.toString())
.add("courtCentre", createObjectBuilder()
.add("id", "cf73207f-3ced-488a-82a0-3fba79c2ce04")
.add("name", "Carmarthen Magistrates' Court")
.add("roomId", "d7020fe0-cd97-4ce0-84c2-fd00ff0bc48a")
.add("roomName", "JK2Y7hu0Tc")
.add("welshName", "${welshName}")
.add("welshRoomName", "hm60SAXokc")
.add("roomId", "d7020fe0-cd97-4ce0-84c2-fd00ff0bc48a"))
.add("hearingDays", populateCorrectedHearingDaysWithHearingDate())
.add("jurisdictionType", "MAGISTRATES")
.build());

when(sjpToHearingConverter.convertCaseDecisionInCcForReferToCourt(privateEvent)).thenReturn(publicHearingResultedPayload);
when(publicHearingResultedPayload.getSharedTime()).thenReturn(ZonedDateTime.parse("2026-06-30T23:55:03.166Z"));

caseListedProcessor.handleCaseListedInCCReferToCourt(privateEvent);

verify(sender, times(2)).send(jsonEnvelopeCaptor.capture());

final List<DefaultEnvelope> eventEnvelopes = jsonEnvelopeCaptor.getAllValues();
final Envelope<JsonValue> publicHearingResultedEvent = eventEnvelopes.get(0);

assertThat(publicHearingResultedEvent.metadata(),
withMetadataEnvelopedFrom(privateEvent)
.withName(PUBLIC_EVENTS_HEARING_RESULTED));
}

private JsonArray populateCorrectedHearingDaysWithHearingDate() {
return createArrayBuilder()
.add(createObjectBuilder()
.add("listedDurationMinutes", 1531791578)
.add("listingSequence", 810249414)
.add("sittingDay", "2026-06-30T23:55:03.166Z"))
.build();
}

private JsonArray populateCorrectedHearingDays() {
return createArrayBuilder()
.add(createObjectBuilder()
Expand Down
Loading