From ca14566fe17de508072e0db7dcd3b9e75c2d9206 Mon Sep 17 00:00:00 2001 From: yashpalnegi Date: Wed, 15 Jul 2026 14:23:52 +0100 Subject: [PATCH 1/2] LPT-2348 - Change SJP to POST payload to new SJP publishing endpoint --- .../PressTransparencyReportRequested.java | 51 -------- .../TransparencyReportRequested.java | 57 --------- ...sTransparencyReportRequestedProcessor.java | 54 +++------ .../TransparencyReportRequestedProcessor.java | 105 +++------------- .../service/ApplicationParameters.java | 11 +- .../service/CourtListPublishingService.java | 31 +++++ ...nsparencyReportRequestedProcessorTest.java | 97 +++------------ ...nsparencyReportRequestedProcessorTest.java | 105 ++-------------- ...p.pending-cases-public-list-generated.json | 82 ------------- ...p.press-transparency-report-generated.json | 114 ------------------ ....events.transparency-report-requested.json | 18 --- ....events.transparency-report-requested.json | 4 - .../yaml/public-publications-descriptor.yaml | 6 - .../src/yaml/subscriptions-descriptor.yaml | 6 - .../stub/CourtListPublishingServiceStub.java | 51 ++++++++ .../it/test/PressTransparencyReportIT.java | 25 ++-- .../moj/sjp/it/test/TransparencyReportIT.java | 23 ++-- 17 files changed, 179 insertions(+), 661 deletions(-) delete mode 100644 sjp-domain/sjp-domain-event/src/main/java/uk/gov/moj/cpp/sjp/event/transparency/PressTransparencyReportRequested.java delete mode 100644 sjp-domain/sjp-domain-event/src/main/java/uk/gov/moj/cpp/sjp/event/transparency/TransparencyReportRequested.java create mode 100644 sjp-event/sjp-event-processor/src/main/java/uk/gov/moj/cpp/sjp/event/processor/service/CourtListPublishingService.java delete mode 100644 sjp-event/sjp-event-processor/src/yaml/json/schema/public.sjp.pending-cases-public-list-generated.json delete mode 100644 sjp-event/sjp-event-processor/src/yaml/json/schema/public.sjp.press-transparency-report-generated.json delete mode 100644 sjp-event/sjp-event-processor/src/yaml/json/schema/sjp.events.transparency-report-requested.json delete mode 100644 sjp-event/sjp-event-processor/src/yaml/json/sjp.events.transparency-report-requested.json create mode 100644 sjp-integration-test/src/test/java/uk/gov/moj/sjp/it/stub/CourtListPublishingServiceStub.java diff --git a/sjp-domain/sjp-domain-event/src/main/java/uk/gov/moj/cpp/sjp/event/transparency/PressTransparencyReportRequested.java b/sjp-domain/sjp-domain-event/src/main/java/uk/gov/moj/cpp/sjp/event/transparency/PressTransparencyReportRequested.java deleted file mode 100644 index 510abceabf..0000000000 --- a/sjp-domain/sjp-domain-event/src/main/java/uk/gov/moj/cpp/sjp/event/transparency/PressTransparencyReportRequested.java +++ /dev/null @@ -1,51 +0,0 @@ -package uk.gov.moj.cpp.sjp.event.transparency; - -import static java.util.UUID.randomUUID; - -import uk.gov.justice.domain.annotation.Event; - -import java.time.ZonedDateTime; -import java.util.UUID; - -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonProperty; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; - -/** - * Event to indicate that the generation of a press transparency report has requested. Use either the JSON or PDF report generation requested events instead. - * - * @deprecated - */ -@Deprecated(forRemoval = true) -@Event(PressTransparencyReportRequested.EVENT_NAME) -@SuppressWarnings("squid:S1133") -public class PressTransparencyReportRequested { - public static final String EVENT_NAME = "sjp.events.press-transparency-report-requested"; - - private UUID pressTransparencyReportId = randomUUID(); - private ZonedDateTime requestedAt; - - @JsonCreator - public PressTransparencyReportRequested( - @JsonProperty("pressTransparencyReportId") final UUID reportId, - @JsonProperty("requestedAt") final ZonedDateTime requestedAt) { - if (reportId != null) { - this.pressTransparencyReportId = reportId; - } - this.requestedAt = requestedAt; - } - - public UUID getPressTransparencyReportId() { - return pressTransparencyReportId; - } - - public ZonedDateTime getRequestedAt() { - return requestedAt; - } - - @Override - public String toString() { - return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE); - } -} diff --git a/sjp-domain/sjp-domain-event/src/main/java/uk/gov/moj/cpp/sjp/event/transparency/TransparencyReportRequested.java b/sjp-domain/sjp-domain-event/src/main/java/uk/gov/moj/cpp/sjp/event/transparency/TransparencyReportRequested.java deleted file mode 100644 index ddbc8eb156..0000000000 --- a/sjp-domain/sjp-domain-event/src/main/java/uk/gov/moj/cpp/sjp/event/transparency/TransparencyReportRequested.java +++ /dev/null @@ -1,57 +0,0 @@ -package uk.gov.moj.cpp.sjp.event.transparency; - -import static java.util.UUID.randomUUID; - -import uk.gov.justice.domain.annotation.Event; - -import java.time.ZonedDateTime; -import java.util.UUID; - -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonProperty; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; - -/** - * Event to indicate that the generation of a press transparency report has requested. - * Use either the JSON or PDF report generation requested events instead. - * - * @deprecated - */ -@Deprecated(forRemoval = true) -@Event(TransparencyReportRequested.EVENT_NAME) -@SuppressWarnings("squid:S1133") -public class TransparencyReportRequested { - public static final String EVENT_NAME = "sjp.events.transparency-report-requested"; - - /** - * Default value assigned for event replay where old versions of this - * event don't have an id. - */ - private UUID transparencyReportId = randomUUID(); - - private ZonedDateTime requestedAt; - - @JsonCreator - public TransparencyReportRequested( - @JsonProperty("transparencyReportId") final UUID transparencyReportId, - @JsonProperty("requestedAt") final ZonedDateTime requestedAt) { - if (transparencyReportId != null) { - this.transparencyReportId = transparencyReportId; - } - this.requestedAt = requestedAt; - } - - public ZonedDateTime getRequestedAt() { - return requestedAt; - } - - public UUID getTransparencyReportId() { - return transparencyReportId; - } - - @Override - public String toString() { - return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE); - } -} diff --git a/sjp-event/sjp-event-processor/src/main/java/uk/gov/moj/cpp/sjp/event/processor/PressTransparencyReportRequestedProcessor.java b/sjp-event/sjp-event-processor/src/main/java/uk/gov/moj/cpp/sjp/event/processor/PressTransparencyReportRequestedProcessor.java index 175cb2d0b6..49b42e0af9 100644 --- a/sjp-event/sjp-event-processor/src/main/java/uk/gov/moj/cpp/sjp/event/processor/PressTransparencyReportRequestedProcessor.java +++ b/sjp-event/sjp-event-processor/src/main/java/uk/gov/moj/cpp/sjp/event/processor/PressTransparencyReportRequestedProcessor.java @@ -34,6 +34,7 @@ import uk.gov.justice.services.messaging.JsonEnvelope; import uk.gov.justice.services.messaging.JsonObjects; import uk.gov.moj.cpp.sjp.domain.ListType; +import uk.gov.moj.cpp.sjp.event.processor.service.CourtListPublishingService; import uk.gov.moj.cpp.sjp.event.processor.service.ExportType; import uk.gov.moj.cpp.sjp.event.processor.service.ReferenceDataOffencesService; import uk.gov.moj.cpp.sjp.event.processor.service.ReferenceDataService; @@ -43,6 +44,7 @@ import uk.gov.moj.cpp.sjp.event.transparency.PressTransparencyPDFReportRequested; import java.io.ByteArrayInputStream; +import java.io.IOException; import java.time.LocalDate; import java.time.format.DateTimeParseException; import java.util.List; @@ -63,7 +65,8 @@ @ServiceComponent(EVENT_PROCESSOR) public class PressTransparencyReportRequestedProcessor { - public static final String PUBLIC_SJP_PRESS_TRANSPARENCY_REPORT_GENERATED = "public.sjp.press-transparency-report-generated"; + private static final String LIST_TYPE = "listType"; + private static final String SJP_PRESS_LIST = "SJP_PRESS_LIST"; public static final String CASE_URN = "caseUrn"; public static final String FIRST_NAME = "firstName"; public static final String LAST_NAME = "lastName"; @@ -111,6 +114,8 @@ public class PressTransparencyReportRequestedProcessor { @Inject @FrameworkComponent(EVENT_PROCESSOR) private Sender sender; + @Inject + private CourtListPublishingService courtListPublishingService; private String getTemplateIdentifier(final String type, final String lang) { return "PressPendingCases" + type + lang; @@ -148,48 +153,25 @@ public void handlePressTransparencyJSONReportRequest(final JsonEnvelope envelope final UUID reportId = fromString(eventPayload.getString(PRESS_TRANSPARENCY_REPORT_ID)); final boolean isWelsh = WELSH.name().equalsIgnoreCase(eventPayload.getString(LANGUAGE)); LOGGER.info("generating press transparency JSON report for press report {}", reportId); - sendPublicEvent(envelope, buildPayload(pendingCasesFromViewStore, true, envelope, isWelsh)); - } - - /** - * @deprecated with CCT-1587 now we are using two separate events for PDF and JSON report - * generation {@link PressTransparencyPDFReportRequested} and {@link - * PressTransparencyJSONReportRequested} - */ - @Deprecated(forRemoval = true) - @Handles("sjp.events.press-transparency-report-requested") - @Transactional - @SuppressWarnings({"squid:S00112", "squid:S1133"}) - public void handlePressTransparencyRequest(final JsonEnvelope envelope) { - payloadHelper.initCache(); - - final List pendingCasesFromViewStore = getPendingCasesFromViewStore(envelope); - final JsonObject eventPayload = envelope.payloadAsJsonObject(); - final UUID reportId = fromString(eventPayload.getString(PRESS_TRANSPARENCY_REPORT_ID)); - try { - final JsonObject payloadForDocumentGeneration = buildPayload(pendingCasesFromViewStore, false, envelope, false); - requestDocumentGeneration(envelope, reportId, payloadForDocumentGeneration); - sendPublicEvent(envelope, buildPayload(pendingCasesFromViewStore, true, envelope, false)); - storeReportMetadata(envelope, reportId, pendingCasesFromViewStore); - } catch (FileServiceException e) { - throw new RuntimeException("IO Exception happened during press transparency report generation", e); - } + publishCourtList(envelope, buildPayload(pendingCasesFromViewStore, true, envelope, isWelsh)); } - private void sendPublicEvent(final JsonEnvelope envelope, final JsonObject payloadForDocumentGeneration) { - LOGGER.info("publishing public event for sjp pending cases for public list in english"); + private void publishCourtList(final JsonEnvelope envelope, final JsonObject payloadForDocumentGeneration) { + LOGGER.info("publishing sjp press pending cases list to court list publishing service"); final String type = envelope.payloadAsJsonObject().getString(REQUEST_TYPE); final String language = envelope.payloadAsJsonObject().getString(LANGUAGE); - final JsonObjectBuilder pendingListEnglishBuilder = createObjectBuilder() + final JsonObject courtListPublishRequest = createObjectBuilder() + .add(LIST_TYPE, SJP_PRESS_LIST) .add(LANGUAGE, language) .add(REQUEST_TYPE, type) - .add("listPayload", payloadForDocumentGeneration); - if (LOGGER.isInfoEnabled()) { - LOGGER.info("publishing Sjp public event for press report {}, {}", PUBLIC_SJP_PRESS_TRANSPARENCY_REPORT_GENERATED, payloadForDocumentGeneration); + .add("listPayload", payloadForDocumentGeneration) + .build(); + + try { + courtListPublishingService.publishCourtList(courtListPublishRequest.toString()); + } catch (IOException e) { + throw new RuntimeException("IO Exception happened while publishing sjp press court list", e); } - sender.send(Envelope.envelopeFrom(metadataFrom(envelope.metadata()) - .withName(PUBLIC_SJP_PRESS_TRANSPARENCY_REPORT_GENERATED), - pendingListEnglishBuilder.build())); } private void storeReportMetadata(final JsonEnvelope envelope, diff --git a/sjp-event/sjp-event-processor/src/main/java/uk/gov/moj/cpp/sjp/event/processor/TransparencyReportRequestedProcessor.java b/sjp-event/sjp-event-processor/src/main/java/uk/gov/moj/cpp/sjp/event/processor/TransparencyReportRequestedProcessor.java index d78984bdea..5106d859ca 100644 --- a/sjp-event/sjp-event-processor/src/main/java/uk/gov/moj/cpp/sjp/event/processor/TransparencyReportRequestedProcessor.java +++ b/sjp-event/sjp-event-processor/src/main/java/uk/gov/moj/cpp/sjp/event/processor/TransparencyReportRequestedProcessor.java @@ -31,6 +31,7 @@ import uk.gov.justice.services.messaging.JsonEnvelope; import uk.gov.justice.services.messaging.JsonObjects; import uk.gov.moj.cpp.sjp.domain.ListType; +import uk.gov.moj.cpp.sjp.event.processor.service.CourtListPublishingService; import uk.gov.moj.cpp.sjp.event.processor.service.ExportType; import uk.gov.moj.cpp.sjp.event.processor.service.ReferenceDataOffencesService; import uk.gov.moj.cpp.sjp.event.processor.service.ReferenceDataService; @@ -38,9 +39,9 @@ import uk.gov.moj.cpp.sjp.event.processor.utils.PayloadHelper; import uk.gov.moj.cpp.sjp.event.transparency.TransparencyJSONReportRequested; import uk.gov.moj.cpp.sjp.event.transparency.TransparencyPDFReportRequested; -import uk.gov.moj.cpp.sjp.event.transparency.TransparencyReportRequested; import java.io.ByteArrayInputStream; +import java.io.IOException; import java.time.LocalDate; import java.time.Period; import java.util.Comparator; @@ -67,7 +68,8 @@ public class TransparencyReportRequestedProcessor { private static final int DEFENDANT_IS_18 = 18; private static final String SJP_OFFENCES = "sjpOffences"; private static final String OFFENCES = "offences"; - private static final String PUBLIC_EVENT_SJP_PENDING_CASES_PUBLIC_LIST_GENERATED = "public.sjp.pending-cases-public-list-generated"; + private static final String LIST_TYPE = "listType"; + private static final String SJP_PUBLISH_LIST = "SJP_PUBLISH_LIST"; public static final String DEFENDANT_NAME = "defendantName"; public static final String PROSECUTOR_NAME = "prosecutorName"; public static final String TITLE = "title"; @@ -104,6 +106,9 @@ public class TransparencyReportRequestedProcessor { @Inject private PayloadHelper payloadHelper; + @Inject + private CourtListPublishingService courtListPublishingService; + private String getTemplateIdentifier(final String type, final String lang) { return "PublicPendingCases" + type + lang; } @@ -140,67 +145,10 @@ public void createTransparencyJSONReport(final JsonEnvelope envelope) { final boolean isWelsh = WELSH.name().equalsIgnoreCase(eventPayload.getString(LANGUAGE)); LOGGER.info("generating public transparency JSON report {}", transparencyReportId); final List filteredCases = getFilteredCases(allPendingCasesFromViewStore); - sendPublicEvent(envelope, buildPayload(filteredCases, isWelsh, true, envelope)); - storeReportMetadata(envelope, transparencyReportId, filteredCases); - } - - /** - * This method is deprecated with CCT-2079. Use the new method createTransparencyPDFReport or - * createTransparencyJSONReport - * - * @deprecated @Link{createTransparencyPDFReport} or @Link{createTransparencyJSONReport} - */ - @Deprecated(forRemoval = true) - @SuppressWarnings({"squid:S00112", "squid:S1133"}) - @Handles(TransparencyReportRequested.EVENT_NAME) - @Transactional - public void createTransparencyReport(final JsonEnvelope envelope) { - payloadHelper.initCache(); - - final JsonObject eventPayload = envelope.payloadAsJsonObject(); - final UUID transparencyReportId = fromString(eventPayload.getString(TRANSPARENCY_REPORT_ID)); - final List allPendingCasesFromViewStore = getPendingCasesFromViewStore(envelope); - final List filteredCases = getFilteredCases(allPendingCasesFromViewStore); + publishCourtList(envelope, buildPayload(filteredCases, isWelsh, true, envelope)); storeReportMetadata(envelope, transparencyReportId, filteredCases); - try { - final JsonObject payloadForDocumentGenerationEnglish = buildPayload(filteredCases, false, false, envelope); - final String englishPayloadFileName = String.format("transparency-report-template-parameters.english.%s.json", transparencyReportId); - final UUID englishPayloadFileId = storeDocumentGeneratorPayload(payloadForDocumentGenerationEnglish, englishPayloadFileName, "type", LANGUAGE); - requestDocumentGeneration(envelope, transparencyReportId, englishPayloadFileId, "type", LANGUAGE); - - final JsonObject payloadForPublicEventInEnglish = buildPayload(filteredCases, false, true, envelope); - if (LOGGER.isInfoEnabled()) { - LOGGER.info("publishing Sjp public event for english report {}, {}", PUBLIC_EVENT_SJP_PENDING_CASES_PUBLIC_LIST_GENERATED, payloadForPublicEventInEnglish); - } - final JsonObjectBuilder pendingListEnglishBuilder = createObjectBuilder() - .add(LANGUAGE, "ENGLISH") - .add(LIST_PAYLOAD, payloadForPublicEventInEnglish); - sender.send(Envelope.envelopeFrom(metadataFrom(envelope.metadata()) - .withName(PUBLIC_EVENT_SJP_PENDING_CASES_PUBLIC_LIST_GENERATED), - pendingListEnglishBuilder.build())); - - final JsonObject payloadForDocumentGenerationWelsh = buildPayload(filteredCases, true, false, envelope); - final String welshPayloadFileName = String.format("transparency-report-template-parameters.welsh.%s.json", transparencyReportId); - final UUID welshPayloadFileId = storeDocumentGeneratorPayload(payloadForDocumentGenerationWelsh, welshPayloadFileName, "type", LANGUAGE); - requestDocumentGeneration(envelope, transparencyReportId, welshPayloadFileId, "type", LANGUAGE); - - final JsonObject payloadForPublicEventInWelsh = buildPayload(filteredCases, true, true, envelope); - if (LOGGER.isInfoEnabled()) { - LOGGER.info("publishing Sjp public event for welsh report {}, {}", PUBLIC_EVENT_SJP_PENDING_CASES_PUBLIC_LIST_GENERATED, payloadForPublicEventInEnglish); - } - final JsonObjectBuilder pendingListWelshBuilder = createObjectBuilder() - .add(LANGUAGE, "WELSH") - .add(LIST_PAYLOAD, payloadForPublicEventInWelsh); - sender.send(Envelope.envelopeFrom(metadataFrom(envelope.metadata()) - .withName(PUBLIC_EVENT_SJP_PENDING_CASES_PUBLIC_LIST_GENERATED), - pendingListWelshBuilder.build())); - - } catch (FileServiceException e) { - throw new RuntimeException("IO Exception happened during transparency report generation", e); - } } - private void requestDocumentGeneration(final JsonEnvelope envelope, final UUID reportId, final JsonObject payload) throws FileServiceException { final String payloadFileName = String.format("transparency-report-template-parameters.%s.json", reportId.toString()); String type = envelope.payloadAsJsonObject().getString(REQUEST_TYPE).toLowerCase(); @@ -231,18 +179,22 @@ private void sendDocumentGenerationRequest(final JsonEnvelope eventEnvelope, ); } - private void sendPublicEvent(final JsonEnvelope envelope, final JsonObject payloadForDocumentGeneration) { - LOGGER.info("publishing public event for sjp pending cases for public list in english"); + private void publishCourtList(final JsonEnvelope envelope, final JsonObject payloadForDocumentGeneration) { + LOGGER.info("publishing sjp pending cases public list to court list publishing service"); final String type = envelope.payloadAsJsonObject().getString(REQUEST_TYPE); final String language = envelope.payloadAsJsonObject().getString(LANGUAGE); - final JsonObjectBuilder pendingListEnglishBuilder = createObjectBuilder() + final JsonObject courtListPublishRequest = createObjectBuilder() + .add(LIST_TYPE, SJP_PUBLISH_LIST) .add(LANGUAGE, language) .add(REQUEST_TYPE, type) - .add(LIST_PAYLOAD, payloadForDocumentGeneration); + .add(LIST_PAYLOAD, payloadForDocumentGeneration) + .build(); - sender.send(Envelope.envelopeFrom(metadataFrom(envelope.metadata()) - .withName(PUBLIC_EVENT_SJP_PENDING_CASES_PUBLIC_LIST_GENERATED), - pendingListEnglishBuilder.build())); + try { + courtListPublishingService.publishCourtList(courtListPublishRequest.toString()); + } catch (IOException e) { + throw new RuntimeException("IO Exception happened while publishing sjp court list", e); + } } private List getPendingCasesFromViewStore(final JsonEnvelope envelope) { @@ -286,25 +238,6 @@ private JsonObject buildPayload(final List pendingCases, boolean isW .build(); } - private void requestDocumentGeneration(final JsonEnvelope eventEnvelope, - final UUID transparencyReportId, - final UUID payloadFileServiceUUID, final String type, final String language) { - - final JsonObject docGeneratorPayload = createObjectBuilder() - .add("originatingSource", "sjp") - .add(TEMPLATE_IDENTIFIER_STRING, payloadHelper.getTemplateIdentifier(type, language, ExportType.PUBLIC.name())) - .add(CONVERSION_FORMAT_STRING, CONVERSION_FORMAT) - .add("sourceCorrelationId", transparencyReportId.toString()) - .add("payloadFileServiceId", payloadFileServiceUUID.toString()) - .build(); - sender.sendAsAdmin( - Envelope.envelopeFrom( - metadataFrom(eventEnvelope.metadata()).withName("systemdocgenerator.generate-document"), - docGeneratorPayload - ) - ); - } - private UUID storeDocumentGeneratorPayload(final JsonObject documentGeneratorPayload, final String fileName, final String type, final String language) throws FileServiceException { final byte[] jsonPayloadInBytes = jsonObjectAsByteArray(documentGeneratorPayload); diff --git a/sjp-event/sjp-event-processor/src/main/java/uk/gov/moj/cpp/sjp/event/processor/service/ApplicationParameters.java b/sjp-event/sjp-event-processor/src/main/java/uk/gov/moj/cpp/sjp/event/processor/service/ApplicationParameters.java index 73ddfaf296..63e32771ba 100644 --- a/sjp-event/sjp-event-processor/src/main/java/uk/gov/moj/cpp/sjp/event/processor/service/ApplicationParameters.java +++ b/sjp-event/sjp-event-processor/src/main/java/uk/gov/moj/cpp/sjp/event/processor/service/ApplicationParameters.java @@ -15,7 +15,11 @@ public class ApplicationParameters { @Value(key = "RELAY_CASE_ON_CPP_FUNCTION_PATH") private String relayCaseOnCppFunctionPath; - + @Inject + @Value(key = "COURT_LIST_PUBLISHING_SERVICE_URL") + private String courtListPublishingServiceUrl; + + public String getAzureFunctionHostName() { return azureFunctionHostName; @@ -25,4 +29,9 @@ public String getRelayCaseOnCppFunctionPath() { return relayCaseOnCppFunctionPath; } + + public String getCourtListPublishingServiceUrl() { + + return courtListPublishingServiceUrl; + } } diff --git a/sjp-event/sjp-event-processor/src/main/java/uk/gov/moj/cpp/sjp/event/processor/service/CourtListPublishingService.java b/sjp-event/sjp-event-processor/src/main/java/uk/gov/moj/cpp/sjp/event/processor/service/CourtListPublishingService.java new file mode 100644 index 0000000000..98ff71495f --- /dev/null +++ b/sjp-event/sjp-event-processor/src/main/java/uk/gov/moj/cpp/sjp/event/processor/service/CourtListPublishingService.java @@ -0,0 +1,31 @@ +package uk.gov.moj.cpp.sjp.event.processor.service; + +import uk.gov.moj.cpp.sjp.event.processor.helper.HttpConnectionHelper; + +import java.io.IOException; + +import javax.inject.Inject; + +public class CourtListPublishingService { + + private static final String PUBLISH_SJP_COURT_LIST_PATH = "/api/court-list-publish/sjp/publishCourtList"; + + private HttpConnectionHelper httpConnectionHelper; + + @Inject + private ApplicationParameters applicationParameters; + + public CourtListPublishingService() { + this.httpConnectionHelper = new HttpConnectionHelper(); + } + + public CourtListPublishingService(final HttpConnectionHelper httpConnectionHelper, final ApplicationParameters applicationParameters) { + this.httpConnectionHelper = httpConnectionHelper; + this.applicationParameters = applicationParameters; + } + + public Integer publishCourtList(final String payload) throws IOException { + return httpConnectionHelper.getResponseCode( + applicationParameters.getCourtListPublishingServiceUrl() + PUBLISH_SJP_COURT_LIST_PATH, payload); + } +} diff --git a/sjp-event/sjp-event-processor/src/test/java/uk/gov/moj/cpp/sjp/event/processor/PressTransparencyReportRequestedProcessorTest.java b/sjp-event/sjp-event-processor/src/test/java/uk/gov/moj/cpp/sjp/event/processor/PressTransparencyReportRequestedProcessorTest.java index a82128ed24..7065cbcb08 100644 --- a/sjp-event/sjp-event-processor/src/test/java/uk/gov/moj/cpp/sjp/event/processor/PressTransparencyReportRequestedProcessorTest.java +++ b/sjp-event/sjp-event-processor/src/test/java/uk/gov/moj/cpp/sjp/event/processor/PressTransparencyReportRequestedProcessorTest.java @@ -40,15 +40,17 @@ import uk.gov.justice.services.fileservice.api.FileStorer; import uk.gov.justice.services.messaging.Envelope; import uk.gov.justice.services.messaging.JsonEnvelope; -import uk.gov.justice.services.messaging.spi.DefaultEnvelope; import uk.gov.moj.cpp.sjp.domain.DocumentRequestType; import uk.gov.moj.cpp.sjp.domain.ListType; +import uk.gov.moj.cpp.sjp.event.processor.service.CourtListPublishingService; import uk.gov.moj.cpp.sjp.event.processor.service.ReferenceDataOffencesService; import uk.gov.moj.cpp.sjp.event.processor.service.ReferenceDataService; import uk.gov.moj.cpp.sjp.event.processor.service.SjpService; import uk.gov.moj.cpp.sjp.event.processor.utils.PayloadHelper; +import java.io.IOException; import java.io.InputStream; +import java.io.StringReader; import java.time.DayOfWeek; import java.time.LocalDate; import java.time.LocalDateTime; @@ -63,6 +65,7 @@ import java.util.UUID; import java.util.function.Function; +import javax.json.Json; import javax.json.JsonArray; import javax.json.JsonArrayBuilder; import javax.json.JsonObject; @@ -81,7 +84,6 @@ public class PressTransparencyReportRequestedProcessorTest { private static final DateTimeFormatter DOB_FORMAT = DateTimeFormatter.ofPattern("yyyy-MM-dd"); - private static final String PUBLIC_EVENT_SJP_PENDING_CASES_PUBLIC_LIST_GENERATED = "public.sjp.press-transparency-report-generated"; private static final String STORE_PRESS_TRANSPARENCY_REPORT_DATA_COMMAND = "sjp.command.store-press-transparency-report-data"; private static final String EXPECTED_TEMPLATE_NAME_DELTA = "PressPendingCasesDeltaEnglish"; private static final String EXPECTED_TEMPLATE_NAME_FULL = "PressPendingCasesFullEnglish"; @@ -164,6 +166,8 @@ public class PressTransparencyReportRequestedProcessorTest { private PayloadHelper payloadHelper; @Mock private SjpService sjpService; + @Mock + private CourtListPublishingService courtListPublishingService; @Captor private ArgumentCaptor payloadForDocumentGenerationCaptor; @Captor @@ -171,7 +175,7 @@ public class PressTransparencyReportRequestedProcessorTest { @Captor private ArgumentCaptor storePressTransparencyReportCommandEnvelopeCaptor; @Captor - private ArgumentCaptor defaultEnvelopeArgumentCaptor; + private ArgumentCaptor courtListPublishRequestCaptor; @BeforeEach public void setUp() throws Exception { @@ -191,33 +195,6 @@ private void mockSjpService(final List sjpService, final List pendingCasesList = pendingCasesList(CASE_IDS, false, defendantDateOfBirth, false); - - mockCommon(sjpService.getPendingDeltaCases(any(), any()), pendingCasesList); - - processor.handlePressTransparencyRequest(PRIVATE_EVENT_PDF_ENVELOPE_DELTA); - - final JsonObject actual = getDocumentGeneratorPayloadFromFileStorer(); - - actual.getJsonArray("readyCases").forEach(rc -> - assertThat(rc.toString(), isJson(withJsonPath("$.dateOfBirth", equalTo(format(getAge(defendantDateOfBirth))))))); - - assertPayloadForDocumentGenerator(actual, pendingCasesList, NUMBER_OF_PENDING_CASES_FOR_EXPORT, false); - - verify(sender).sendAsAdmin(documentGenerationRequestCaptor.capture()); - - assertDocumentGenerationRequest(documentGenerationRequestCaptor.getValue(), EXPECTED_DOC_GENERATION_PAYLOAD_DELTA); - - verify(sender, times(1)).send(storePressTransparencyReportCommandEnvelopeCaptor.capture()); - assertPressTransparencyReportEnvelope(storePressTransparencyReportCommandEnvelopeCaptor.getValue(), REPORT_ID, CASE_IDS, DocumentRequestType.DELTA); - } - @Test public void shouldCreatePressTransparencyPDFReportDelta() throws FileServiceException { @@ -282,7 +259,7 @@ public void shouldCreatePressTransparencyPDFReportFull() throws FileServiceExcep } @Test - public void shouldCreatePressTransparencyJSONReportDelta() { + public void shouldCreatePressTransparencyJSONReportDelta() throws IOException { final String defendantDateOfBirth = "1980-06-12"; @@ -291,11 +268,10 @@ public void shouldCreatePressTransparencyJSONReportDelta() { mockSjpService(sjpService.getPendingDeltaCases(any(), any()), pendingCasesList); processor.handlePressTransparencyJSONReportRequest(PRIVATE_EVENT_ENVELOPE_JSON_DELTA); - verify(sender, times(1)).send(defaultEnvelopeArgumentCaptor.capture()); - final Envelope jsonEnvelope = defaultEnvelopeArgumentCaptor.getAllValues().get(0); - assertThat(jsonEnvelope.metadata().name(), is(PUBLIC_EVENT_SJP_PENDING_CASES_PUBLIC_LIST_GENERATED)); - final JsonObject eventPayload = (JsonObject) jsonEnvelope.payload(); - final JsonObject payload = eventPayload.getJsonObject("listPayload"); + verify(courtListPublishingService, times(1)).publishCourtList(courtListPublishRequestCaptor.capture()); + final JsonObject courtListPublishRequest = Json.createReader(new StringReader(courtListPublishRequestCaptor.getValue())).readObject(); + assertThat(courtListPublishRequest.getString("listType"), is("SJP_PRESS_LIST")); + final JsonObject payload = courtListPublishRequest.getJsonObject("listPayload"); assertThat(payload.getInt("totalNumberOfRecords"), is(1)); final JsonArray readyCases = payload.getJsonArray("readyCases"); assertThat(1, is(readyCases.size())); @@ -307,7 +283,7 @@ public void shouldCreatePressTransparencyJSONReportDelta() { } @Test - public void shouldCreatePressTransparencyJSONReportFull() { + public void shouldCreatePressTransparencyJSONReportFull() throws IOException { final String defendantDateOfBirth = "1980-06-12"; @@ -316,11 +292,10 @@ public void shouldCreatePressTransparencyJSONReportFull() { mockSjpService(sjpService.getPendingCases(any(), any()), pendingCasesList); processor.handlePressTransparencyJSONReportRequest(PRIVATE_EVENT_ENVELOPE_JSON_FULL); - verify(sender, times(1)).send(defaultEnvelopeArgumentCaptor.capture()); - final Envelope jsonEnvelope = defaultEnvelopeArgumentCaptor.getAllValues().get(0); - assertThat(jsonEnvelope.metadata().name(), is(PUBLIC_EVENT_SJP_PENDING_CASES_PUBLIC_LIST_GENERATED)); - final JsonObject eventPayload = (JsonObject) jsonEnvelope.payload(); - final JsonObject payload = eventPayload.getJsonObject("listPayload"); + verify(courtListPublishingService, times(1)).publishCourtList(courtListPublishRequestCaptor.capture()); + final JsonObject courtListPublishRequest = Json.createReader(new StringReader(courtListPublishRequestCaptor.getValue())).readObject(); + assertThat(courtListPublishRequest.getString("listType"), is("SJP_PRESS_LIST")); + final JsonObject payload = courtListPublishRequest.getJsonObject("listPayload"); assertThat(payload.getInt("totalNumberOfRecords"), is(1)); final JsonArray readyCases = payload.getJsonArray("readyCases"); assertThat(1, is(readyCases.size())); @@ -341,44 +316,6 @@ private JsonObject getDocumentGeneratorPayloadFromFileStorer() throws FileServic return streamToJsonObject(payloadBytes); } - @Test - @SuppressWarnings("deprecation") - public void shouldCreatePressTransparencyWhenNoDateOfBirthReport() throws FileServiceException { - - final String defendantDateOfBirth = ""; - - final List pendingCasesList = pendingCasesList(CASE_IDS, false, defendantDateOfBirth, false); - - mockCommon(sjpService.getPendingDeltaCases(any(), any()), pendingCasesList); - - processor.handlePressTransparencyRequest(PRIVATE_EVENT_PDF_ENVELOPE_DELTA); - - final JsonObject actual = getDocumentGeneratorPayloadFromFileStorer(); - - assertThat(actual.containsKey("dateOfBirth"), is(false)); - - - } - - @Test - @SuppressWarnings("deprecation") - public void shouldExcludeYouthDefendants() throws FileServiceException { - - final String defendantDateOfBirth = "1980-06-12"; - - final List pendingCasesList = pendingCasesList(CASE_IDS, true, defendantDateOfBirth, false); - - mockCommon(sjpService.getPendingDeltaCases(any(), any()), pendingCasesList); - - processor.handlePressTransparencyRequest(PRIVATE_EVENT_PDF_ENVELOPE_DELTA); - - verify(fileStorer).store(any(JsonObject.class), payloadForDocumentGenerationCaptor.capture()); - - final InputStream payloadBytes = payloadForDocumentGenerationCaptor.getValue(); - final JsonObject payloadForDocumentGenerator = streamToJsonObject(payloadBytes); - - } - @Test public void shouldCreatePressTransparencyPDFWhenNoDateOfBirthReport() throws FileServiceException { diff --git a/sjp-event/sjp-event-processor/src/test/java/uk/gov/moj/cpp/sjp/event/processor/TransparencyReportRequestedProcessorTest.java b/sjp-event/sjp-event-processor/src/test/java/uk/gov/moj/cpp/sjp/event/processor/TransparencyReportRequestedProcessorTest.java index e34e2faab9..0154b6dc29 100644 --- a/sjp-event/sjp-event-processor/src/test/java/uk/gov/moj/cpp/sjp/event/processor/TransparencyReportRequestedProcessorTest.java +++ b/sjp-event/sjp-event-processor/src/test/java/uk/gov/moj/cpp/sjp/event/processor/TransparencyReportRequestedProcessorTest.java @@ -4,10 +4,8 @@ import static java.util.UUID.randomUUID; import static java.util.stream.Collectors.toList; import static java.util.stream.IntStream.range; -import static org.hamcrest.CoreMatchers.not; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.everyItem; -import static org.hamcrest.Matchers.isEmptyOrNullString; import static org.hamcrest.Matchers.isIn; import static org.hamcrest.core.Is.is; import static org.hamcrest.core.IsNull.notNullValue; @@ -29,21 +27,24 @@ import uk.gov.justice.services.messaging.Envelope; import uk.gov.justice.services.messaging.JsonEnvelope; import uk.gov.justice.services.messaging.Metadata; -import uk.gov.justice.services.messaging.spi.DefaultEnvelope; import uk.gov.moj.cpp.sjp.domain.DocumentFormat; import uk.gov.moj.cpp.sjp.domain.DocumentRequestType; +import uk.gov.moj.cpp.sjp.event.processor.service.CourtListPublishingService; import uk.gov.moj.cpp.sjp.event.processor.service.ReferenceDataOffencesService; import uk.gov.moj.cpp.sjp.event.processor.service.ReferenceDataService; import uk.gov.moj.cpp.sjp.event.processor.service.SjpService; import uk.gov.moj.cpp.sjp.event.processor.utils.PayloadHelper; +import java.io.IOException; import java.io.InputStream; +import java.io.StringReader; import java.time.LocalDate; import java.util.LinkedList; import java.util.List; import java.util.Objects; import java.util.UUID; +import javax.json.Json; import javax.json.JsonArray; import javax.json.JsonArrayBuilder; import javax.json.JsonObject; @@ -60,8 +61,6 @@ @ExtendWith(MockitoExtension.class) public class TransparencyReportRequestedProcessorTest { - private static final String PUBLIC_EVENT_SJP_PENDING_CASES_PUBLIC_LIST_GENERATED = "public.sjp.pending-cases-public-list-generated"; - @InjectMocks private TransparencyReportRequestedProcessor processor; @@ -80,6 +79,9 @@ public class TransparencyReportRequestedProcessorTest { @Mock private SjpService sjpService; + @Mock + private CourtListPublishingService courtListPublishingService; + @Captor private ArgumentCaptor payloadForFileServiceCaptor; @@ -90,75 +92,11 @@ public class TransparencyReportRequestedProcessorTest { private ArgumentCaptor storeTransparencyReportCommandEnvelopeCaptor; @Captor - private ArgumentCaptor defaultEnvelopeArgumentCaptor; + private ArgumentCaptor courtListPublishRequestCaptor; @Mock private PayloadHelper payloadHelper; - @Test - @SuppressWarnings("deprecation") - public void shouldCreateTransparencyReport() throws FileServiceException { - final UUID englishPayloadFileUUID = randomUUID(); - final UUID welshPayloadFileUUID = randomUUID(); - final UUID transparencyReportId = randomUUID(); - final String expectedEnglishTemplateName = "PublicPendingCasesFullEnglish"; - - final String offenceTitle = "OffenceTitle"; - final String prosecutorName = "TFL"; - final String prosecutorEnglish = "Transport For London"; - final String prosecutorWelsh = "Transport For London - Welsh"; - final Integer numberOfPendingCasesForExport = 9; - final List caseIds = range(0, numberOfPendingCasesForExport) - .mapToObj(e -> randomUUID()).collect(toList()); - - // create 5 young offenders - final List youngOffenderCaseIds = range(0, 5) - .mapToObj(e -> randomUUID()).collect(toList()); - - // create 5 press restricted case ids - final List pressRestrictionCaseIds = range(0, 5) - .mapToObj(e -> randomUUID()).collect(toList()); - - when(payloadHelper.buildOffenceTitleFromOffenceArray(any(), eq(false), any())).thenReturn(offenceTitle); - when(payloadHelper.buildOffenceTitleFromOffenceArray(any(), eq(true), any())).thenReturn(offenceTitle); - when(payloadHelper.mapOffenceIntoOffenceTitleString(any(), eq(false), any())).thenReturn(offenceTitle); - when(payloadHelper.mapOffenceIntoOffenceTitleString(any(), eq(true), any())).thenReturn(offenceTitle); - when(payloadHelper.buildProsecutorName(eq(prosecutorName), eq(false), any())).thenReturn(prosecutorEnglish); - when(payloadHelper.buildProsecutorName(eq(prosecutorName), eq(true), any())).thenReturn(prosecutorWelsh); - when(payloadHelper.getStartDate(eq(false))).thenReturn("15 January 2024"); - when(payloadHelper.getStartDate(eq(true))).thenReturn("ers 21 Tachwedd"); - when(payloadHelper.getTemplateIdentifier(any(), any(), any())).thenReturn(expectedEnglishTemplateName); - - final List pendingCasesList = pendingCasesList(caseIds, youngOffenderCaseIds, pressRestrictionCaseIds); - when(sjpService.getPendingCases(any(), any())).thenReturn(pendingCasesList); - when(fileStorer.store(any(), any())) - .thenReturn(englishPayloadFileUUID) - .thenReturn(welshPayloadFileUUID); - - final JsonEnvelope privateEventEnvelope = envelopeFrom( - metadataWithRandomUUID("sjp.events.transparency-report-requested"), - createObjectBuilder() - .add("transparencyReportId", transparencyReportId.toString()) - .add("requestType", DocumentRequestType.FULL.name()) - .add("language", "ENGLISH") - .add("format", DocumentFormat.PDF.name()) - .build() - ); - processor.createTransparencyReport(privateEventEnvelope); - - verify(fileStorer, times(2)).store(any(JsonObject.class), payloadForFileServiceCaptor.capture()); - verify(sender, times(2)).sendAsAdmin(payloadForDocumentGenerationCaptor.capture()); - - final JsonObject payloadForEnglishPdf = streamToJsonObject(payloadForFileServiceCaptor.getAllValues().get(0)); - final JsonObject payloadForWelshPdf = streamToJsonObject(payloadForFileServiceCaptor.getAllValues().get(1)); - - assertPayloadForDocumentGenerator(payloadForEnglishPdf, pendingCasesList, numberOfPendingCasesForExport, false); - assertPayloadForDocumentGenerator(payloadForWelshPdf, pendingCasesList, numberOfPendingCasesForExport, true); - - verify(sender, times(1)).send(storeTransparencyReportCommandEnvelopeCaptor.capture()); - assertTransparencyReportEnvelope(storeTransparencyReportCommandEnvelopeCaptor.getAllValues().get(0), transparencyReportId, caseIds); - } - @Test public void shouldCreateTransparencyPDFReportFULL() throws FileServiceException { final String expectedEnglishTemplateName = "PublicPendingCasesFullEnglish"; @@ -273,7 +211,7 @@ public void shouldCreateTransparencyPDFReportDELTA() throws FileServiceException } @Test - public void shouldCreateTransparencyReportJSONFull() throws FileServiceException { + public void shouldCreateTransparencyReportJSONFull() throws FileServiceException, IOException { final String expectedEnglishTemplateName = "PublicPendingCasesFullEnglish"; final UUID englishPayloadFileUUID = randomUUID(); final UUID welshPayloadFileUUID = randomUUID(); @@ -313,11 +251,10 @@ public void shouldCreateTransparencyReportJSONFull() throws FileServiceException ); processor.createTransparencyJSONReport(privateEventEnvelope); - verify(sender, times(1)).send(defaultEnvelopeArgumentCaptor.capture()); - final Envelope jsonEnvelope = defaultEnvelopeArgumentCaptor.getAllValues().get(0); - assertThat(jsonEnvelope.metadata().name(), is(PUBLIC_EVENT_SJP_PENDING_CASES_PUBLIC_LIST_GENERATED)); - final JsonObject eventPayload = (JsonObject) jsonEnvelope.payload(); - final JsonObject payload = eventPayload.getJsonObject("listPayload"); + verify(courtListPublishingService, times(1)).publishCourtList(courtListPublishRequestCaptor.capture()); + final JsonObject courtListPublishRequest = Json.createReader(new StringReader(courtListPublishRequestCaptor.getValue())).readObject(); + assertThat(courtListPublishRequest.getString("listType"), is("SJP_PUBLISH_LIST")); + final JsonObject payload = courtListPublishRequest.getJsonObject("listPayload"); assertThat(payload.getInt("totalNumberOfRecords"), is(9)); final JsonArray readyCases = payload.getJsonArray("readyCases"); assertThat(9, is(readyCases.size())); @@ -387,22 +324,6 @@ public void shouldCreateTransparencyReportJSONDELTA() throws FileServiceExceptio verify(sender, times(1)).send(storeTransparencyReportCommandEnvelopeCaptor.capture()); } - private void assertSJPPendingPublicListEnvelope(final Envelope jsonEnvelope, final String language, final Integer numberOfPendingCasesForExport, final String prosecutorName) { - assertThat(jsonEnvelope.metadata().name(), is(PUBLIC_EVENT_SJP_PENDING_CASES_PUBLIC_LIST_GENERATED)); - final JsonObject eventPayload = (JsonObject) jsonEnvelope.payload(); - final JsonObject payload = eventPayload.getJsonObject("listPayload"); - assertThat(payload.getInt("totalNumberOfRecords"), is(numberOfPendingCasesForExport)); - final JsonArray readyCases = payload.getJsonArray("readyCases"); - assertThat(numberOfPendingCasesForExport, is(readyCases.size())); - readyCases.getValuesAs(JsonObject.class).forEach(jsonObject -> { - assertThat(jsonObject.getString("prosecutorName"), is(prosecutorName)); - assertThat(jsonObject.getJsonArray("sjpOffences"), notNullValue()); - assertThat(jsonObject.getString("firstName"), not(isEmptyOrNullString())); - assertThat(jsonObject.getString("lastName"), not(isEmptyOrNullString())); - }); - } - - private void assertPayloadForDocumentGenerator(final JsonObject payload, final List pendingCasesList, final Integer totalNumberOfRecords, final Boolean isWelsh) { assertReadyCasesPayloadWithPendingCases(payload, pendingCasesList, "postcode"); diff --git a/sjp-event/sjp-event-processor/src/yaml/json/schema/public.sjp.pending-cases-public-list-generated.json b/sjp-event/sjp-event-processor/src/yaml/json/schema/public.sjp.pending-cases-public-list-generated.json deleted file mode 100644 index a4dc7303cc..0000000000 --- a/sjp-event/sjp-event-processor/src/yaml/json/schema/public.sjp.pending-cases-public-list-generated.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-04/schema#", - "id": "http://cpp.moj.gov.uk/sjp/json/schema/event/public.sjp.pending-cases-public-list-generated.json", - "type": "object", - "properties": { - "requestType": { - "enum": [ - "FULL", - "DELTA" - ] - }, - "language": { - "enum": [ - "ENGLISH", - "WELSH", - "BI_LINGUAL" - ] - }, - "listPayload": { - "type": "object", - "properties": { - "generatedDateAndTime": { - "type": "string" - }, - "totalNumberOfRecords": { - "type": "integer" - }, - "startDate": { - "type": "string" - }, - "readyCases": { - "type": "array", - "items": { - "type": "object", - "properties": { - "defendantName": { - "type": "string" - }, - "prosecutorName": { - "type": "string" - }, - "legalEntityName": { - "type": "string" - }, - "firstName": { - "type": "string" - }, - "lastName": { - "type": "string" - }, - "postcode": { - "type": "string" - }, - "sjpOffences": { - "type": "array", - "items": { - "type": "object", - "properties": { - "title": { - "type": "string" - } - } - } - } - } - } - } - }, - "required": [ - "generatedDateAndTime", - "totalNumberOfRecords", - "readyCases" - ], - "additionalProperties": false - } - }, - "required": [ - "language", - "listPayload" - ], - "additionalProperties": false -} \ No newline at end of file diff --git a/sjp-event/sjp-event-processor/src/yaml/json/schema/public.sjp.press-transparency-report-generated.json b/sjp-event/sjp-event-processor/src/yaml/json/schema/public.sjp.press-transparency-report-generated.json deleted file mode 100644 index 4d7c48226a..0000000000 --- a/sjp-event/sjp-event-processor/src/yaml/json/schema/public.sjp.press-transparency-report-generated.json +++ /dev/null @@ -1,114 +0,0 @@ -{ - "$schema":"http://json-schema.org/draft-04/schema#", - "id":"http://cpp.moj.gov.uk/sjp/json/schema/event/public.sjp.press-transparency-report-generated.json", - "type":"object", - "properties":{ - "requestType": { - "type": "string", - "enum": [ - "FULL", - "DELTA" - ] - }, - "language":{ - "enum":[ - "ENGLISH", - "WELSH", - "BI_LINGUAL" - ] - }, - "listPayload":{ - "type":"object", - "properties":{ - "generatedDateAndTime":{ - "type":"string" - }, - "totalNumberOfRecords":{ - "type":"integer" - }, - "readyCases":{ - "type":"array", - "items":{ - "type":"object", - "properties":{ - "caseUrn":{ - "type":"string" - }, - "defendantName":{ - "type":"string" - }, - "dateOfBirth":{ - "type":"string" - }, - "age":{ - "type":"string" - }, - "prosecutorName":{ - "type":"string" - }, - "legalEntityName":{ - "type":"string" - }, - "title":{ - "type":"string" - }, - "firstName":{ - "type":"string" - }, - "lastName":{ - "type":"string" - }, - "addressLine1":{ - "type":"string" - }, - "addressLine2":{ - "type":"string" - }, - "addressLine3":{ - "type":"string" - }, - "town":{ - "type":"string" - }, - "county":{ - "type":"string" - }, - "postcode":{ - "type":"string" - }, - "sjpOffences":{ - "type":"array", - "items":{ - "type":"object", - "properties":{ - "title":{ - "type":"string" - }, - "wording":{ - "type":"string" - }, - "reportingRestriction":{ - "type":"boolean" - }, - "pressRestrictionName":{ - "type":"string" - } - } - } - } - } - } - } - }, - "required":[ - "generatedDateAndTime", - "totalNumberOfRecords", - "readyCases" - ] - } - }, - "required":[ - "language", - "listPayload" - ] -} \ No newline at end of file diff --git a/sjp-event/sjp-event-processor/src/yaml/json/schema/sjp.events.transparency-report-requested.json b/sjp-event/sjp-event-processor/src/yaml/json/schema/sjp.events.transparency-report-requested.json deleted file mode 100644 index 20a1091d60..0000000000 --- a/sjp-event/sjp-event-processor/src/yaml/json/schema/sjp.events.transparency-report-requested.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-04/schema#", - "id": "http://justice.gov.uk/json/schemas/domains/sjp/events/transparency-report-requested.json", - "type": "object", - "properties": { - "requestedAt": { - "$ref": "http://justice.gov.uk/json/schemas/domains/sjp/temporal.json#/definitions/date-time" - }, - "transparencyReportId" : { - "$ref": "http://justice.gov.uk/domain/core/common/definitions.json#/definitions/uuid" - } - }, - "required": [ - "transparencyReportId", - "requestedAt" - ], - "additionalProperties": false -} diff --git a/sjp-event/sjp-event-processor/src/yaml/json/sjp.events.transparency-report-requested.json b/sjp-event/sjp-event-processor/src/yaml/json/sjp.events.transparency-report-requested.json deleted file mode 100644 index 78b1a1887c..0000000000 --- a/sjp-event/sjp-event-processor/src/yaml/json/sjp.events.transparency-report-requested.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "requestedAt": "2018-02-05T15:14:29.894Z", - "transparencyReportId" : "60ca064a-3d25-4157-a3d1-94e99d00c5a1" -} \ No newline at end of file diff --git a/sjp-event/sjp-event-processor/src/yaml/public-publications-descriptor.yaml b/sjp-event/sjp-event-processor/src/yaml/public-publications-descriptor.yaml index fb12a32995..1d41eeb064 100644 --- a/sjp-event/sjp-event-processor/src/yaml/public-publications-descriptor.yaml +++ b/sjp-event/sjp-event-processor/src/yaml/public-publications-descriptor.yaml @@ -140,15 +140,9 @@ subscriptions_descriptor: - name: public.sjp.events.conviction-court-resolved schema_uri: http://justice.gov.uk/json/schemas/domains/sjp/events/public.sjp.events.conviction-court-resolved.json - - name: public.sjp.pending-cases-public-list-generated - schema_uri: http://cpp.moj.gov.uk/sjp/json/schema/event/public.sjp.pending-cases-public-list-generated.json - - name: public.sjp.case-legal-soc-checked schema_uri: http://cpp.moj.gov.uk/sjp/json/schema/event/public.sjp.marked-as-legal-soc-checked.json - - name: public.sjp.press-transparency-report-generated - schema_uri: http://cpp.moj.gov.uk/sjp/json/schema/event/public.sjp.press-transparency-report-generated.json - - name: public.sjp.case-reserved schema_uri: http://cpp.moj.gov.uk/sjp/json/schema/event/public.sjp.case-reserved.json diff --git a/sjp-event/sjp-event-processor/src/yaml/subscriptions-descriptor.yaml b/sjp-event/sjp-event-processor/src/yaml/subscriptions-descriptor.yaml index 0cdee4dae1..1777d81b93 100644 --- a/sjp-event/sjp-event-processor/src/yaml/subscriptions-descriptor.yaml +++ b/sjp-event/sjp-event-processor/src/yaml/subscriptions-descriptor.yaml @@ -131,18 +131,12 @@ subscriptions_descriptor: - name: sjp.events.case-adjourned-to-later-sjp-hearing-recorded schema_uri: http://cpp.moj.gov.uk/sjp/event/case-adjourned-to-later-sjp-hearing-recorded.json - - name: sjp.events.transparency-report-requested - schema_uri: http://justice.gov.uk/json/schemas/domains/sjp/events/transparency-report-requested.json - - name: sjp.events.transparency-pdf-report-requested schema_uri: http://justice.gov.uk/json/schemas/domains/sjp/events/transparency-pdf-report-requested.json - name: sjp.events.transparency-json-report-requested schema_uri: http://justice.gov.uk/json/schemas/domains/sjp/events/transparency-json-report-requested.json - - name: sjp.events.press-transparency-report-requested - schema_uri: http://justice.gov.uk/json/schemas/domains/sjp/events/press-transparency-report-requested.json - - name: sjp.events.press-transparency-pdf-report-requested schema_uri: http://justice.gov.uk/json/schemas/domains/sjp/events/press-transparency-pdf-report-requested.json diff --git a/sjp-integration-test/src/test/java/uk/gov/moj/sjp/it/stub/CourtListPublishingServiceStub.java b/sjp-integration-test/src/test/java/uk/gov/moj/sjp/it/stub/CourtListPublishingServiceStub.java new file mode 100644 index 0000000000..de9f243a35 --- /dev/null +++ b/sjp-integration-test/src/test/java/uk/gov/moj/sjp/it/stub/CourtListPublishingServiceStub.java @@ -0,0 +1,51 @@ +package uk.gov.moj.sjp.it.stub; + +import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; +import static com.github.tomakehurst.wiremock.client.WireMock.findAll; +import static com.github.tomakehurst.wiremock.client.WireMock.post; +import static com.github.tomakehurst.wiremock.client.WireMock.postRequestedFor; +import static com.github.tomakehurst.wiremock.client.WireMock.stubFor; +import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo; +import static java.util.Collections.emptyList; +import static java.util.concurrent.TimeUnit.SECONDS; +import static java.util.stream.Collectors.toList; +import static org.apache.http.HttpStatus.SC_OK; +import static org.awaitility.Awaitility.await; +import static uk.gov.moj.sjp.it.util.RestPollerWithDefaults.POLL_INTERVAL; +import static uk.gov.moj.sjp.it.util.RestPollerWithDefaults.TIMEOUT_IN_SECONDS; + +import java.util.Collection; +import java.util.List; + +import com.github.tomakehurst.wiremock.verification.LoggedRequest; +import org.awaitility.core.ConditionTimeoutException; +import org.hamcrest.Matcher; +import org.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class CourtListPublishingServiceStub { + + private static final String PUBLISH_COURT_LIST_URL = "/court-list-publish/sjp/publishCourtList"; + private final static Logger LOGGER = LoggerFactory.getLogger(CourtListPublishingServiceStub.class); + + public static void stubPublishCourtListEndpoint() { + stubFor(post(urlPathEqualTo(PUBLISH_COURT_LIST_URL)) + .willReturn(aResponse().withStatus(SC_OK))); + } + + public static List pollCourtListPublishRequests(final Matcher> matcher) { + try { + return await().pollInterval(POLL_INTERVAL) + .atMost(TIMEOUT_IN_SECONDS, SECONDS).until(() -> + findAll(postRequestedFor(urlPathEqualTo(PUBLISH_COURT_LIST_URL))) + .stream() + .map(LoggedRequest::getBodyAsString) + .map(JSONObject::new) + .collect(toList()), matcher); + } catch (final ConditionTimeoutException timeoutException) { + LOGGER.info("Exception while finding the captured requests in wire mock:" + timeoutException); + return emptyList(); + } + } +} diff --git a/sjp-integration-test/src/test/java/uk/gov/moj/sjp/it/test/PressTransparencyReportIT.java b/sjp-integration-test/src/test/java/uk/gov/moj/sjp/it/test/PressTransparencyReportIT.java index 59b2a2b408..ea4b60a1bd 100644 --- a/sjp-integration-test/src/test/java/uk/gov/moj/sjp/it/test/PressTransparencyReportIT.java +++ b/sjp-integration-test/src/test/java/uk/gov/moj/sjp/it/test/PressTransparencyReportIT.java @@ -22,6 +22,8 @@ import static uk.gov.moj.sjp.it.stub.ReferenceDataServiceStub.stubAllReferenceData; import static uk.gov.moj.sjp.it.stub.ReferenceDataServiceStub.stubAnyQueryOffences; import static uk.gov.moj.sjp.it.stub.ReferenceDataServiceStub.stubEnforcementAreaByPostcode; +import static uk.gov.moj.sjp.it.stub.CourtListPublishingServiceStub.pollCourtListPublishRequests; +import static uk.gov.moj.sjp.it.stub.CourtListPublishingServiceStub.stubPublishCourtListEndpoint; import static uk.gov.moj.sjp.it.stub.ReferenceDataServiceStub.stubProsecutorQuery; import static uk.gov.moj.sjp.it.stub.ReferenceDataServiceStub.stubRegionByPostcode; import static uk.gov.moj.sjp.it.stub.SysDocGeneratorStub.pollSysDocGenerationRequests; @@ -68,7 +70,6 @@ public class PressTransparencyReportIT extends BaseIntegrationTest { private static final String SJP_EVENTS_PRESS_TRANSPARENCY_REPORT_GENERATION_STARTED = "sjp.events.press-transparency-pdf-report-generation-started"; private static final String SJP_EVENTS_PRESS_TRANSPARENCY_REPORT_METADATA_ADDED = "sjp.events.press-transparency-pdf-report-metadata-added"; private static final String SJP_EVENTS_PRESS_TRANSPARENCY_REPORT_GENERATION_FAILED = "sjp.events.press-transparency-pdf-report-generation-failed"; - private static final String SJP_PUBLIC_EVENT_PRESS_TRANSPARENCY_REPORT_GENERATED = "public.sjp.press-transparency-report-generated"; private final UUID caseId1 = randomUUID(), caseId2 = randomUUID(); private final UUID offenceId1 = randomUUID(), offenceId2 = randomUUID(); private PressTransparencyReportHelper pressTransparencyReportHelper = new PressTransparencyReportHelper(); @@ -78,6 +79,7 @@ public void beforeEachTest() throws Exception { resetAllRequests(); cleanViewStore(); stubGenerateDocumentEndPoint(); + stubPublishCourtListEndpoint(); stubAllIndividualProsecutorsQueries(); stubAnyQueryOffences(); stubAllReferenceData(); @@ -197,28 +199,19 @@ public void shouldGeneratePressTransparencyJsonReports() { final EventListener eventListener = new EventListener() .withMaxWaitTime(50000) - .subscribe( - SJP_EVENTS_PRESS_TRANSPARENCY_REPORT_REQUESTED_JSON, - SJP_PUBLIC_EVENT_PRESS_TRANSPARENCY_REPORT_GENERATED - ) + .subscribe(SJP_EVENTS_PRESS_TRANSPARENCY_REPORT_REQUESTED_JSON) .run(() -> pressTransparencyReportHelper.requestToGeneratePressTransparencyReport(payload)); final Optional transparencyReportRequestedEvent = eventListener.popEvent(SJP_EVENTS_PRESS_TRANSPARENCY_REPORT_REQUESTED_JSON); - final Optional transparencyReportStartedEvent = eventListener.popEvent(SJP_PUBLIC_EVENT_PRESS_TRANSPARENCY_REPORT_GENERATED); - assertThat(transparencyReportRequestedEvent.isPresent(), is(true)); - assertThat(transparencyReportStartedEvent.isPresent(), is(true)); - - final String pressTransparencyReportId = transparencyReportRequestedEvent - .map(requestedEvent -> requestedEvent.payloadAsJsonObject().getString("pressTransparencyReportId")) - .orElse(""); + final List courtListPublishRequests = pollCourtListPublishRequests(hasSize(1)); + final JSONObject courtListPublishRequest = courtListPublishRequests.get(0); - final JsonEnvelope transparencyReportStartedEnvelope = transparencyReportStartedEvent.get(); - final JsonObject transparencyReportStartedPayload = transparencyReportStartedEnvelope.payloadAsJsonObject(); + assertThat(courtListPublishRequest.getString("listType"), is("SJP_PRESS_LIST")); - JsonArray readyCases = transparencyReportStartedPayload.getJsonObject("listPayload").getJsonArray("readyCases"); - assertThat(readyCases.size(), is(2)); + final JSONObject listPayload = courtListPublishRequest.getJSONObject("listPayload"); + assertThat(listPayload.getJSONArray("readyCases").length(), is(2)); } @Test diff --git a/sjp-integration-test/src/test/java/uk/gov/moj/sjp/it/test/TransparencyReportIT.java b/sjp-integration-test/src/test/java/uk/gov/moj/sjp/it/test/TransparencyReportIT.java index 22900113b1..0e64566547 100644 --- a/sjp-integration-test/src/test/java/uk/gov/moj/sjp/it/test/TransparencyReportIT.java +++ b/sjp-integration-test/src/test/java/uk/gov/moj/sjp/it/test/TransparencyReportIT.java @@ -22,6 +22,8 @@ import static uk.gov.moj.sjp.it.stub.ReferenceDataServiceStub.stubAllReferenceData; import static uk.gov.moj.sjp.it.stub.ReferenceDataServiceStub.stubAnyQueryOffences; import static uk.gov.moj.sjp.it.stub.ReferenceDataServiceStub.stubEnforcementAreaByPostcode; +import static uk.gov.moj.sjp.it.stub.CourtListPublishingServiceStub.pollCourtListPublishRequests; +import static uk.gov.moj.sjp.it.stub.CourtListPublishingServiceStub.stubPublishCourtListEndpoint; import static uk.gov.moj.sjp.it.stub.ReferenceDataServiceStub.stubProsecutorQuery; import static uk.gov.moj.sjp.it.stub.ReferenceDataServiceStub.stubRegionByPostcode; import static uk.gov.moj.sjp.it.stub.SysDocGeneratorStub.pollSysDocGenerationRequests; @@ -67,7 +69,6 @@ public class TransparencyReportIT extends BaseIntegrationTest { private static final String SJP_EVENTS_TRANSPARENCY_REPORT_GENERATION_STARTED = "sjp.events.transparency-pdf-report-generation-started"; private static final String SJP_EVENTS_TRANSPARENCY_REPORT_METADATA_ADDED = "sjp.events.transparency-pdf-report-metadata-added"; private static final String SJP_EVENTS_TRANSPARENCY_REPORT_GENERATION_FAILED = "sjp.events.transparency-pdf-report-generation-failed"; - private static final String SJP_PUBLIC_EVENT_TRANSPARENCY_REPORT_GENERATED = "public.sjp.pending-cases-public-list-generated"; public static final String TRANSPARENCY_REPORT_ID = "transparencyReportId"; private final UUID caseId1 = randomUUID(), caseId2 = randomUUID(); @@ -79,9 +80,11 @@ public void beforeEachTest() throws Exception { resetAllRequests(); cleanViewStore(); stubGenerateDocumentEndPoint(); + stubPublishCourtListEndpoint(); stubAllIndividualProsecutorsQueries(); stubAnyQueryOffences(); stubAllReferenceData(); + setupIdMapperStub(); } @@ -199,23 +202,19 @@ public void shouldGenerateTransparencyJsonReports() { final EventListener eventListener = new EventListener() .withMaxWaitTime(50000) - .subscribe( - SJP_EVENTS_TRANSPARENCY_REPORT_REQUESTED_JSON, - SJP_PUBLIC_EVENT_TRANSPARENCY_REPORT_GENERATED - ) + .subscribe(SJP_EVENTS_TRANSPARENCY_REPORT_REQUESTED_JSON) .run(() -> transparencyReportHelper.requestToGenerateTransparencyReport(payload)); final Optional transparencyReportRequestedEvent = eventListener.popEvent(SJP_EVENTS_TRANSPARENCY_REPORT_REQUESTED_JSON); - final Optional transparencyReportStartedEvent = eventListener.popEvent(SJP_PUBLIC_EVENT_TRANSPARENCY_REPORT_GENERATED); - assertThat(transparencyReportRequestedEvent.isPresent(), is(true)); - assertThat(transparencyReportStartedEvent.isPresent(), is(true)); - final JsonEnvelope transparencyReportStartedEnvelope = transparencyReportStartedEvent.get(); - final JsonObject transparencyReportStartedPayload = transparencyReportStartedEnvelope.payloadAsJsonObject(); + final List courtListPublishRequests = pollCourtListPublishRequests(hasSize(1)); + final JSONObject courtListPublishRequest = courtListPublishRequests.get(0); + + assertThat(courtListPublishRequest.getString("listType"), is("SJP_PUBLISH_LIST")); - JsonArray readyCases = transparencyReportStartedPayload.getJsonObject("listPayload").getJsonArray("readyCases"); - assertThat(readyCases.size(), is(2)); + final JSONObject listPayload = courtListPublishRequest.getJSONObject("listPayload"); + assertThat(listPayload.getJSONArray("readyCases").length(), is(2)); } @Test From 05c7d2528322705604b6ee76efd260ded5b1d14e Mon Sep 17 00:00:00 2001 From: yashpalnegi Date: Wed, 15 Jul 2026 14:23:52 +0100 Subject: [PATCH 2/2] LPT-2348 - Change SJP to POST payload to new SJP publishing endpoint --- .../PressTransparencyReportRequested.java | 51 -------- .../TransparencyReportRequested.java | 57 --------- ...sTransparencyReportRequestedProcessor.java | 54 +++------ .../TransparencyReportRequestedProcessor.java | 105 +++------------- .../service/ApplicationParameters.java | 11 +- .../service/CourtListPublishingService.java | 31 +++++ ...nsparencyReportRequestedProcessorTest.java | 97 +++------------ ...nsparencyReportRequestedProcessorTest.java | 105 ++-------------- ...p.pending-cases-public-list-generated.json | 82 ------------- ...p.press-transparency-report-generated.json | 114 ------------------ ....events.transparency-report-requested.json | 18 --- ....events.transparency-report-requested.json | 4 - .../yaml/public-publications-descriptor.yaml | 6 - .../src/yaml/subscriptions-descriptor.yaml | 6 - .../stub/CourtListPublishingServiceStub.java | 51 ++++++++ .../it/test/PressTransparencyReportIT.java | 25 ++-- .../moj/sjp/it/test/TransparencyReportIT.java | 23 ++-- 17 files changed, 179 insertions(+), 661 deletions(-) delete mode 100644 sjp-domain/sjp-domain-event/src/main/java/uk/gov/moj/cpp/sjp/event/transparency/PressTransparencyReportRequested.java delete mode 100644 sjp-domain/sjp-domain-event/src/main/java/uk/gov/moj/cpp/sjp/event/transparency/TransparencyReportRequested.java create mode 100644 sjp-event/sjp-event-processor/src/main/java/uk/gov/moj/cpp/sjp/event/processor/service/CourtListPublishingService.java delete mode 100644 sjp-event/sjp-event-processor/src/yaml/json/schema/public.sjp.pending-cases-public-list-generated.json delete mode 100644 sjp-event/sjp-event-processor/src/yaml/json/schema/public.sjp.press-transparency-report-generated.json delete mode 100644 sjp-event/sjp-event-processor/src/yaml/json/schema/sjp.events.transparency-report-requested.json delete mode 100644 sjp-event/sjp-event-processor/src/yaml/json/sjp.events.transparency-report-requested.json create mode 100644 sjp-integration-test/src/test/java/uk/gov/moj/sjp/it/stub/CourtListPublishingServiceStub.java diff --git a/sjp-domain/sjp-domain-event/src/main/java/uk/gov/moj/cpp/sjp/event/transparency/PressTransparencyReportRequested.java b/sjp-domain/sjp-domain-event/src/main/java/uk/gov/moj/cpp/sjp/event/transparency/PressTransparencyReportRequested.java deleted file mode 100644 index 510abceabf..0000000000 --- a/sjp-domain/sjp-domain-event/src/main/java/uk/gov/moj/cpp/sjp/event/transparency/PressTransparencyReportRequested.java +++ /dev/null @@ -1,51 +0,0 @@ -package uk.gov.moj.cpp.sjp.event.transparency; - -import static java.util.UUID.randomUUID; - -import uk.gov.justice.domain.annotation.Event; - -import java.time.ZonedDateTime; -import java.util.UUID; - -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonProperty; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; - -/** - * Event to indicate that the generation of a press transparency report has requested. Use either the JSON or PDF report generation requested events instead. - * - * @deprecated - */ -@Deprecated(forRemoval = true) -@Event(PressTransparencyReportRequested.EVENT_NAME) -@SuppressWarnings("squid:S1133") -public class PressTransparencyReportRequested { - public static final String EVENT_NAME = "sjp.events.press-transparency-report-requested"; - - private UUID pressTransparencyReportId = randomUUID(); - private ZonedDateTime requestedAt; - - @JsonCreator - public PressTransparencyReportRequested( - @JsonProperty("pressTransparencyReportId") final UUID reportId, - @JsonProperty("requestedAt") final ZonedDateTime requestedAt) { - if (reportId != null) { - this.pressTransparencyReportId = reportId; - } - this.requestedAt = requestedAt; - } - - public UUID getPressTransparencyReportId() { - return pressTransparencyReportId; - } - - public ZonedDateTime getRequestedAt() { - return requestedAt; - } - - @Override - public String toString() { - return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE); - } -} diff --git a/sjp-domain/sjp-domain-event/src/main/java/uk/gov/moj/cpp/sjp/event/transparency/TransparencyReportRequested.java b/sjp-domain/sjp-domain-event/src/main/java/uk/gov/moj/cpp/sjp/event/transparency/TransparencyReportRequested.java deleted file mode 100644 index ddbc8eb156..0000000000 --- a/sjp-domain/sjp-domain-event/src/main/java/uk/gov/moj/cpp/sjp/event/transparency/TransparencyReportRequested.java +++ /dev/null @@ -1,57 +0,0 @@ -package uk.gov.moj.cpp.sjp.event.transparency; - -import static java.util.UUID.randomUUID; - -import uk.gov.justice.domain.annotation.Event; - -import java.time.ZonedDateTime; -import java.util.UUID; - -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonProperty; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; - -/** - * Event to indicate that the generation of a press transparency report has requested. - * Use either the JSON or PDF report generation requested events instead. - * - * @deprecated - */ -@Deprecated(forRemoval = true) -@Event(TransparencyReportRequested.EVENT_NAME) -@SuppressWarnings("squid:S1133") -public class TransparencyReportRequested { - public static final String EVENT_NAME = "sjp.events.transparency-report-requested"; - - /** - * Default value assigned for event replay where old versions of this - * event don't have an id. - */ - private UUID transparencyReportId = randomUUID(); - - private ZonedDateTime requestedAt; - - @JsonCreator - public TransparencyReportRequested( - @JsonProperty("transparencyReportId") final UUID transparencyReportId, - @JsonProperty("requestedAt") final ZonedDateTime requestedAt) { - if (transparencyReportId != null) { - this.transparencyReportId = transparencyReportId; - } - this.requestedAt = requestedAt; - } - - public ZonedDateTime getRequestedAt() { - return requestedAt; - } - - public UUID getTransparencyReportId() { - return transparencyReportId; - } - - @Override - public String toString() { - return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE); - } -} diff --git a/sjp-event/sjp-event-processor/src/main/java/uk/gov/moj/cpp/sjp/event/processor/PressTransparencyReportRequestedProcessor.java b/sjp-event/sjp-event-processor/src/main/java/uk/gov/moj/cpp/sjp/event/processor/PressTransparencyReportRequestedProcessor.java index 175cb2d0b6..49b42e0af9 100644 --- a/sjp-event/sjp-event-processor/src/main/java/uk/gov/moj/cpp/sjp/event/processor/PressTransparencyReportRequestedProcessor.java +++ b/sjp-event/sjp-event-processor/src/main/java/uk/gov/moj/cpp/sjp/event/processor/PressTransparencyReportRequestedProcessor.java @@ -34,6 +34,7 @@ import uk.gov.justice.services.messaging.JsonEnvelope; import uk.gov.justice.services.messaging.JsonObjects; import uk.gov.moj.cpp.sjp.domain.ListType; +import uk.gov.moj.cpp.sjp.event.processor.service.CourtListPublishingService; import uk.gov.moj.cpp.sjp.event.processor.service.ExportType; import uk.gov.moj.cpp.sjp.event.processor.service.ReferenceDataOffencesService; import uk.gov.moj.cpp.sjp.event.processor.service.ReferenceDataService; @@ -43,6 +44,7 @@ import uk.gov.moj.cpp.sjp.event.transparency.PressTransparencyPDFReportRequested; import java.io.ByteArrayInputStream; +import java.io.IOException; import java.time.LocalDate; import java.time.format.DateTimeParseException; import java.util.List; @@ -63,7 +65,8 @@ @ServiceComponent(EVENT_PROCESSOR) public class PressTransparencyReportRequestedProcessor { - public static final String PUBLIC_SJP_PRESS_TRANSPARENCY_REPORT_GENERATED = "public.sjp.press-transparency-report-generated"; + private static final String LIST_TYPE = "listType"; + private static final String SJP_PRESS_LIST = "SJP_PRESS_LIST"; public static final String CASE_URN = "caseUrn"; public static final String FIRST_NAME = "firstName"; public static final String LAST_NAME = "lastName"; @@ -111,6 +114,8 @@ public class PressTransparencyReportRequestedProcessor { @Inject @FrameworkComponent(EVENT_PROCESSOR) private Sender sender; + @Inject + private CourtListPublishingService courtListPublishingService; private String getTemplateIdentifier(final String type, final String lang) { return "PressPendingCases" + type + lang; @@ -148,48 +153,25 @@ public void handlePressTransparencyJSONReportRequest(final JsonEnvelope envelope final UUID reportId = fromString(eventPayload.getString(PRESS_TRANSPARENCY_REPORT_ID)); final boolean isWelsh = WELSH.name().equalsIgnoreCase(eventPayload.getString(LANGUAGE)); LOGGER.info("generating press transparency JSON report for press report {}", reportId); - sendPublicEvent(envelope, buildPayload(pendingCasesFromViewStore, true, envelope, isWelsh)); - } - - /** - * @deprecated with CCT-1587 now we are using two separate events for PDF and JSON report - * generation {@link PressTransparencyPDFReportRequested} and {@link - * PressTransparencyJSONReportRequested} - */ - @Deprecated(forRemoval = true) - @Handles("sjp.events.press-transparency-report-requested") - @Transactional - @SuppressWarnings({"squid:S00112", "squid:S1133"}) - public void handlePressTransparencyRequest(final JsonEnvelope envelope) { - payloadHelper.initCache(); - - final List pendingCasesFromViewStore = getPendingCasesFromViewStore(envelope); - final JsonObject eventPayload = envelope.payloadAsJsonObject(); - final UUID reportId = fromString(eventPayload.getString(PRESS_TRANSPARENCY_REPORT_ID)); - try { - final JsonObject payloadForDocumentGeneration = buildPayload(pendingCasesFromViewStore, false, envelope, false); - requestDocumentGeneration(envelope, reportId, payloadForDocumentGeneration); - sendPublicEvent(envelope, buildPayload(pendingCasesFromViewStore, true, envelope, false)); - storeReportMetadata(envelope, reportId, pendingCasesFromViewStore); - } catch (FileServiceException e) { - throw new RuntimeException("IO Exception happened during press transparency report generation", e); - } + publishCourtList(envelope, buildPayload(pendingCasesFromViewStore, true, envelope, isWelsh)); } - private void sendPublicEvent(final JsonEnvelope envelope, final JsonObject payloadForDocumentGeneration) { - LOGGER.info("publishing public event for sjp pending cases for public list in english"); + private void publishCourtList(final JsonEnvelope envelope, final JsonObject payloadForDocumentGeneration) { + LOGGER.info("publishing sjp press pending cases list to court list publishing service"); final String type = envelope.payloadAsJsonObject().getString(REQUEST_TYPE); final String language = envelope.payloadAsJsonObject().getString(LANGUAGE); - final JsonObjectBuilder pendingListEnglishBuilder = createObjectBuilder() + final JsonObject courtListPublishRequest = createObjectBuilder() + .add(LIST_TYPE, SJP_PRESS_LIST) .add(LANGUAGE, language) .add(REQUEST_TYPE, type) - .add("listPayload", payloadForDocumentGeneration); - if (LOGGER.isInfoEnabled()) { - LOGGER.info("publishing Sjp public event for press report {}, {}", PUBLIC_SJP_PRESS_TRANSPARENCY_REPORT_GENERATED, payloadForDocumentGeneration); + .add("listPayload", payloadForDocumentGeneration) + .build(); + + try { + courtListPublishingService.publishCourtList(courtListPublishRequest.toString()); + } catch (IOException e) { + throw new RuntimeException("IO Exception happened while publishing sjp press court list", e); } - sender.send(Envelope.envelopeFrom(metadataFrom(envelope.metadata()) - .withName(PUBLIC_SJP_PRESS_TRANSPARENCY_REPORT_GENERATED), - pendingListEnglishBuilder.build())); } private void storeReportMetadata(final JsonEnvelope envelope, diff --git a/sjp-event/sjp-event-processor/src/main/java/uk/gov/moj/cpp/sjp/event/processor/TransparencyReportRequestedProcessor.java b/sjp-event/sjp-event-processor/src/main/java/uk/gov/moj/cpp/sjp/event/processor/TransparencyReportRequestedProcessor.java index d78984bdea..5106d859ca 100644 --- a/sjp-event/sjp-event-processor/src/main/java/uk/gov/moj/cpp/sjp/event/processor/TransparencyReportRequestedProcessor.java +++ b/sjp-event/sjp-event-processor/src/main/java/uk/gov/moj/cpp/sjp/event/processor/TransparencyReportRequestedProcessor.java @@ -31,6 +31,7 @@ import uk.gov.justice.services.messaging.JsonEnvelope; import uk.gov.justice.services.messaging.JsonObjects; import uk.gov.moj.cpp.sjp.domain.ListType; +import uk.gov.moj.cpp.sjp.event.processor.service.CourtListPublishingService; import uk.gov.moj.cpp.sjp.event.processor.service.ExportType; import uk.gov.moj.cpp.sjp.event.processor.service.ReferenceDataOffencesService; import uk.gov.moj.cpp.sjp.event.processor.service.ReferenceDataService; @@ -38,9 +39,9 @@ import uk.gov.moj.cpp.sjp.event.processor.utils.PayloadHelper; import uk.gov.moj.cpp.sjp.event.transparency.TransparencyJSONReportRequested; import uk.gov.moj.cpp.sjp.event.transparency.TransparencyPDFReportRequested; -import uk.gov.moj.cpp.sjp.event.transparency.TransparencyReportRequested; import java.io.ByteArrayInputStream; +import java.io.IOException; import java.time.LocalDate; import java.time.Period; import java.util.Comparator; @@ -67,7 +68,8 @@ public class TransparencyReportRequestedProcessor { private static final int DEFENDANT_IS_18 = 18; private static final String SJP_OFFENCES = "sjpOffences"; private static final String OFFENCES = "offences"; - private static final String PUBLIC_EVENT_SJP_PENDING_CASES_PUBLIC_LIST_GENERATED = "public.sjp.pending-cases-public-list-generated"; + private static final String LIST_TYPE = "listType"; + private static final String SJP_PUBLISH_LIST = "SJP_PUBLISH_LIST"; public static final String DEFENDANT_NAME = "defendantName"; public static final String PROSECUTOR_NAME = "prosecutorName"; public static final String TITLE = "title"; @@ -104,6 +106,9 @@ public class TransparencyReportRequestedProcessor { @Inject private PayloadHelper payloadHelper; + @Inject + private CourtListPublishingService courtListPublishingService; + private String getTemplateIdentifier(final String type, final String lang) { return "PublicPendingCases" + type + lang; } @@ -140,67 +145,10 @@ public void createTransparencyJSONReport(final JsonEnvelope envelope) { final boolean isWelsh = WELSH.name().equalsIgnoreCase(eventPayload.getString(LANGUAGE)); LOGGER.info("generating public transparency JSON report {}", transparencyReportId); final List filteredCases = getFilteredCases(allPendingCasesFromViewStore); - sendPublicEvent(envelope, buildPayload(filteredCases, isWelsh, true, envelope)); - storeReportMetadata(envelope, transparencyReportId, filteredCases); - } - - /** - * This method is deprecated with CCT-2079. Use the new method createTransparencyPDFReport or - * createTransparencyJSONReport - * - * @deprecated @Link{createTransparencyPDFReport} or @Link{createTransparencyJSONReport} - */ - @Deprecated(forRemoval = true) - @SuppressWarnings({"squid:S00112", "squid:S1133"}) - @Handles(TransparencyReportRequested.EVENT_NAME) - @Transactional - public void createTransparencyReport(final JsonEnvelope envelope) { - payloadHelper.initCache(); - - final JsonObject eventPayload = envelope.payloadAsJsonObject(); - final UUID transparencyReportId = fromString(eventPayload.getString(TRANSPARENCY_REPORT_ID)); - final List allPendingCasesFromViewStore = getPendingCasesFromViewStore(envelope); - final List filteredCases = getFilteredCases(allPendingCasesFromViewStore); + publishCourtList(envelope, buildPayload(filteredCases, isWelsh, true, envelope)); storeReportMetadata(envelope, transparencyReportId, filteredCases); - try { - final JsonObject payloadForDocumentGenerationEnglish = buildPayload(filteredCases, false, false, envelope); - final String englishPayloadFileName = String.format("transparency-report-template-parameters.english.%s.json", transparencyReportId); - final UUID englishPayloadFileId = storeDocumentGeneratorPayload(payloadForDocumentGenerationEnglish, englishPayloadFileName, "type", LANGUAGE); - requestDocumentGeneration(envelope, transparencyReportId, englishPayloadFileId, "type", LANGUAGE); - - final JsonObject payloadForPublicEventInEnglish = buildPayload(filteredCases, false, true, envelope); - if (LOGGER.isInfoEnabled()) { - LOGGER.info("publishing Sjp public event for english report {}, {}", PUBLIC_EVENT_SJP_PENDING_CASES_PUBLIC_LIST_GENERATED, payloadForPublicEventInEnglish); - } - final JsonObjectBuilder pendingListEnglishBuilder = createObjectBuilder() - .add(LANGUAGE, "ENGLISH") - .add(LIST_PAYLOAD, payloadForPublicEventInEnglish); - sender.send(Envelope.envelopeFrom(metadataFrom(envelope.metadata()) - .withName(PUBLIC_EVENT_SJP_PENDING_CASES_PUBLIC_LIST_GENERATED), - pendingListEnglishBuilder.build())); - - final JsonObject payloadForDocumentGenerationWelsh = buildPayload(filteredCases, true, false, envelope); - final String welshPayloadFileName = String.format("transparency-report-template-parameters.welsh.%s.json", transparencyReportId); - final UUID welshPayloadFileId = storeDocumentGeneratorPayload(payloadForDocumentGenerationWelsh, welshPayloadFileName, "type", LANGUAGE); - requestDocumentGeneration(envelope, transparencyReportId, welshPayloadFileId, "type", LANGUAGE); - - final JsonObject payloadForPublicEventInWelsh = buildPayload(filteredCases, true, true, envelope); - if (LOGGER.isInfoEnabled()) { - LOGGER.info("publishing Sjp public event for welsh report {}, {}", PUBLIC_EVENT_SJP_PENDING_CASES_PUBLIC_LIST_GENERATED, payloadForPublicEventInEnglish); - } - final JsonObjectBuilder pendingListWelshBuilder = createObjectBuilder() - .add(LANGUAGE, "WELSH") - .add(LIST_PAYLOAD, payloadForPublicEventInWelsh); - sender.send(Envelope.envelopeFrom(metadataFrom(envelope.metadata()) - .withName(PUBLIC_EVENT_SJP_PENDING_CASES_PUBLIC_LIST_GENERATED), - pendingListWelshBuilder.build())); - - } catch (FileServiceException e) { - throw new RuntimeException("IO Exception happened during transparency report generation", e); - } } - private void requestDocumentGeneration(final JsonEnvelope envelope, final UUID reportId, final JsonObject payload) throws FileServiceException { final String payloadFileName = String.format("transparency-report-template-parameters.%s.json", reportId.toString()); String type = envelope.payloadAsJsonObject().getString(REQUEST_TYPE).toLowerCase(); @@ -231,18 +179,22 @@ private void sendDocumentGenerationRequest(final JsonEnvelope eventEnvelope, ); } - private void sendPublicEvent(final JsonEnvelope envelope, final JsonObject payloadForDocumentGeneration) { - LOGGER.info("publishing public event for sjp pending cases for public list in english"); + private void publishCourtList(final JsonEnvelope envelope, final JsonObject payloadForDocumentGeneration) { + LOGGER.info("publishing sjp pending cases public list to court list publishing service"); final String type = envelope.payloadAsJsonObject().getString(REQUEST_TYPE); final String language = envelope.payloadAsJsonObject().getString(LANGUAGE); - final JsonObjectBuilder pendingListEnglishBuilder = createObjectBuilder() + final JsonObject courtListPublishRequest = createObjectBuilder() + .add(LIST_TYPE, SJP_PUBLISH_LIST) .add(LANGUAGE, language) .add(REQUEST_TYPE, type) - .add(LIST_PAYLOAD, payloadForDocumentGeneration); + .add(LIST_PAYLOAD, payloadForDocumentGeneration) + .build(); - sender.send(Envelope.envelopeFrom(metadataFrom(envelope.metadata()) - .withName(PUBLIC_EVENT_SJP_PENDING_CASES_PUBLIC_LIST_GENERATED), - pendingListEnglishBuilder.build())); + try { + courtListPublishingService.publishCourtList(courtListPublishRequest.toString()); + } catch (IOException e) { + throw new RuntimeException("IO Exception happened while publishing sjp court list", e); + } } private List getPendingCasesFromViewStore(final JsonEnvelope envelope) { @@ -286,25 +238,6 @@ private JsonObject buildPayload(final List pendingCases, boolean isW .build(); } - private void requestDocumentGeneration(final JsonEnvelope eventEnvelope, - final UUID transparencyReportId, - final UUID payloadFileServiceUUID, final String type, final String language) { - - final JsonObject docGeneratorPayload = createObjectBuilder() - .add("originatingSource", "sjp") - .add(TEMPLATE_IDENTIFIER_STRING, payloadHelper.getTemplateIdentifier(type, language, ExportType.PUBLIC.name())) - .add(CONVERSION_FORMAT_STRING, CONVERSION_FORMAT) - .add("sourceCorrelationId", transparencyReportId.toString()) - .add("payloadFileServiceId", payloadFileServiceUUID.toString()) - .build(); - sender.sendAsAdmin( - Envelope.envelopeFrom( - metadataFrom(eventEnvelope.metadata()).withName("systemdocgenerator.generate-document"), - docGeneratorPayload - ) - ); - } - private UUID storeDocumentGeneratorPayload(final JsonObject documentGeneratorPayload, final String fileName, final String type, final String language) throws FileServiceException { final byte[] jsonPayloadInBytes = jsonObjectAsByteArray(documentGeneratorPayload); diff --git a/sjp-event/sjp-event-processor/src/main/java/uk/gov/moj/cpp/sjp/event/processor/service/ApplicationParameters.java b/sjp-event/sjp-event-processor/src/main/java/uk/gov/moj/cpp/sjp/event/processor/service/ApplicationParameters.java index 73ddfaf296..b65dab8e01 100644 --- a/sjp-event/sjp-event-processor/src/main/java/uk/gov/moj/cpp/sjp/event/processor/service/ApplicationParameters.java +++ b/sjp-event/sjp-event-processor/src/main/java/uk/gov/moj/cpp/sjp/event/processor/service/ApplicationParameters.java @@ -15,7 +15,11 @@ public class ApplicationParameters { @Value(key = "RELAY_CASE_ON_CPP_FUNCTION_PATH") private String relayCaseOnCppFunctionPath; - + @Inject + @Value(key = "COURT_LIST_PUBLISHING_SERVICE_URL", defaultValue = "http://localhost:8080") + private String courtListPublishingServiceUrl; + + public String getAzureFunctionHostName() { return azureFunctionHostName; @@ -25,4 +29,9 @@ public String getRelayCaseOnCppFunctionPath() { return relayCaseOnCppFunctionPath; } + + public String getCourtListPublishingServiceUrl() { + + return courtListPublishingServiceUrl; + } } diff --git a/sjp-event/sjp-event-processor/src/main/java/uk/gov/moj/cpp/sjp/event/processor/service/CourtListPublishingService.java b/sjp-event/sjp-event-processor/src/main/java/uk/gov/moj/cpp/sjp/event/processor/service/CourtListPublishingService.java new file mode 100644 index 0000000000..98ff71495f --- /dev/null +++ b/sjp-event/sjp-event-processor/src/main/java/uk/gov/moj/cpp/sjp/event/processor/service/CourtListPublishingService.java @@ -0,0 +1,31 @@ +package uk.gov.moj.cpp.sjp.event.processor.service; + +import uk.gov.moj.cpp.sjp.event.processor.helper.HttpConnectionHelper; + +import java.io.IOException; + +import javax.inject.Inject; + +public class CourtListPublishingService { + + private static final String PUBLISH_SJP_COURT_LIST_PATH = "/api/court-list-publish/sjp/publishCourtList"; + + private HttpConnectionHelper httpConnectionHelper; + + @Inject + private ApplicationParameters applicationParameters; + + public CourtListPublishingService() { + this.httpConnectionHelper = new HttpConnectionHelper(); + } + + public CourtListPublishingService(final HttpConnectionHelper httpConnectionHelper, final ApplicationParameters applicationParameters) { + this.httpConnectionHelper = httpConnectionHelper; + this.applicationParameters = applicationParameters; + } + + public Integer publishCourtList(final String payload) throws IOException { + return httpConnectionHelper.getResponseCode( + applicationParameters.getCourtListPublishingServiceUrl() + PUBLISH_SJP_COURT_LIST_PATH, payload); + } +} diff --git a/sjp-event/sjp-event-processor/src/test/java/uk/gov/moj/cpp/sjp/event/processor/PressTransparencyReportRequestedProcessorTest.java b/sjp-event/sjp-event-processor/src/test/java/uk/gov/moj/cpp/sjp/event/processor/PressTransparencyReportRequestedProcessorTest.java index a82128ed24..7065cbcb08 100644 --- a/sjp-event/sjp-event-processor/src/test/java/uk/gov/moj/cpp/sjp/event/processor/PressTransparencyReportRequestedProcessorTest.java +++ b/sjp-event/sjp-event-processor/src/test/java/uk/gov/moj/cpp/sjp/event/processor/PressTransparencyReportRequestedProcessorTest.java @@ -40,15 +40,17 @@ import uk.gov.justice.services.fileservice.api.FileStorer; import uk.gov.justice.services.messaging.Envelope; import uk.gov.justice.services.messaging.JsonEnvelope; -import uk.gov.justice.services.messaging.spi.DefaultEnvelope; import uk.gov.moj.cpp.sjp.domain.DocumentRequestType; import uk.gov.moj.cpp.sjp.domain.ListType; +import uk.gov.moj.cpp.sjp.event.processor.service.CourtListPublishingService; import uk.gov.moj.cpp.sjp.event.processor.service.ReferenceDataOffencesService; import uk.gov.moj.cpp.sjp.event.processor.service.ReferenceDataService; import uk.gov.moj.cpp.sjp.event.processor.service.SjpService; import uk.gov.moj.cpp.sjp.event.processor.utils.PayloadHelper; +import java.io.IOException; import java.io.InputStream; +import java.io.StringReader; import java.time.DayOfWeek; import java.time.LocalDate; import java.time.LocalDateTime; @@ -63,6 +65,7 @@ import java.util.UUID; import java.util.function.Function; +import javax.json.Json; import javax.json.JsonArray; import javax.json.JsonArrayBuilder; import javax.json.JsonObject; @@ -81,7 +84,6 @@ public class PressTransparencyReportRequestedProcessorTest { private static final DateTimeFormatter DOB_FORMAT = DateTimeFormatter.ofPattern("yyyy-MM-dd"); - private static final String PUBLIC_EVENT_SJP_PENDING_CASES_PUBLIC_LIST_GENERATED = "public.sjp.press-transparency-report-generated"; private static final String STORE_PRESS_TRANSPARENCY_REPORT_DATA_COMMAND = "sjp.command.store-press-transparency-report-data"; private static final String EXPECTED_TEMPLATE_NAME_DELTA = "PressPendingCasesDeltaEnglish"; private static final String EXPECTED_TEMPLATE_NAME_FULL = "PressPendingCasesFullEnglish"; @@ -164,6 +166,8 @@ public class PressTransparencyReportRequestedProcessorTest { private PayloadHelper payloadHelper; @Mock private SjpService sjpService; + @Mock + private CourtListPublishingService courtListPublishingService; @Captor private ArgumentCaptor payloadForDocumentGenerationCaptor; @Captor @@ -171,7 +175,7 @@ public class PressTransparencyReportRequestedProcessorTest { @Captor private ArgumentCaptor storePressTransparencyReportCommandEnvelopeCaptor; @Captor - private ArgumentCaptor defaultEnvelopeArgumentCaptor; + private ArgumentCaptor courtListPublishRequestCaptor; @BeforeEach public void setUp() throws Exception { @@ -191,33 +195,6 @@ private void mockSjpService(final List sjpService, final List pendingCasesList = pendingCasesList(CASE_IDS, false, defendantDateOfBirth, false); - - mockCommon(sjpService.getPendingDeltaCases(any(), any()), pendingCasesList); - - processor.handlePressTransparencyRequest(PRIVATE_EVENT_PDF_ENVELOPE_DELTA); - - final JsonObject actual = getDocumentGeneratorPayloadFromFileStorer(); - - actual.getJsonArray("readyCases").forEach(rc -> - assertThat(rc.toString(), isJson(withJsonPath("$.dateOfBirth", equalTo(format(getAge(defendantDateOfBirth))))))); - - assertPayloadForDocumentGenerator(actual, pendingCasesList, NUMBER_OF_PENDING_CASES_FOR_EXPORT, false); - - verify(sender).sendAsAdmin(documentGenerationRequestCaptor.capture()); - - assertDocumentGenerationRequest(documentGenerationRequestCaptor.getValue(), EXPECTED_DOC_GENERATION_PAYLOAD_DELTA); - - verify(sender, times(1)).send(storePressTransparencyReportCommandEnvelopeCaptor.capture()); - assertPressTransparencyReportEnvelope(storePressTransparencyReportCommandEnvelopeCaptor.getValue(), REPORT_ID, CASE_IDS, DocumentRequestType.DELTA); - } - @Test public void shouldCreatePressTransparencyPDFReportDelta() throws FileServiceException { @@ -282,7 +259,7 @@ public void shouldCreatePressTransparencyPDFReportFull() throws FileServiceExcep } @Test - public void shouldCreatePressTransparencyJSONReportDelta() { + public void shouldCreatePressTransparencyJSONReportDelta() throws IOException { final String defendantDateOfBirth = "1980-06-12"; @@ -291,11 +268,10 @@ public void shouldCreatePressTransparencyJSONReportDelta() { mockSjpService(sjpService.getPendingDeltaCases(any(), any()), pendingCasesList); processor.handlePressTransparencyJSONReportRequest(PRIVATE_EVENT_ENVELOPE_JSON_DELTA); - verify(sender, times(1)).send(defaultEnvelopeArgumentCaptor.capture()); - final Envelope jsonEnvelope = defaultEnvelopeArgumentCaptor.getAllValues().get(0); - assertThat(jsonEnvelope.metadata().name(), is(PUBLIC_EVENT_SJP_PENDING_CASES_PUBLIC_LIST_GENERATED)); - final JsonObject eventPayload = (JsonObject) jsonEnvelope.payload(); - final JsonObject payload = eventPayload.getJsonObject("listPayload"); + verify(courtListPublishingService, times(1)).publishCourtList(courtListPublishRequestCaptor.capture()); + final JsonObject courtListPublishRequest = Json.createReader(new StringReader(courtListPublishRequestCaptor.getValue())).readObject(); + assertThat(courtListPublishRequest.getString("listType"), is("SJP_PRESS_LIST")); + final JsonObject payload = courtListPublishRequest.getJsonObject("listPayload"); assertThat(payload.getInt("totalNumberOfRecords"), is(1)); final JsonArray readyCases = payload.getJsonArray("readyCases"); assertThat(1, is(readyCases.size())); @@ -307,7 +283,7 @@ public void shouldCreatePressTransparencyJSONReportDelta() { } @Test - public void shouldCreatePressTransparencyJSONReportFull() { + public void shouldCreatePressTransparencyJSONReportFull() throws IOException { final String defendantDateOfBirth = "1980-06-12"; @@ -316,11 +292,10 @@ public void shouldCreatePressTransparencyJSONReportFull() { mockSjpService(sjpService.getPendingCases(any(), any()), pendingCasesList); processor.handlePressTransparencyJSONReportRequest(PRIVATE_EVENT_ENVELOPE_JSON_FULL); - verify(sender, times(1)).send(defaultEnvelopeArgumentCaptor.capture()); - final Envelope jsonEnvelope = defaultEnvelopeArgumentCaptor.getAllValues().get(0); - assertThat(jsonEnvelope.metadata().name(), is(PUBLIC_EVENT_SJP_PENDING_CASES_PUBLIC_LIST_GENERATED)); - final JsonObject eventPayload = (JsonObject) jsonEnvelope.payload(); - final JsonObject payload = eventPayload.getJsonObject("listPayload"); + verify(courtListPublishingService, times(1)).publishCourtList(courtListPublishRequestCaptor.capture()); + final JsonObject courtListPublishRequest = Json.createReader(new StringReader(courtListPublishRequestCaptor.getValue())).readObject(); + assertThat(courtListPublishRequest.getString("listType"), is("SJP_PRESS_LIST")); + final JsonObject payload = courtListPublishRequest.getJsonObject("listPayload"); assertThat(payload.getInt("totalNumberOfRecords"), is(1)); final JsonArray readyCases = payload.getJsonArray("readyCases"); assertThat(1, is(readyCases.size())); @@ -341,44 +316,6 @@ private JsonObject getDocumentGeneratorPayloadFromFileStorer() throws FileServic return streamToJsonObject(payloadBytes); } - @Test - @SuppressWarnings("deprecation") - public void shouldCreatePressTransparencyWhenNoDateOfBirthReport() throws FileServiceException { - - final String defendantDateOfBirth = ""; - - final List pendingCasesList = pendingCasesList(CASE_IDS, false, defendantDateOfBirth, false); - - mockCommon(sjpService.getPendingDeltaCases(any(), any()), pendingCasesList); - - processor.handlePressTransparencyRequest(PRIVATE_EVENT_PDF_ENVELOPE_DELTA); - - final JsonObject actual = getDocumentGeneratorPayloadFromFileStorer(); - - assertThat(actual.containsKey("dateOfBirth"), is(false)); - - - } - - @Test - @SuppressWarnings("deprecation") - public void shouldExcludeYouthDefendants() throws FileServiceException { - - final String defendantDateOfBirth = "1980-06-12"; - - final List pendingCasesList = pendingCasesList(CASE_IDS, true, defendantDateOfBirth, false); - - mockCommon(sjpService.getPendingDeltaCases(any(), any()), pendingCasesList); - - processor.handlePressTransparencyRequest(PRIVATE_EVENT_PDF_ENVELOPE_DELTA); - - verify(fileStorer).store(any(JsonObject.class), payloadForDocumentGenerationCaptor.capture()); - - final InputStream payloadBytes = payloadForDocumentGenerationCaptor.getValue(); - final JsonObject payloadForDocumentGenerator = streamToJsonObject(payloadBytes); - - } - @Test public void shouldCreatePressTransparencyPDFWhenNoDateOfBirthReport() throws FileServiceException { diff --git a/sjp-event/sjp-event-processor/src/test/java/uk/gov/moj/cpp/sjp/event/processor/TransparencyReportRequestedProcessorTest.java b/sjp-event/sjp-event-processor/src/test/java/uk/gov/moj/cpp/sjp/event/processor/TransparencyReportRequestedProcessorTest.java index e34e2faab9..0154b6dc29 100644 --- a/sjp-event/sjp-event-processor/src/test/java/uk/gov/moj/cpp/sjp/event/processor/TransparencyReportRequestedProcessorTest.java +++ b/sjp-event/sjp-event-processor/src/test/java/uk/gov/moj/cpp/sjp/event/processor/TransparencyReportRequestedProcessorTest.java @@ -4,10 +4,8 @@ import static java.util.UUID.randomUUID; import static java.util.stream.Collectors.toList; import static java.util.stream.IntStream.range; -import static org.hamcrest.CoreMatchers.not; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.everyItem; -import static org.hamcrest.Matchers.isEmptyOrNullString; import static org.hamcrest.Matchers.isIn; import static org.hamcrest.core.Is.is; import static org.hamcrest.core.IsNull.notNullValue; @@ -29,21 +27,24 @@ import uk.gov.justice.services.messaging.Envelope; import uk.gov.justice.services.messaging.JsonEnvelope; import uk.gov.justice.services.messaging.Metadata; -import uk.gov.justice.services.messaging.spi.DefaultEnvelope; import uk.gov.moj.cpp.sjp.domain.DocumentFormat; import uk.gov.moj.cpp.sjp.domain.DocumentRequestType; +import uk.gov.moj.cpp.sjp.event.processor.service.CourtListPublishingService; import uk.gov.moj.cpp.sjp.event.processor.service.ReferenceDataOffencesService; import uk.gov.moj.cpp.sjp.event.processor.service.ReferenceDataService; import uk.gov.moj.cpp.sjp.event.processor.service.SjpService; import uk.gov.moj.cpp.sjp.event.processor.utils.PayloadHelper; +import java.io.IOException; import java.io.InputStream; +import java.io.StringReader; import java.time.LocalDate; import java.util.LinkedList; import java.util.List; import java.util.Objects; import java.util.UUID; +import javax.json.Json; import javax.json.JsonArray; import javax.json.JsonArrayBuilder; import javax.json.JsonObject; @@ -60,8 +61,6 @@ @ExtendWith(MockitoExtension.class) public class TransparencyReportRequestedProcessorTest { - private static final String PUBLIC_EVENT_SJP_PENDING_CASES_PUBLIC_LIST_GENERATED = "public.sjp.pending-cases-public-list-generated"; - @InjectMocks private TransparencyReportRequestedProcessor processor; @@ -80,6 +79,9 @@ public class TransparencyReportRequestedProcessorTest { @Mock private SjpService sjpService; + @Mock + private CourtListPublishingService courtListPublishingService; + @Captor private ArgumentCaptor payloadForFileServiceCaptor; @@ -90,75 +92,11 @@ public class TransparencyReportRequestedProcessorTest { private ArgumentCaptor storeTransparencyReportCommandEnvelopeCaptor; @Captor - private ArgumentCaptor defaultEnvelopeArgumentCaptor; + private ArgumentCaptor courtListPublishRequestCaptor; @Mock private PayloadHelper payloadHelper; - @Test - @SuppressWarnings("deprecation") - public void shouldCreateTransparencyReport() throws FileServiceException { - final UUID englishPayloadFileUUID = randomUUID(); - final UUID welshPayloadFileUUID = randomUUID(); - final UUID transparencyReportId = randomUUID(); - final String expectedEnglishTemplateName = "PublicPendingCasesFullEnglish"; - - final String offenceTitle = "OffenceTitle"; - final String prosecutorName = "TFL"; - final String prosecutorEnglish = "Transport For London"; - final String prosecutorWelsh = "Transport For London - Welsh"; - final Integer numberOfPendingCasesForExport = 9; - final List caseIds = range(0, numberOfPendingCasesForExport) - .mapToObj(e -> randomUUID()).collect(toList()); - - // create 5 young offenders - final List youngOffenderCaseIds = range(0, 5) - .mapToObj(e -> randomUUID()).collect(toList()); - - // create 5 press restricted case ids - final List pressRestrictionCaseIds = range(0, 5) - .mapToObj(e -> randomUUID()).collect(toList()); - - when(payloadHelper.buildOffenceTitleFromOffenceArray(any(), eq(false), any())).thenReturn(offenceTitle); - when(payloadHelper.buildOffenceTitleFromOffenceArray(any(), eq(true), any())).thenReturn(offenceTitle); - when(payloadHelper.mapOffenceIntoOffenceTitleString(any(), eq(false), any())).thenReturn(offenceTitle); - when(payloadHelper.mapOffenceIntoOffenceTitleString(any(), eq(true), any())).thenReturn(offenceTitle); - when(payloadHelper.buildProsecutorName(eq(prosecutorName), eq(false), any())).thenReturn(prosecutorEnglish); - when(payloadHelper.buildProsecutorName(eq(prosecutorName), eq(true), any())).thenReturn(prosecutorWelsh); - when(payloadHelper.getStartDate(eq(false))).thenReturn("15 January 2024"); - when(payloadHelper.getStartDate(eq(true))).thenReturn("ers 21 Tachwedd"); - when(payloadHelper.getTemplateIdentifier(any(), any(), any())).thenReturn(expectedEnglishTemplateName); - - final List pendingCasesList = pendingCasesList(caseIds, youngOffenderCaseIds, pressRestrictionCaseIds); - when(sjpService.getPendingCases(any(), any())).thenReturn(pendingCasesList); - when(fileStorer.store(any(), any())) - .thenReturn(englishPayloadFileUUID) - .thenReturn(welshPayloadFileUUID); - - final JsonEnvelope privateEventEnvelope = envelopeFrom( - metadataWithRandomUUID("sjp.events.transparency-report-requested"), - createObjectBuilder() - .add("transparencyReportId", transparencyReportId.toString()) - .add("requestType", DocumentRequestType.FULL.name()) - .add("language", "ENGLISH") - .add("format", DocumentFormat.PDF.name()) - .build() - ); - processor.createTransparencyReport(privateEventEnvelope); - - verify(fileStorer, times(2)).store(any(JsonObject.class), payloadForFileServiceCaptor.capture()); - verify(sender, times(2)).sendAsAdmin(payloadForDocumentGenerationCaptor.capture()); - - final JsonObject payloadForEnglishPdf = streamToJsonObject(payloadForFileServiceCaptor.getAllValues().get(0)); - final JsonObject payloadForWelshPdf = streamToJsonObject(payloadForFileServiceCaptor.getAllValues().get(1)); - - assertPayloadForDocumentGenerator(payloadForEnglishPdf, pendingCasesList, numberOfPendingCasesForExport, false); - assertPayloadForDocumentGenerator(payloadForWelshPdf, pendingCasesList, numberOfPendingCasesForExport, true); - - verify(sender, times(1)).send(storeTransparencyReportCommandEnvelopeCaptor.capture()); - assertTransparencyReportEnvelope(storeTransparencyReportCommandEnvelopeCaptor.getAllValues().get(0), transparencyReportId, caseIds); - } - @Test public void shouldCreateTransparencyPDFReportFULL() throws FileServiceException { final String expectedEnglishTemplateName = "PublicPendingCasesFullEnglish"; @@ -273,7 +211,7 @@ public void shouldCreateTransparencyPDFReportDELTA() throws FileServiceException } @Test - public void shouldCreateTransparencyReportJSONFull() throws FileServiceException { + public void shouldCreateTransparencyReportJSONFull() throws FileServiceException, IOException { final String expectedEnglishTemplateName = "PublicPendingCasesFullEnglish"; final UUID englishPayloadFileUUID = randomUUID(); final UUID welshPayloadFileUUID = randomUUID(); @@ -313,11 +251,10 @@ public void shouldCreateTransparencyReportJSONFull() throws FileServiceException ); processor.createTransparencyJSONReport(privateEventEnvelope); - verify(sender, times(1)).send(defaultEnvelopeArgumentCaptor.capture()); - final Envelope jsonEnvelope = defaultEnvelopeArgumentCaptor.getAllValues().get(0); - assertThat(jsonEnvelope.metadata().name(), is(PUBLIC_EVENT_SJP_PENDING_CASES_PUBLIC_LIST_GENERATED)); - final JsonObject eventPayload = (JsonObject) jsonEnvelope.payload(); - final JsonObject payload = eventPayload.getJsonObject("listPayload"); + verify(courtListPublishingService, times(1)).publishCourtList(courtListPublishRequestCaptor.capture()); + final JsonObject courtListPublishRequest = Json.createReader(new StringReader(courtListPublishRequestCaptor.getValue())).readObject(); + assertThat(courtListPublishRequest.getString("listType"), is("SJP_PUBLISH_LIST")); + final JsonObject payload = courtListPublishRequest.getJsonObject("listPayload"); assertThat(payload.getInt("totalNumberOfRecords"), is(9)); final JsonArray readyCases = payload.getJsonArray("readyCases"); assertThat(9, is(readyCases.size())); @@ -387,22 +324,6 @@ public void shouldCreateTransparencyReportJSONDELTA() throws FileServiceExceptio verify(sender, times(1)).send(storeTransparencyReportCommandEnvelopeCaptor.capture()); } - private void assertSJPPendingPublicListEnvelope(final Envelope jsonEnvelope, final String language, final Integer numberOfPendingCasesForExport, final String prosecutorName) { - assertThat(jsonEnvelope.metadata().name(), is(PUBLIC_EVENT_SJP_PENDING_CASES_PUBLIC_LIST_GENERATED)); - final JsonObject eventPayload = (JsonObject) jsonEnvelope.payload(); - final JsonObject payload = eventPayload.getJsonObject("listPayload"); - assertThat(payload.getInt("totalNumberOfRecords"), is(numberOfPendingCasesForExport)); - final JsonArray readyCases = payload.getJsonArray("readyCases"); - assertThat(numberOfPendingCasesForExport, is(readyCases.size())); - readyCases.getValuesAs(JsonObject.class).forEach(jsonObject -> { - assertThat(jsonObject.getString("prosecutorName"), is(prosecutorName)); - assertThat(jsonObject.getJsonArray("sjpOffences"), notNullValue()); - assertThat(jsonObject.getString("firstName"), not(isEmptyOrNullString())); - assertThat(jsonObject.getString("lastName"), not(isEmptyOrNullString())); - }); - } - - private void assertPayloadForDocumentGenerator(final JsonObject payload, final List pendingCasesList, final Integer totalNumberOfRecords, final Boolean isWelsh) { assertReadyCasesPayloadWithPendingCases(payload, pendingCasesList, "postcode"); diff --git a/sjp-event/sjp-event-processor/src/yaml/json/schema/public.sjp.pending-cases-public-list-generated.json b/sjp-event/sjp-event-processor/src/yaml/json/schema/public.sjp.pending-cases-public-list-generated.json deleted file mode 100644 index a4dc7303cc..0000000000 --- a/sjp-event/sjp-event-processor/src/yaml/json/schema/public.sjp.pending-cases-public-list-generated.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-04/schema#", - "id": "http://cpp.moj.gov.uk/sjp/json/schema/event/public.sjp.pending-cases-public-list-generated.json", - "type": "object", - "properties": { - "requestType": { - "enum": [ - "FULL", - "DELTA" - ] - }, - "language": { - "enum": [ - "ENGLISH", - "WELSH", - "BI_LINGUAL" - ] - }, - "listPayload": { - "type": "object", - "properties": { - "generatedDateAndTime": { - "type": "string" - }, - "totalNumberOfRecords": { - "type": "integer" - }, - "startDate": { - "type": "string" - }, - "readyCases": { - "type": "array", - "items": { - "type": "object", - "properties": { - "defendantName": { - "type": "string" - }, - "prosecutorName": { - "type": "string" - }, - "legalEntityName": { - "type": "string" - }, - "firstName": { - "type": "string" - }, - "lastName": { - "type": "string" - }, - "postcode": { - "type": "string" - }, - "sjpOffences": { - "type": "array", - "items": { - "type": "object", - "properties": { - "title": { - "type": "string" - } - } - } - } - } - } - } - }, - "required": [ - "generatedDateAndTime", - "totalNumberOfRecords", - "readyCases" - ], - "additionalProperties": false - } - }, - "required": [ - "language", - "listPayload" - ], - "additionalProperties": false -} \ No newline at end of file diff --git a/sjp-event/sjp-event-processor/src/yaml/json/schema/public.sjp.press-transparency-report-generated.json b/sjp-event/sjp-event-processor/src/yaml/json/schema/public.sjp.press-transparency-report-generated.json deleted file mode 100644 index 4d7c48226a..0000000000 --- a/sjp-event/sjp-event-processor/src/yaml/json/schema/public.sjp.press-transparency-report-generated.json +++ /dev/null @@ -1,114 +0,0 @@ -{ - "$schema":"http://json-schema.org/draft-04/schema#", - "id":"http://cpp.moj.gov.uk/sjp/json/schema/event/public.sjp.press-transparency-report-generated.json", - "type":"object", - "properties":{ - "requestType": { - "type": "string", - "enum": [ - "FULL", - "DELTA" - ] - }, - "language":{ - "enum":[ - "ENGLISH", - "WELSH", - "BI_LINGUAL" - ] - }, - "listPayload":{ - "type":"object", - "properties":{ - "generatedDateAndTime":{ - "type":"string" - }, - "totalNumberOfRecords":{ - "type":"integer" - }, - "readyCases":{ - "type":"array", - "items":{ - "type":"object", - "properties":{ - "caseUrn":{ - "type":"string" - }, - "defendantName":{ - "type":"string" - }, - "dateOfBirth":{ - "type":"string" - }, - "age":{ - "type":"string" - }, - "prosecutorName":{ - "type":"string" - }, - "legalEntityName":{ - "type":"string" - }, - "title":{ - "type":"string" - }, - "firstName":{ - "type":"string" - }, - "lastName":{ - "type":"string" - }, - "addressLine1":{ - "type":"string" - }, - "addressLine2":{ - "type":"string" - }, - "addressLine3":{ - "type":"string" - }, - "town":{ - "type":"string" - }, - "county":{ - "type":"string" - }, - "postcode":{ - "type":"string" - }, - "sjpOffences":{ - "type":"array", - "items":{ - "type":"object", - "properties":{ - "title":{ - "type":"string" - }, - "wording":{ - "type":"string" - }, - "reportingRestriction":{ - "type":"boolean" - }, - "pressRestrictionName":{ - "type":"string" - } - } - } - } - } - } - } - }, - "required":[ - "generatedDateAndTime", - "totalNumberOfRecords", - "readyCases" - ] - } - }, - "required":[ - "language", - "listPayload" - ] -} \ No newline at end of file diff --git a/sjp-event/sjp-event-processor/src/yaml/json/schema/sjp.events.transparency-report-requested.json b/sjp-event/sjp-event-processor/src/yaml/json/schema/sjp.events.transparency-report-requested.json deleted file mode 100644 index 20a1091d60..0000000000 --- a/sjp-event/sjp-event-processor/src/yaml/json/schema/sjp.events.transparency-report-requested.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-04/schema#", - "id": "http://justice.gov.uk/json/schemas/domains/sjp/events/transparency-report-requested.json", - "type": "object", - "properties": { - "requestedAt": { - "$ref": "http://justice.gov.uk/json/schemas/domains/sjp/temporal.json#/definitions/date-time" - }, - "transparencyReportId" : { - "$ref": "http://justice.gov.uk/domain/core/common/definitions.json#/definitions/uuid" - } - }, - "required": [ - "transparencyReportId", - "requestedAt" - ], - "additionalProperties": false -} diff --git a/sjp-event/sjp-event-processor/src/yaml/json/sjp.events.transparency-report-requested.json b/sjp-event/sjp-event-processor/src/yaml/json/sjp.events.transparency-report-requested.json deleted file mode 100644 index 78b1a1887c..0000000000 --- a/sjp-event/sjp-event-processor/src/yaml/json/sjp.events.transparency-report-requested.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "requestedAt": "2018-02-05T15:14:29.894Z", - "transparencyReportId" : "60ca064a-3d25-4157-a3d1-94e99d00c5a1" -} \ No newline at end of file diff --git a/sjp-event/sjp-event-processor/src/yaml/public-publications-descriptor.yaml b/sjp-event/sjp-event-processor/src/yaml/public-publications-descriptor.yaml index fb12a32995..1d41eeb064 100644 --- a/sjp-event/sjp-event-processor/src/yaml/public-publications-descriptor.yaml +++ b/sjp-event/sjp-event-processor/src/yaml/public-publications-descriptor.yaml @@ -140,15 +140,9 @@ subscriptions_descriptor: - name: public.sjp.events.conviction-court-resolved schema_uri: http://justice.gov.uk/json/schemas/domains/sjp/events/public.sjp.events.conviction-court-resolved.json - - name: public.sjp.pending-cases-public-list-generated - schema_uri: http://cpp.moj.gov.uk/sjp/json/schema/event/public.sjp.pending-cases-public-list-generated.json - - name: public.sjp.case-legal-soc-checked schema_uri: http://cpp.moj.gov.uk/sjp/json/schema/event/public.sjp.marked-as-legal-soc-checked.json - - name: public.sjp.press-transparency-report-generated - schema_uri: http://cpp.moj.gov.uk/sjp/json/schema/event/public.sjp.press-transparency-report-generated.json - - name: public.sjp.case-reserved schema_uri: http://cpp.moj.gov.uk/sjp/json/schema/event/public.sjp.case-reserved.json diff --git a/sjp-event/sjp-event-processor/src/yaml/subscriptions-descriptor.yaml b/sjp-event/sjp-event-processor/src/yaml/subscriptions-descriptor.yaml index 0cdee4dae1..1777d81b93 100644 --- a/sjp-event/sjp-event-processor/src/yaml/subscriptions-descriptor.yaml +++ b/sjp-event/sjp-event-processor/src/yaml/subscriptions-descriptor.yaml @@ -131,18 +131,12 @@ subscriptions_descriptor: - name: sjp.events.case-adjourned-to-later-sjp-hearing-recorded schema_uri: http://cpp.moj.gov.uk/sjp/event/case-adjourned-to-later-sjp-hearing-recorded.json - - name: sjp.events.transparency-report-requested - schema_uri: http://justice.gov.uk/json/schemas/domains/sjp/events/transparency-report-requested.json - - name: sjp.events.transparency-pdf-report-requested schema_uri: http://justice.gov.uk/json/schemas/domains/sjp/events/transparency-pdf-report-requested.json - name: sjp.events.transparency-json-report-requested schema_uri: http://justice.gov.uk/json/schemas/domains/sjp/events/transparency-json-report-requested.json - - name: sjp.events.press-transparency-report-requested - schema_uri: http://justice.gov.uk/json/schemas/domains/sjp/events/press-transparency-report-requested.json - - name: sjp.events.press-transparency-pdf-report-requested schema_uri: http://justice.gov.uk/json/schemas/domains/sjp/events/press-transparency-pdf-report-requested.json diff --git a/sjp-integration-test/src/test/java/uk/gov/moj/sjp/it/stub/CourtListPublishingServiceStub.java b/sjp-integration-test/src/test/java/uk/gov/moj/sjp/it/stub/CourtListPublishingServiceStub.java new file mode 100644 index 0000000000..de9f243a35 --- /dev/null +++ b/sjp-integration-test/src/test/java/uk/gov/moj/sjp/it/stub/CourtListPublishingServiceStub.java @@ -0,0 +1,51 @@ +package uk.gov.moj.sjp.it.stub; + +import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; +import static com.github.tomakehurst.wiremock.client.WireMock.findAll; +import static com.github.tomakehurst.wiremock.client.WireMock.post; +import static com.github.tomakehurst.wiremock.client.WireMock.postRequestedFor; +import static com.github.tomakehurst.wiremock.client.WireMock.stubFor; +import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo; +import static java.util.Collections.emptyList; +import static java.util.concurrent.TimeUnit.SECONDS; +import static java.util.stream.Collectors.toList; +import static org.apache.http.HttpStatus.SC_OK; +import static org.awaitility.Awaitility.await; +import static uk.gov.moj.sjp.it.util.RestPollerWithDefaults.POLL_INTERVAL; +import static uk.gov.moj.sjp.it.util.RestPollerWithDefaults.TIMEOUT_IN_SECONDS; + +import java.util.Collection; +import java.util.List; + +import com.github.tomakehurst.wiremock.verification.LoggedRequest; +import org.awaitility.core.ConditionTimeoutException; +import org.hamcrest.Matcher; +import org.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class CourtListPublishingServiceStub { + + private static final String PUBLISH_COURT_LIST_URL = "/court-list-publish/sjp/publishCourtList"; + private final static Logger LOGGER = LoggerFactory.getLogger(CourtListPublishingServiceStub.class); + + public static void stubPublishCourtListEndpoint() { + stubFor(post(urlPathEqualTo(PUBLISH_COURT_LIST_URL)) + .willReturn(aResponse().withStatus(SC_OK))); + } + + public static List pollCourtListPublishRequests(final Matcher> matcher) { + try { + return await().pollInterval(POLL_INTERVAL) + .atMost(TIMEOUT_IN_SECONDS, SECONDS).until(() -> + findAll(postRequestedFor(urlPathEqualTo(PUBLISH_COURT_LIST_URL))) + .stream() + .map(LoggedRequest::getBodyAsString) + .map(JSONObject::new) + .collect(toList()), matcher); + } catch (final ConditionTimeoutException timeoutException) { + LOGGER.info("Exception while finding the captured requests in wire mock:" + timeoutException); + return emptyList(); + } + } +} diff --git a/sjp-integration-test/src/test/java/uk/gov/moj/sjp/it/test/PressTransparencyReportIT.java b/sjp-integration-test/src/test/java/uk/gov/moj/sjp/it/test/PressTransparencyReportIT.java index 59b2a2b408..ea4b60a1bd 100644 --- a/sjp-integration-test/src/test/java/uk/gov/moj/sjp/it/test/PressTransparencyReportIT.java +++ b/sjp-integration-test/src/test/java/uk/gov/moj/sjp/it/test/PressTransparencyReportIT.java @@ -22,6 +22,8 @@ import static uk.gov.moj.sjp.it.stub.ReferenceDataServiceStub.stubAllReferenceData; import static uk.gov.moj.sjp.it.stub.ReferenceDataServiceStub.stubAnyQueryOffences; import static uk.gov.moj.sjp.it.stub.ReferenceDataServiceStub.stubEnforcementAreaByPostcode; +import static uk.gov.moj.sjp.it.stub.CourtListPublishingServiceStub.pollCourtListPublishRequests; +import static uk.gov.moj.sjp.it.stub.CourtListPublishingServiceStub.stubPublishCourtListEndpoint; import static uk.gov.moj.sjp.it.stub.ReferenceDataServiceStub.stubProsecutorQuery; import static uk.gov.moj.sjp.it.stub.ReferenceDataServiceStub.stubRegionByPostcode; import static uk.gov.moj.sjp.it.stub.SysDocGeneratorStub.pollSysDocGenerationRequests; @@ -68,7 +70,6 @@ public class PressTransparencyReportIT extends BaseIntegrationTest { private static final String SJP_EVENTS_PRESS_TRANSPARENCY_REPORT_GENERATION_STARTED = "sjp.events.press-transparency-pdf-report-generation-started"; private static final String SJP_EVENTS_PRESS_TRANSPARENCY_REPORT_METADATA_ADDED = "sjp.events.press-transparency-pdf-report-metadata-added"; private static final String SJP_EVENTS_PRESS_TRANSPARENCY_REPORT_GENERATION_FAILED = "sjp.events.press-transparency-pdf-report-generation-failed"; - private static final String SJP_PUBLIC_EVENT_PRESS_TRANSPARENCY_REPORT_GENERATED = "public.sjp.press-transparency-report-generated"; private final UUID caseId1 = randomUUID(), caseId2 = randomUUID(); private final UUID offenceId1 = randomUUID(), offenceId2 = randomUUID(); private PressTransparencyReportHelper pressTransparencyReportHelper = new PressTransparencyReportHelper(); @@ -78,6 +79,7 @@ public void beforeEachTest() throws Exception { resetAllRequests(); cleanViewStore(); stubGenerateDocumentEndPoint(); + stubPublishCourtListEndpoint(); stubAllIndividualProsecutorsQueries(); stubAnyQueryOffences(); stubAllReferenceData(); @@ -197,28 +199,19 @@ public void shouldGeneratePressTransparencyJsonReports() { final EventListener eventListener = new EventListener() .withMaxWaitTime(50000) - .subscribe( - SJP_EVENTS_PRESS_TRANSPARENCY_REPORT_REQUESTED_JSON, - SJP_PUBLIC_EVENT_PRESS_TRANSPARENCY_REPORT_GENERATED - ) + .subscribe(SJP_EVENTS_PRESS_TRANSPARENCY_REPORT_REQUESTED_JSON) .run(() -> pressTransparencyReportHelper.requestToGeneratePressTransparencyReport(payload)); final Optional transparencyReportRequestedEvent = eventListener.popEvent(SJP_EVENTS_PRESS_TRANSPARENCY_REPORT_REQUESTED_JSON); - final Optional transparencyReportStartedEvent = eventListener.popEvent(SJP_PUBLIC_EVENT_PRESS_TRANSPARENCY_REPORT_GENERATED); - assertThat(transparencyReportRequestedEvent.isPresent(), is(true)); - assertThat(transparencyReportStartedEvent.isPresent(), is(true)); - - final String pressTransparencyReportId = transparencyReportRequestedEvent - .map(requestedEvent -> requestedEvent.payloadAsJsonObject().getString("pressTransparencyReportId")) - .orElse(""); + final List courtListPublishRequests = pollCourtListPublishRequests(hasSize(1)); + final JSONObject courtListPublishRequest = courtListPublishRequests.get(0); - final JsonEnvelope transparencyReportStartedEnvelope = transparencyReportStartedEvent.get(); - final JsonObject transparencyReportStartedPayload = transparencyReportStartedEnvelope.payloadAsJsonObject(); + assertThat(courtListPublishRequest.getString("listType"), is("SJP_PRESS_LIST")); - JsonArray readyCases = transparencyReportStartedPayload.getJsonObject("listPayload").getJsonArray("readyCases"); - assertThat(readyCases.size(), is(2)); + final JSONObject listPayload = courtListPublishRequest.getJSONObject("listPayload"); + assertThat(listPayload.getJSONArray("readyCases").length(), is(2)); } @Test diff --git a/sjp-integration-test/src/test/java/uk/gov/moj/sjp/it/test/TransparencyReportIT.java b/sjp-integration-test/src/test/java/uk/gov/moj/sjp/it/test/TransparencyReportIT.java index 22900113b1..0e64566547 100644 --- a/sjp-integration-test/src/test/java/uk/gov/moj/sjp/it/test/TransparencyReportIT.java +++ b/sjp-integration-test/src/test/java/uk/gov/moj/sjp/it/test/TransparencyReportIT.java @@ -22,6 +22,8 @@ import static uk.gov.moj.sjp.it.stub.ReferenceDataServiceStub.stubAllReferenceData; import static uk.gov.moj.sjp.it.stub.ReferenceDataServiceStub.stubAnyQueryOffences; import static uk.gov.moj.sjp.it.stub.ReferenceDataServiceStub.stubEnforcementAreaByPostcode; +import static uk.gov.moj.sjp.it.stub.CourtListPublishingServiceStub.pollCourtListPublishRequests; +import static uk.gov.moj.sjp.it.stub.CourtListPublishingServiceStub.stubPublishCourtListEndpoint; import static uk.gov.moj.sjp.it.stub.ReferenceDataServiceStub.stubProsecutorQuery; import static uk.gov.moj.sjp.it.stub.ReferenceDataServiceStub.stubRegionByPostcode; import static uk.gov.moj.sjp.it.stub.SysDocGeneratorStub.pollSysDocGenerationRequests; @@ -67,7 +69,6 @@ public class TransparencyReportIT extends BaseIntegrationTest { private static final String SJP_EVENTS_TRANSPARENCY_REPORT_GENERATION_STARTED = "sjp.events.transparency-pdf-report-generation-started"; private static final String SJP_EVENTS_TRANSPARENCY_REPORT_METADATA_ADDED = "sjp.events.transparency-pdf-report-metadata-added"; private static final String SJP_EVENTS_TRANSPARENCY_REPORT_GENERATION_FAILED = "sjp.events.transparency-pdf-report-generation-failed"; - private static final String SJP_PUBLIC_EVENT_TRANSPARENCY_REPORT_GENERATED = "public.sjp.pending-cases-public-list-generated"; public static final String TRANSPARENCY_REPORT_ID = "transparencyReportId"; private final UUID caseId1 = randomUUID(), caseId2 = randomUUID(); @@ -79,9 +80,11 @@ public void beforeEachTest() throws Exception { resetAllRequests(); cleanViewStore(); stubGenerateDocumentEndPoint(); + stubPublishCourtListEndpoint(); stubAllIndividualProsecutorsQueries(); stubAnyQueryOffences(); stubAllReferenceData(); + setupIdMapperStub(); } @@ -199,23 +202,19 @@ public void shouldGenerateTransparencyJsonReports() { final EventListener eventListener = new EventListener() .withMaxWaitTime(50000) - .subscribe( - SJP_EVENTS_TRANSPARENCY_REPORT_REQUESTED_JSON, - SJP_PUBLIC_EVENT_TRANSPARENCY_REPORT_GENERATED - ) + .subscribe(SJP_EVENTS_TRANSPARENCY_REPORT_REQUESTED_JSON) .run(() -> transparencyReportHelper.requestToGenerateTransparencyReport(payload)); final Optional transparencyReportRequestedEvent = eventListener.popEvent(SJP_EVENTS_TRANSPARENCY_REPORT_REQUESTED_JSON); - final Optional transparencyReportStartedEvent = eventListener.popEvent(SJP_PUBLIC_EVENT_TRANSPARENCY_REPORT_GENERATED); - assertThat(transparencyReportRequestedEvent.isPresent(), is(true)); - assertThat(transparencyReportStartedEvent.isPresent(), is(true)); - final JsonEnvelope transparencyReportStartedEnvelope = transparencyReportStartedEvent.get(); - final JsonObject transparencyReportStartedPayload = transparencyReportStartedEnvelope.payloadAsJsonObject(); + final List courtListPublishRequests = pollCourtListPublishRequests(hasSize(1)); + final JSONObject courtListPublishRequest = courtListPublishRequests.get(0); + + assertThat(courtListPublishRequest.getString("listType"), is("SJP_PUBLISH_LIST")); - JsonArray readyCases = transparencyReportStartedPayload.getJsonObject("listPayload").getJsonArray("readyCases"); - assertThat(readyCases.size(), is(2)); + final JSONObject listPayload = courtListPublishRequest.getJSONObject("listPayload"); + assertThat(listPayload.getJSONArray("readyCases").length(), is(2)); } @Test