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 @@ -149,6 +149,7 @@ public class ResultsEventProcessor {
private static final String NOTIFICATION_ID = "notificationId";
private static final String EMAIL_TEMPLATE_ID = "emailTemplateId";
private static final String SEND_TO_ADDRESS = "sendToAddress";
private static final String BAIL_CONDITIONS_CANCELLED= "Bail Conditions Cancelled";
public static final String HEARING_DAY = "hearingDay";
public static final String PUBLIC_RESULTS_POLICE_RESULT_GENERATED = "public.results.police-result-generated";

Expand Down Expand Up @@ -729,13 +730,14 @@ protected String getCaseSubject(final List<CaseDefendant> caseDefendants) {
.filter(judicialResult -> {
String policeSubjectLineTitle = judicialResult.getPoliceSubjectLineTitle();
String resultText = judicialResult.getResultText();
return !(policeSubjectLineTitle != null && policeSubjectLineTitle.equals("Bail Conditions Cancelled")
&& (resultText != null && (resultText.contains("Domestic Violence case") || resultText.contains("Vulnerable or Intimidated Victim"))));
return !(policeSubjectLineTitle != null && policeSubjectLineTitle.equals(BAIL_CONDITIONS_CANCELLED)
&& (resultText != null && !resultText.toLowerCase().contains(BAIL_CONDITIONS_CANCELLED.toLowerCase())));
})
.map(JudicialResult::getPoliceSubjectLineTitle)
.filter(StringUtils::isNotEmpty)
.distinct()
.collect(Collectors.joining(DELIMITER));

return caseSubject.isEmpty() ? "" : caseSubject;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,14 +82,14 @@
import uk.gov.moj.cpp.results.event.service.DocumentGeneratorService;
import uk.gov.moj.cpp.results.event.service.EmailNotification;
import uk.gov.moj.cpp.results.event.service.EventGridService;
import uk.gov.moj.cpp.results.event.service.FileService;
import uk.gov.moj.cpp.results.event.service.FileParams;
import uk.gov.moj.cpp.results.event.service.FileService;
import uk.gov.moj.cpp.results.event.service.NotificationNotifyService;
import uk.gov.moj.cpp.results.event.service.ProgressionService;
import uk.gov.moj.cpp.results.event.service.ReferenceDataService;
import uk.gov.moj.cpp.results.event.service.SjpService;
import uk.gov.moj.cpp.results.event.service.SystemDocGenerator;
import uk.gov.moj.cpp.results.test.TestTemplates;
import uk.gov.moj.cpp.results.event.service.SjpService;

import java.io.StringReader;
import java.nio.charset.Charset;
Expand Down Expand Up @@ -917,7 +917,7 @@ public void shouldIncludePoliceSubjectLineTitleWhenTitleIsBCC() {
ArgumentCaptor<DocumentGenerationRequest> documentGenerationRequestArgumentCaptor = ArgumentCaptor.forClass(DocumentGenerationRequest.class);
ArgumentCaptor<JsonObject> fileJsonObjectArgumentCaptor = ArgumentCaptor.forClass(JsonObject.class);
final List<String> policeSubjectLineTitle = asList("Bail Conditions Cancelled", null);
final List<String> resultText = asList("Remanded on conditional bail.", null);
final List<String> resultText = asList("URGENT - Urgent\nUrgent result: Bail Conditions cancelled.", null);

final List<CaseDefendant> caseDefendants = getDefendantsWithJudicialResults(policeSubjectLineTitle, resultText);

Expand Down Expand Up @@ -1012,6 +1012,124 @@ public void shouldIncludePoliceSubjectLineTitleWhenResultTextIsBCCAnd() {

}

@Test
public void shouldShowBailConditionsCancelledINSubjectWhenResultTextContainsBCCAndDomesticViolenceCase() {
final String policeEmail = "MO10Mailbox-.CommonPlatform@met.police.uk";
final String urn = "01ZD1205724";
final String caseId = "10158815-bef7-47ae-9e86-f3f53917a805";
final String courtCentre = "Croydon Crown Court";
final String dateOfHearing = "2026-06-10";
final String dvResultText = "URGENT - Urgent\nUrgent result: Bail Conditions cancelled, Domestic Violence case.";

// Offence 1 judicial results
JudicialResult discharged1 = JudicialResult.judicialResult()
.withJudicialResultId(fromString("f7080f37-ce1a-48c1-aec8-93454346b025"))
.withIsNewAmendment(true)
.withPoliceSubjectLineTitle("Final Sentence")
.withResultText("DISCH - Discharged")
.build();
JudicialResult emEnd1 = JudicialResult.judicialResult()
.withJudicialResultId(fromString("cb3b792d-90d9-4714-8ec8-62040f5fd3d9"))
.withIsNewAmendment(true)
.withResultText("EMONE - Electronic Monitoring End - notify contractor")
.build();
JudicialResult bccDv1 = JudicialResult.judicialResult()
.withJudicialResultId(fromString("c5971d29-5701-4e67-bfad-ec1b51715dbe"))
.withIsNewAmendment(true)
.withPoliceSubjectLineTitle("Bail Conditions Cancelled")
.withResultText(dvResultText)
.build();

// Offence 2 judicial results
JudicialResult discharged2 = JudicialResult.judicialResult()
.withJudicialResultId(fromString("681fad0e-6057-4c21-86c1-7105bb70c5a0"))
.withIsNewAmendment(true)
.withPoliceSubjectLineTitle("Final Sentence")
.withResultText("DISCH - Discharged")
.build();
JudicialResult emEnd2 = JudicialResult.judicialResult()
.withJudicialResultId(fromString("8b4cb167-f3b9-4502-a68e-30b9473b0ddd"))
.withIsNewAmendment(true)
.withResultText("EMONE - Electronic Monitoring End - notify contractor")
.build();
JudicialResult bccDv2 = JudicialResult.judicialResult()
.withJudicialResultId(fromString("e7d946f8-4b06-431b-a318-2247f42d0b7b"))
.withIsNewAmendment(true)
.withPoliceSubjectLineTitle("Bail Conditions Cancelled")
.withResultText(dvResultText)
.build();

// Offence 3 judicial results
JudicialResult emEnd3 = JudicialResult.judicialResult()
.withJudicialResultId(fromString("b6f6eab8-126f-4315-83cb-1b892842484a"))
.withIsNewAmendment(true)
.withResultText("EMONE - Electronic Monitoring End - notify contractor")
.build();
JudicialResult oni = JudicialResult.judicialResult()
.withJudicialResultId(fromString("c055456e-ed77-4af5-ae6f-42e324ed8513"))
.withIsNewAmendment(true)
.withResultText("ONI - Offence not on indictment")
.build();
JudicialResult bccDv3 = JudicialResult.judicialResult()
.withJudicialResultId(fromString("7c2d37de-8e7e-4166-9631-884a63ce6ae9"))
.withIsNewAmendment(true)
.withPoliceSubjectLineTitle("Bail Conditions Cancelled")
.withResultText(dvResultText)
.build();

final CaseDefendant natalieGall = caseDefendant()
.withDefendantId(fromString("ba55ed01-9ae5-4397-bdf3-da1e6a0b7c89"))
.withProsecutorReference("2400000000000486216U")
.withOffences(asList(
OffenceDetails.offenceDetails()
.withJudicialResults(asList(discharged1, emEnd1, bccDv1))
.build(),
OffenceDetails.offenceDetails()
.withJudicialResults(asList(discharged2, emEnd2, bccDv2))
.build(),
OffenceDetails.offenceDetails()
.withJudicialResults(asList(emEnd3, oni, bccDv3))
.build()
))
.withIndividualDefendant(individualDefendant()
.withPerson(createPerson("Billal", "Ahemad", Gender.FEMALE, null, "Miss", null, null))
.build())
.build();

final PoliceNotificationRequestedV2 event = PoliceNotificationRequestedV2.policeNotificationRequestedV2()
.withNotificationId(randomUUID())
.withCaseId(caseId)
.withPoliceEmailAddress(policeEmail)
.withAmendReshare("")
.withDateOfHearing(dateOfHearing)
.withUrn(urn)
.withCaseDefendants(asList(natalieGall))
.withApplicationTypeForCase("")
.withCourtCentre(courtCentre)
.withCaseResultDetails(null)
.build();

final JsonEnvelope jsonEnvelope = envelopeFrom(
Envelope.metadataBuilder().withId(randomUUID()).withName("results.event.police-notification-requested-v2").build(),
objectToJsonObjectConverter.convert(event));

when(applicationParameters.getCommonPlatformUrl()).thenReturn(COMMON_PLATFORM_URL);
when(applicationParameters.getEmailTemplateId()).thenReturn(POLICE_EMAIL_HEARING_RESULTS_TEMPLATE_ID);
when(applicationParameters.getPoliceEmailHearingResultsTemplateId()).thenReturn(POLICE_EMAIL_HEARING_RESULTS_TEMPLATE_ID);

resultsEventProcessor.handlePoliceNotificationRequestedV2(jsonEnvelope);

verify(notificationNotifyService, times(1)).sendEmailNotification(eq(jsonEnvelope), jsonObjectArgumentCaptor.capture());
verify(systemDocGenerator, times(0)).generateDocument(any(), any());

final JsonObject payload = jsonObjectArgumentCaptor.getValue();
assertThat(payload.getString(FIELD_SEND_TO_ADDRESS), is(policeEmail));
assertThat(payload.getJsonObject(FIELD_PERSONALISATION).getString(FIELD_URN), is(urn));
assertThat(payload.getJsonObject(FIELD_PERSONALISATION).getString(FIELD_AMEND_RESHARE), is("no"));
assertThat(payload.getJsonObject(FIELD_PERSONALISATION).getString(FIELD_DEFENDANTS), is("Billal Ahemad"));
assertThat(payload.getJsonObject(FIELD_PERSONALISATION).getString(FILED_SUBJECT), is("01ZD1205724 10-06-2026 Final Sentence / Bail Conditions Cancelled"));
}

@Test
public void shouldSendAppealUpdateNotification() {
final UUID notificationId = randomUUID();
Expand Down
Loading