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 @@ -12,6 +12,7 @@
import uk.gov.justice.core.courts.ProsecutionCase;
import uk.gov.justice.core.courts.ProsecutionCaseIdentifier;
import uk.gov.justice.core.courts.ReplayDefendantsAddedToCourtProceedings;
import uk.gov.justice.progression.courts.ConfirmHearingRequest;
import uk.gov.justice.services.core.aggregate.AggregateService;
import uk.gov.justice.services.core.annotation.Component;
import uk.gov.justice.services.core.annotation.Handles;
Expand All @@ -31,6 +32,7 @@
import javax.json.JsonValue;
import java.util.List;
import java.util.Optional;
import java.util.UUID;
import java.util.stream.Collectors;
import java.util.stream.Stream;

Expand Down Expand Up @@ -93,11 +95,23 @@ public void handleReplay(final Envelope<ReplayDefendantsAddedToCourtProceedings>
final Stream<Object> events = caseAggregate.replayDefendantsAddedToCourtProceedings(
replayAddDefendantEnvelope.payload().getDefendants(),
replayAddDefendantEnvelope.payload().getListHearingRequests(),
replayAddDefendantEnvelope.payload().getHearingRequestDetails(),
replayAddDefendantEnvelope.payload().getInterval());

appendEventsToStream(replayAddDefendantEnvelope, eventStream, events);
}


@Handles("progression.command.confirm-hearing-request")
public void handleHearingStatusUpdate(final Envelope<ConfirmHearingRequest> request) throws EventStreamException {
final UUID caseId = request.payload().getProsecutionCaseId();
final EventStream eventStream = eventSource.getStreamById(caseId);
final CaseAggregate caseAggregate = aggregateService.get(eventStream, CaseAggregate.class);
final Stream<Object> events = caseAggregate.confirmHearingRequestSentForListing(request.payload().getHearingRequestDetails());

appendEventsToStream(request, eventStream, events);
}

