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
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@
<material.version>17.0.75</material.version>
<json-transformer.version>1.0.6</json-transformer.version>
<access.control.version>6.4.1</access.control.version>
<referencedata.version>17.104.136</referencedata.version>
<referencedata.version>17.104.137</referencedata.version>
<listing.version>17.104.3</listing.version>
<hearing.version>17.104.180</hearing.version>
<usersgroups.version>17.104.50</usersgroups.version>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,6 @@
},
"prosecutionCaseId": {
"$ref": "http://justice.gov.uk/domain/core/common/definitions.json#/definitions/uuid"
},
"isCivil": {
"description": "True if the related case is a civil case, false if criminal, absent if the related case cannot be resolved",
"type": "boolean"
}
},
"required": [
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
package uk.gov.moj.cpp.progression;

import static com.jayway.jsonpath.matchers.JsonPathMatchers.hasNoJsonPath;
import static com.jayway.jsonpath.matchers.JsonPathMatchers.withJsonPath;
import static java.util.Collections.emptyList;
import static java.util.UUID.randomUUID;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.notNullValue;
import static uk.gov.moj.cpp.progression.helper.PreAndPostConditionHelper.civilCaseInitiateCourtProceedings;
import static uk.gov.moj.cpp.progression.helper.PreAndPostConditionHelper.deleteRelatedReference;
import static uk.gov.moj.cpp.progression.helper.PreAndPostConditionHelper.generateUrn;
import static uk.gov.moj.cpp.progression.helper.PreAndPostConditionHelper.getCaseLsmInfoFor;
Expand All @@ -19,7 +17,6 @@
import static uk.gov.moj.cpp.progression.helper.PreAndPostConditionHelper.splitCase;
import static uk.gov.moj.cpp.progression.helper.PreAndPostConditionHelper.unlinkCases;
import static uk.gov.moj.cpp.progression.util.LSMCasesHelper.getLsmQueryMatchers;
import static uk.gov.moj.cpp.progression.util.ReferProsecutionCaseToCrownCourtHelper.getCivilProsecutionCaseMatchers;
import static uk.gov.moj.cpp.progression.util.ReferProsecutionCaseToCrownCourtHelper.getProsecutionCaseMatchers;

import uk.gov.justice.services.common.converter.StringToJsonObjectConverter;
Expand Down Expand Up @@ -149,11 +146,8 @@ void shouldRelatedReferenceUrnOnCaseCreation() {
initiateCourtProceedings(PROGRESSION_COMMAND_INITIATE_COURT_PROCEEDINGS_WITH_RELATED_URN_JSON, prosecutionCaseId_2, defendantId_2, randomUUID().toString(), materialIdActive, materialIdDeleted, referralReasonId, caseUrn_2, listedStartDateTime, earliestStartDateTime, defendantDOB, caseUrn_1);
pollProsecutionCasesProgressionFor(prosecutionCaseId_2, getProsecutionCaseMatchers(prosecutionCaseId_2, defendantId_2, emptyList()));

// caseUrn_1 is never ingested as a real case here, so its case type cannot be determined
List<Matcher> matchers = List.of(
withJsonPath("$.isCivil", is(false)),
withJsonPath("$.relatedReferenceList[0].prosecutionCaseId", is(prosecutionCaseId_2)),
hasNoJsonPath("$.relatedReferenceList[0].isCivil")
withJsonPath("$.relatedReferenceList[0].prosecutionCaseId", is(prosecutionCaseId_2))
);
Matcher[] relatedReferenceMatchers = matchers.toArray(new Matcher[0]);

Expand All @@ -166,52 +160,4 @@ void shouldRelatedReferenceUrnOnCaseCreation() {
deleteRelatedReference(prosecutionCaseId_2, relatedReferenceId);

}

@Test
void shouldReturnIsCivilFalseForBothPrimaryAndRelatedCaseWhenBothAreCriminal() throws IOException {

initiateCourtProceedings(INITIAL_COURT_PROCEEDINGS_WITH_MULTIPLE_DEFENDANTS, prosecutionCaseId_1, defendantId_1, randomUUID().toString(), materialIdActive, materialIdDeleted, referralReasonId, caseUrn_1, listedStartDateTime, earliestStartDateTime, defendantDOB);
pollProsecutionCasesProgressionFor(prosecutionCaseId_1, getProsecutionCaseMatchers(prosecutionCaseId_1, defendantId_1, emptyList()));

initiateCourtProceedings(PROGRESSION_COMMAND_INITIATE_COURT_PROCEEDINGS_WITH_RELATED_URN_JSON, prosecutionCaseId_2, defendantId_2, randomUUID().toString(), materialIdActive, materialIdDeleted, referralReasonId, caseUrn_2, listedStartDateTime, earliestStartDateTime, defendantDOB, caseUrn_1);
pollProsecutionCasesProgressionFor(prosecutionCaseId_2, getProsecutionCaseMatchers(prosecutionCaseId_2, defendantId_2, emptyList()));

List<Matcher> matchers = List.of(
withJsonPath("$.isCivil", is(false)),
withJsonPath("$.relatedReferenceList[0].prosecutionCaseId", is(prosecutionCaseId_2)),
withJsonPath("$.relatedReferenceList[0].isCivil", is(false))
);

JsonObject responseAsJson = new StringToJsonObjectConverter().convert(getRelatedReference(prosecutionCaseId_2, matchers.toArray(new Matcher[0])));
final String relatedReferenceId = responseAsJson.getJsonArray("relatedReferenceList").getJsonObject(0).getString("relatedReferenceId");

assertThat(responseAsJson.getBoolean("isCivil"), is(false));
assertThat(responseAsJson.getJsonArray("relatedReferenceList").getJsonObject(0).getBoolean("isCivil"), is(false));

deleteRelatedReference(prosecutionCaseId_2, relatedReferenceId);
}

@Test
void shouldReturnIsCivilTrueForRelatedCaseWhenPrimaryIsCriminalAndRelatedIsCivil() {

civilCaseInitiateCourtProceedings(prosecutionCaseId_1, defendantId_1, materialIdActive, materialIdDeleted, referralReasonId, caseUrn_1, listedStartDateTime, earliestStartDateTime, defendantDOB, randomUUID().toString());
pollProsecutionCasesProgressionFor(prosecutionCaseId_1, getCivilProsecutionCaseMatchers(prosecutionCaseId_1, defendantId_1, emptyList()));

initiateCourtProceedings(PROGRESSION_COMMAND_INITIATE_COURT_PROCEEDINGS_WITH_RELATED_URN_JSON, prosecutionCaseId_2, defendantId_2, randomUUID().toString(), materialIdActive, materialIdDeleted, referralReasonId, caseUrn_2, listedStartDateTime, earliestStartDateTime, defendantDOB, caseUrn_1);
pollProsecutionCasesProgressionFor(prosecutionCaseId_2, getProsecutionCaseMatchers(prosecutionCaseId_2, defendantId_2, emptyList()));

List<Matcher> matchers = List.of(
withJsonPath("$.isCivil", is(false)),
withJsonPath("$.relatedReferenceList[0].prosecutionCaseId", is(prosecutionCaseId_2)),
withJsonPath("$.relatedReferenceList[0].isCivil", is(true))
);

JsonObject responseAsJson = new StringToJsonObjectConverter().convert(getRelatedReference(prosecutionCaseId_2, matchers.toArray(new Matcher[0])));
final String relatedReferenceId = responseAsJson.getJsonArray("relatedReferenceList").getJsonObject(0).getString("relatedReferenceId");

assertThat(responseAsJson.getBoolean("isCivil"), is(false));
assertThat(responseAsJson.getJsonArray("relatedReferenceList").getJsonObject(0).getBoolean("isCivil"), is(true));

deleteRelatedReference(prosecutionCaseId_2, relatedReferenceId);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,7 @@ public void shouldVerifyRelatedCasesWhenAllCasesInActive() throws Exception {
withJsonPath("$.relatedCases[0].masterDefendantId", equalTo(masterDefendantId_1)),
withJsonPath("$.relatedCases[0].cases[0].caseId", equalTo(prosecutionCaseId_2)),
withJsonPath("$.relatedCases[0].cases[0].caseStatus", equalTo("ACTIVE")),
withJsonPath("$.relatedCases[0].cases[0].isCivil", equalTo(false)),
withJsonPath("$.relatedCases[0].cases[0].offences[0].offenceTitle", equalTo("ROBBERY")),
withJsonPath("$.relatedCases[0].cases[0].offences[0].maxPenalty", equalTo("Max Penalty"))
);
Expand All @@ -114,6 +115,7 @@ public void shouldVerifyRelatedCasesWhenAllCasesInActive() throws Exception {
withJsonPath("$.relatedCases[0].masterDefendantId", equalTo(masterDefendantId_1)),
withJsonPath("$.relatedCases[0].cases[0].caseId", equalTo(prosecutionCaseId_1)),
withJsonPath("$.relatedCases[0].cases[0].caseStatus", equalTo("ACTIVE")),
withJsonPath("$.relatedCases[0].cases[0].isCivil", equalTo(false)),
withJsonPath("$.relatedCases[0].cases[0].offences[0].offenceTitle", equalTo("ROBBERY"))
);

Expand All @@ -125,6 +127,7 @@ public void shouldVerifyRelatedCasesWhenAllCasesInActive() throws Exception {
withJsonPath("$.relatedCases[0].masterDefendantId", equalTo(masterDefendantId_1)),
withJsonPath("$.relatedCases[0].cases[0].caseId", equalTo(prosecutionCaseId_2)),
withJsonPath("$.relatedCases[0].cases[0].caseStatus", equalTo("INACTIVE")),
withJsonPath("$.relatedCases[0].cases[0].isCivil", equalTo(false)),
withJsonPath("$.relatedCases[0].cases[0].offences[0].offenceTitle", equalTo("ROBBERY"))
);

Expand All @@ -133,6 +136,7 @@ public void shouldVerifyRelatedCasesWhenAllCasesInActive() throws Exception {
withJsonPath("$.relatedCases[0].masterDefendantId", equalTo(masterDefendantId_1)),
withJsonPath("$.relatedCases[0].cases[0].caseId", equalTo(prosecutionCaseId_1)),
withJsonPath("$.relatedCases[0].cases[0].caseStatus", equalTo("INACTIVE")),
withJsonPath("$.relatedCases[0].cases[0].isCivil", equalTo(false)),
withJsonPath("$.relatedCases[0].cases[0].offences[0].offenceTitle", equalTo("ROBBERY"))
);
}
Expand Down Expand Up @@ -162,6 +166,44 @@ public void shouldVerifyRelatedCasesWhenCasesAreMix() throws IOException {
);
}

@Test
public void shouldReturnIsCivilTrueForBothPrimaryAndRelatedCaseWhenBothAreCivil() throws IOException {
verifyIsCivilOnMatchedDefendantCases(true, true);
}

@Test
public void shouldReturnIsCivilFalseForRelatedCaseWhenPrimaryIsCivilAndRelatedIsCriminal() throws IOException {
verifyIsCivilOnMatchedDefendantCases(true, false);
}

@Test
public void shouldReturnIsCivilTrueForRelatedCaseWhenPrimaryIsCriminalAndRelatedIsCivil() throws IOException {
verifyIsCivilOnMatchedDefendantCases(false, true);
}

private void verifyIsCivilOnMatchedDefendantCases(final boolean isCivilCase1, final boolean isCivilCase2) throws IOException {
initiateCourtProceedingsForDefendantMatching(prosecutionCaseId_1, defendantId_1_forMasterDefendantId_1, masterDefendantId_1, materialIdActive, materialIdDeleted, referralReasonId, listedStartDateTime, earliestStartDateTime, defendantDOB, isCivilCase1);
pollCaseAndGetHearingForDefendant(prosecutionCaseId_1, defendantId_1_forMasterDefendantId_1);

initiateCourtProceedingsForDefendantMatching(prosecutionCaseId_2, defendantId_2_forMasterDefendantId_1, defendantId_2_forMasterDefendantId_1, materialIdActive, materialIdDeleted, referralReasonId, listedStartDateTime, earliestStartDateTime, defendantDOB, isCivilCase2);
final Matcher<? super ReadContext>[] prosecutionCaseMatchers = getProsecutionCaseMatchers(prosecutionCaseId_2, defendantId_2_forMasterDefendantId_1, emptyList());
pollProsecutionCasesProgressionFor(prosecutionCaseId_2, prosecutionCaseMatchers);
// match defendantId_2_forMasterDefendantId_1 associated to case 2
matchDefendant(prosecutionCaseId_2, defendantId_2_forMasterDefendantId_1, prosecutionCaseId_1, defendantId_1_forMasterDefendantId_1, masterDefendantId_1);

pollProsecutionCasesProgressionFor(prosecutionCaseId_1,
withJsonPath("$.prosecutionCase.isCivil", equalTo(isCivilCase1)),
withJsonPath("$.relatedCases[0].cases[0].caseId", equalTo(prosecutionCaseId_2)),
withJsonPath("$.relatedCases[0].cases[0].isCivil", equalTo(isCivilCase2))
);

pollProsecutionCasesProgressionFor(prosecutionCaseId_2,
withJsonPath("$.prosecutionCase.isCivil", equalTo(isCivilCase2)),
withJsonPath("$.relatedCases[0].cases[0].caseId", equalTo(prosecutionCaseId_1)),
withJsonPath("$.relatedCases[0].cases[0].isCivil", equalTo(isCivilCase1))
);
}

private void closeTheCase(final String caseId, final String defendantId, final String hearingId) {

final JsonEnvelope publicEventEnvelope = envelopeFrom(buildMetadata(PUBLIC_HEARING_RESULTED, randomUUID()), getHearingWithSingleCaseJsonObject(PUBLIC_HEARING_RESULTED_CASE_UPDATED + ".json", caseId,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -313,6 +313,20 @@ public static Response initiateCourtProceedingsForDefendantMatching(final String

}

public static Response initiateCourtProceedingsForDefendantMatching(final String caseId,
final String defendantId,
final String masterDefendantId,
final String materialIdOne,
final String materialIdTwo,
final String referralId,
final String listedStartDateTime, final String earliestStartDateTime, final String dob,
final boolean isCivil) {
return postCommand(getWriteUrl("/initiatecourtproceedings"),
"application/vnd.progression.initiate-court-proceedings+json",
getInitiateCourtProceedingsJsonBodyForDefendantMatching(caseId, defendantId, masterDefendantId, materialIdOne, materialIdTwo, referralId, generateUrn(), listedStartDateTime, earliestStartDateTime, dob, isCivil));

}

public static Response initiateCourtProceedingsForLegalEntityDefendantMatching(final String caseId,
final String defendantId,
final String masterDefendantId,
Expand Down Expand Up @@ -375,17 +389,6 @@ public static Response civilCaseInitiateCourtProceedings(final String caseId, fi

}

public static Response civilCaseInitiateCourtProceedings(final String caseId, final String defendantId, final String materialIdOne,
final String materialIdTwo,
final String referralId, final String caseUrn,
final String listedStartDateTime, final String earliestStartDateTime, final String dob, final String feesId) {
return postCommand(getWriteUrl("/initiatecourtproceedings"),
"application/vnd.progression.initiate-court-proceedings+json",
getCivilCaseInitiateCourtProceedingsJsonFromResource("progression.command.civil-case-initiate-court-proceedings.json", caseId,
defendantId, materialIdOne, materialIdTwo, referralId, caseUrn, listedStartDateTime, earliestStartDateTime, dob, feesId, ""));

}

public static Response initiateCourtProceedingsForGroupCases(final UUID masterCaseId, final Map<UUID, Pair<UUID, UUID>> caseDefendantOffence, final String listedStartDateTime, final String earliestStartDateTime, final String groupId, final String courtCenterId, final String courtCenterName) throws JSONException {
final String payload = getInitiateCourtProceedingsForGroupCasesJsonBody(masterCaseId, caseDefendantOffence, listedStartDateTime, earliestStartDateTime, groupId, courtCenterId, courtCenterName);
return postCommand(getWriteUrl("/initiatecourtproceedings"),
Expand Down Expand Up @@ -860,7 +863,7 @@ private static String getInitiateCourtProceedingsJsonFromResourceForDefendantMat
final String materialIdOne, final String materialIdTwo,
final String referralId, final String caseUrn,
final String listedStartDateTime, final String earliestStartDateTime,
final String dob) {
final String dob, final boolean isCivil) {
String payload = getPayload(resourceLocation)
.replace("RANDOM_CASE_ID", caseId)
.replace("RANDOM_REFERENCE", caseUrn)
Expand All @@ -871,7 +874,8 @@ private static String getInitiateCourtProceedingsJsonFromResourceForDefendantMat
.replace("RANDOM_MATERIAL_ID_TWO", materialIdTwo)
.replace("RANDOM_REFERRAL_ID", referralId)
.replace("LISTED_START_DATE_TIME", listedStartDateTime)
.replace("EARLIEST_START_DATE_TIME", earliestStartDateTime);
.replace("EARLIEST_START_DATE_TIME", earliestStartDateTime)
.replace("IS_CIVIL_FLAG", String.valueOf(isCivil));

if (Objects.nonNull(dob)) {
payload = payload.replace("DOB", dob);
Expand Down Expand Up @@ -1050,8 +1054,16 @@ private static String getInitiateCourtProceedingsJsonBodyForDefendantMatching(fi
final String referralId, final String caseUrn,
final String listedStartDateTime, final String earliestStartDateTime,
final String dob) {
return getInitiateCourtProceedingsJsonBodyForDefendantMatching(caseId, defendantId, masterDefendantId, materialIdOne, materialIdTwo, referralId, caseUrn, listedStartDateTime, earliestStartDateTime, dob, false);
}

private static String getInitiateCourtProceedingsJsonBodyForDefendantMatching(final String caseId, final String defendantId, final String masterDefendantId, final String materialIdOne,
final String materialIdTwo,
final String referralId, final String caseUrn,
final String listedStartDateTime, final String earliestStartDateTime,
final String dob, final boolean isCivil) {
return getInitiateCourtProceedingsJsonFromResourceForDefendantMatching("progression.command.initiate-court-proceedings-for-defendant-matching.json", caseId,
defendantId, masterDefendantId, materialIdOne, materialIdTwo, referralId, caseUrn, listedStartDateTime, earliestStartDateTime, dob);
defendantId, masterDefendantId, materialIdOne, materialIdTwo, referralId, caseUrn, listedStartDateTime, earliestStartDateTime, dob, isCivil);

}

Expand All @@ -1060,7 +1072,7 @@ private static String getInitiateCourtProceedingsJsonBodyForLegalEntityDefendant
final String referralId, final String caseUrn,
final String listedStartDateTime, final String earliestStartDateTime) {
return getInitiateCourtProceedingsJsonFromResourceForDefendantMatching("progression.command.initiate-court-proceedings-for-defendant-matching-legal-entity.json", caseId,
defendantId, masterDefendantId, materialIdOne, materialIdTwo, referralId, caseUrn, listedStartDateTime, earliestStartDateTime, null);
defendantId, masterDefendantId, materialIdOne, materialIdTwo, referralId, caseUrn, listedStartDateTime, earliestStartDateTime, null, false);

}

Expand Down
Loading
Loading