private static Optional<String> getSowRef(final ProsecutionCase prosecutionCase) {
boolean isCivil = nonNull(prosecutionCase.getIsCivil()) && prosecutionCase.getIsCivil();
return isCivil ? Optional.of(SOW_REF_VALUE) : Optional.empty();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ public void handle(final Envelope<HearingResultedUpdateCase> hearingResultedUpda

final Stream<Object> events = caseAggregate.updateCase(hearingUpdate.getProsecutionCase(),
defendantJudicialResults, hearingUpdate.getCourtCentre(),
hearingUpdate.getHearingId(), hearingUpdate.getHearingType(),
hearingUpdate.getHearingId(), hearingUpdate.getHearingDays(), hearingUpdate.getHearingType(),
hearingUpdate.getJurisdictionType(), hearingUpdate.getIsBoxHearing(), hearingUpdate.getRemitResultIds());

appendEventsToStream(hearingResultedUpdateCaseEnvelope, eventStream, events);
Expand All @@ -79,7 +79,7 @@ public void handle(final Envelope<HearingResultedUpdateCase> hearingResultedUpda
.build();
final Stream<Object> memberCaseEvent = memberCaseAggregate.updateCase(memberCase,
isNotEmpty(hearingUpdate.getDefendantJudicialResults()) ? hearingUpdate.getDefendantJudicialResults() : Collections.emptyList(),
hearingUpdate.getCourtCentre(), hearingUpdate.getHearingId(), hearingUpdate.getHearingType(),
hearingUpdate.getCourtCentre(), hearingUpdate.getHearingId(), hearingUpdate.getHearingDays(), hearingUpdate.getHearingType(),
hearingUpdate.getJurisdictionType(), hearingUpdate.getIsBoxHearing(), hearingUpdate.getRemitResultIds()
);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import static org.apache.commons.collections.CollectionUtils.isNotEmpty;
import static java.util.Objects.nonNull;

import java.time.ZonedDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
Expand Down Expand Up @@ -60,9 +61,25 @@ public void handle(final Envelope<UpdateDefendantListingStatusV2> updateDefendan
} else {
events = hearingAggregate.updateDefendantListingStatus(updateDefendantListingStatus.getHearing(), updateDefendantListingStatus.getHearingListingStatus(), updateDefendantListingStatus.getNotifyNCES(), updateDefendantListingStatus.getListHearingRequests());
}

updateCase(updateDefendantListingStatusEnvelope, updateDefendantListingStatus.getHearing());

appendEventsToStream(updateDefendantListingStatusEnvelope, eventStream, events);
}

private void updateCase(final Envelope<?> envelope, final Hearing hearing) throws EventStreamException {
if (isNotEmpty(hearing.getProsecutionCases())) {
for (ProsecutionCase pc : hearing.getProsecutionCases()) {
final EventStream eventStream = eventSource.getStreamById(pc.getId());
final CaseAggregate caseAggregate = aggregateService.get(eventStream, CaseAggregate.class);

final Stream<Object> caseEvents = caseAggregate.updateDefendantListingStatus(hearing.getId(), hearing.getCourtCentre().getId(), hearing.getHearingDays());

appendEventsToStream(envelope, eventStream, caseEvents);
}
}
}

private UpdateDefendantListingStatusV2 getUpdateDefendantListingStatusWithMemberCases(final ProsecutionCase groupMasterProsecutionCase, final UpdateDefendantListingStatusV2 updateDefendantListingStatus) {
final EventStream stream = eventSource.getStreamById(groupMasterProsecutionCase.getGroupId());
final GroupCaseAggregate groupCaseAggregate = aggregateService.get(stream, GroupCaseAggregate.class);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"prosecutionCaseId": "f1c7ab7e-22db-4d18-a865-23cb495ec435",
"hearingRequestDetails": [
{
"hearingId":"f1c7ab7e-22db-4d18-a865-23cb495ec435",
"courtCentreId": "f1c7ab7e-22db-4d18-a865-23cb495ec435",
"hearingDateTime": "0000-01-01",
"hearingRequestStatus": "NEW"
}
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
{
"$schema" : "http://json-schema.org/draft-04/schema#",
"id" : "http://justice.gov.uk/progression/courts/confirm-hearing-request.json",
"type" : "object",
"properties" : {
"prosecutionCaseId" : {
"$ref": "http://justice.gov.uk/domain/core/common/definitions.json#/definitions/uuid"
},
"hearingRequestDetails" : {
"type" : "array",
"minItems" : 1,
"items" : {
"$ref" : "http://justice.gov.uk/core/courts/hearing-request-detail.json"
}
}
},
"required" : [
"prosecutionCaseId",
"hearingRequestDetails"
],
"additionalProperties" : false
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,13 @@
"hearingId": {
"$ref": "http://justice.gov.uk/core/courts/courtsDefinitions.json#/definitions/uuid"
},
"hearingDays": {
"type": "array",
"minItems": 1,
"items": {
"$ref": "http://justice.gov.uk/core/courts/hearingDay.json"
}
},
"hearingType": {
"type": "string"
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,13 @@
"$ref" : "http://justice.gov.uk/core/courts/listHearingRequest.json#"
}
},
"hearingRequestDetails" : {
"type" : "array",
"minItems" : 1,
"items" : {
"$ref" : "http://justice.gov.uk/core/courts/hearing-request-detail.json"
}
},
"interval" : {
"type" : "integer"
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,9 @@ baseUri: message://command/handler/message/progression
application/vnd.progression.command.create-defendant-request+json:
example: !include json/progression.command.create-defendant-request.json
schema: !include json/schema/progression.command.create-defendant-request.json
application/vnd.progression.command.confirm-hearing-request+json:
example: !include json/progression.command.confirm-hearing-request.json
schema: !include json/schema/progression.command.confirm-hearing-request.json
application/vnd.progression.command.create-hearing-defendant-request+json:
example: !include json/progression.command.create-hearing-defendant-request.json
schema: !include json/schema/progression.command.create-hearing-defendant-request.json
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import static uk.gov.justice.services.test.utils.core.matchers.JsonEnvelopePayloadMatcher.payload;
import static uk.gov.justice.services.test.utils.core.matchers.JsonEnvelopeStreamMatcher.streamContaining;

import uk.gov.justice.core.courts.CourtCentre;
import uk.gov.justice.core.courts.Hearing;
import uk.gov.justice.core.courts.HearingType;
import uk.gov.justice.core.courts.ProsecutionCase;
Expand Down Expand Up @@ -80,6 +81,9 @@ public class UpdateDefendantListingStatusHandlerTest {
@Mock
private EventStream eventStream;

@Mock
private EventStream caseEventStream;

@Mock
private AggregateService aggregateService;

Expand Down Expand Up @@ -121,9 +125,12 @@ public void shouldHandleProcessUpdateDefendantListingStatus() throws EventStream
.withId(randomUUID())
.build();
final UpdateDefendantListingStatusV2 updateDefendantListingStatus = getUpdateDefendantListingStatus();
final UUID caseId = updateDefendantListingStatus.getHearing().getProsecutionCases().get(0).getId();
final Envelope<UpdateDefendantListingStatusV2> envelope = envelopeFrom(metadata, updateDefendantListingStatus);
when(eventSource.getStreamById(any())).thenReturn(eventStream);
when(eventSource.getStreamById(caseId)).thenReturn(caseEventStream);
when(aggregateService.get(eventStream, HearingAggregate.class)).thenReturn(hearingAggregate);
when(aggregateService.get(caseEventStream, CaseAggregate.class)).thenReturn(caseAggregate);
handler.handle(envelope);

final Stream<JsonEnvelope> envelopeStream = verifyAppendAndGetArgumentFrom(eventStream);
Expand Down Expand Up @@ -152,12 +159,15 @@ public void shouldHandleProcessUpdateDefendantListingStatusForGroupCases() throw
.withId(randomUUID())
.build();
final UpdateDefendantListingStatusV2 updateDefendantListingStatus = getUpdateDefendantListingStatusWithGroupMasterCase();
final UUID caseId = updateDefendantListingStatus.getHearing().getProsecutionCases().get(0).getId();
final Envelope<UpdateDefendantListingStatusV2> envelope = envelopeFrom(metadata, updateDefendantListingStatus);
when(eventSource.getStreamById(any())).thenReturn(eventStream);
when(eventSource.getStreamById(caseId)).thenReturn(caseEventStream);
when(groupCaseAggregate.getMemberCases()).thenReturn(memberCases);
when(aggregateService.get(eventStream, HearingAggregate.class)).thenReturn(hearingAggregate);
when(aggregateService.get(eventStream, GroupCaseAggregate.class)).thenReturn(groupCaseAggregate);
when(aggregateService.get(eventStream, CaseAggregate.class)).thenReturn(caseAggregate);
when(aggregateService.get(caseEventStream, CaseAggregate.class)).thenReturn(caseAggregate);
when(caseAggregate.getProsecutionCase()).thenReturn(ProsecutionCase.prosecutionCase()
.withId(MEMBER_CASE_ID)
.withIsGroupMaster(false)
Expand Down Expand Up @@ -189,6 +199,7 @@ private UpdateDefendantListingStatusV2 getUpdateDefendantListingStatusWithGroupM
return UpdateDefendantListingStatusV2.updateDefendantListingStatusV2()
.withHearing(Hearing.hearing()
.withId(HEARING_ID).withIsGroupProceedings(true)
.withCourtCentre(CourtCentre.courtCentre().withId(randomUUID()).build())
.withType(HearingType.hearingType().withDescription(HEARING_TYPE).build())
.withProsecutionCases(Arrays.asList(ProsecutionCase.prosecutionCase()
.withId(MASTER_CASE_ID)
Expand All @@ -204,6 +215,7 @@ private UpdateDefendantListingStatusV2 getUpdateDefendantListingStatus() {
return UpdateDefendantListingStatusV2.updateDefendantListingStatusV2()
.withHearing(Hearing.hearing()
.withId(HEARING_ID).withIsGroupProceedings(false)
.withCourtCentre(CourtCentre.courtCentre().withId(randomUUID()).build())
.withType(HearingType.hearingType().withDescription(HEARING_TYPE).build())
.withProsecutionCases(Arrays.asList(ProsecutionCase.prosecutionCase().withId(MASTER_CASE_ID)
.build())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@
import uk.gov.justice.core.courts.CourtCentre;
import uk.gov.justice.core.courts.Defendant;
import uk.gov.justice.core.courts.DefendantsAddedToCourtProceedings;
import uk.gov.justice.core.courts.HearingRequestDetail;
import uk.gov.justice.core.courts.HearingRequestStatusUpdated;
import uk.gov.justice.core.courts.HearingType;
import uk.gov.justice.core.courts.JurisdictionType;
import uk.gov.justice.core.courts.ListDefendantRequest;
Expand All @@ -39,6 +41,8 @@
import uk.gov.justice.core.courts.ReferralReason;
import uk.gov.justice.core.courts.ReplayDefendantsAddedToCourtProceedings;
import uk.gov.justice.core.courts.ReplayedDefendantsAddedToCourtProceedings;
import uk.gov.justice.progression.courts.ConfirmHearingRequest;
import uk.gov.moj.cpp.progression.enums.HearingRequestStatus;
import uk.gov.justice.services.core.aggregate.AggregateService;
import uk.gov.justice.services.core.enveloper.Enveloper;
import uk.gov.justice.services.core.requester.Requester;
Expand Down Expand Up @@ -96,7 +100,7 @@ public class AddDefendantsToCourtProceedingsHandlerTest {
private Requester requester;

@Spy
private Enveloper enveloper = EnveloperFactory.createEnveloperWithEvents(DefendantsAddedToCourtProceedings.class, ReplayedDefendantsAddedToCourtProceedings.class);
private Enveloper enveloper = EnveloperFactory.createEnveloperWithEvents(DefendantsAddedToCourtProceedings.class, ReplayedDefendantsAddedToCourtProceedings.class, HearingRequestStatusUpdated.class);

@InjectMocks
private AddDefendantsToCourtProceedingsHandler addDefendantsToCourtProceedingsHandler;
Expand Down Expand Up @@ -239,6 +243,61 @@ void shouldHandleReplay() throws EventStreamException {

}

@Test
void shouldHandleConfirmHearingRequest() throws EventStreamException {

final UUID caseId = UUID.randomUUID();
final UUID hearingId = UUID.randomUUID();
final UUID courtCentreId = UUID.randomUUID();
final ZonedDateTime hearingDateTime = ZonedDateTime.now().plusWeeks(2);

final HearingRequestDetail detail = HearingRequestDetail.hearingRequestDetail()
.withHearingId(hearingId)
.withCourtCentreId(courtCentreId)
.withHearingDateTime(hearingDateTime)
.withHearingRequestStatus(HearingRequestStatus.CONFIRMED)
.build();

final ConfirmHearingRequest confirmHearingRequest = ConfirmHearingRequest.confirmHearingRequest()
.withProsecutionCaseId(caseId)
.withHearingRequestDetails(singletonList(detail))
.build();

final Metadata metadata = Envelope.metadataBuilder()
.withName("progression.command.confirm-hearing-request")
.withId(UUID.randomUUID())
.build();

final CaseAggregate caseAggregate = new CaseAggregate();
when(eventSource.getStreamById(caseId)).thenReturn(eventStream);
when(aggregateService.get(eventStream, CaseAggregate.class)).thenReturn(caseAggregate);

caseAggregate.apply(new ProsecutionCaseCreated(getProsecutionCase(), null));

final Envelope<ConfirmHearingRequest> envelope = envelopeFrom(metadata, confirmHearingRequest);
addDefendantsToCourtProceedingsHandler.handleHearingStatusUpdate(envelope);

final Stream<JsonEnvelope> envelopeStream = verifyAppendAndGetArgumentFrom(eventStream);

assertThat(envelopeStream, streamContaining(
jsonEnvelope(
metadata().withName("progression.event.hearing-request-status-updated"),
JsonEnvelopePayloadMatcher.payload().isJson(allOf(
withJsonPath("$.hearingId", equalTo(hearingId.toString())),
withJsonPath("$.courtCentreId", equalTo(courtCentreId.toString()))
))
)
));
}

@Test
public void shouldHandleCommandAnnotation() {
assertThat(new AddDefendantsToCourtProceedingsHandler(), isHandler(COMMAND_HANDLER)
.with(method("handleHearingStatusUpdate")
.thatHandles("progression.command.confirm-hearing-request")
));
}

private ProsecutionCase getProsecutionCase() {
final List<Defendant> defendants = new ArrayList<>();
defendants.add(Defendant.defendant().withOffences(singletonList(Offence.offence().build())).build());
Expand Down
Loading
Loading