diff --git a/listing-query/listing-query-api/src/main/java/uk/gov/moj/cpp/listing/query/api/HearingQueryApi.java b/listing-query/listing-query-api/src/main/java/uk/gov/moj/cpp/listing/query/api/HearingQueryApi.java index 627a80017..e74695ad5 100644 --- a/listing-query/listing-query-api/src/main/java/uk/gov/moj/cpp/listing/query/api/HearingQueryApi.java +++ b/listing-query/listing-query-api/src/main/java/uk/gov/moj/cpp/listing/query/api/HearingQueryApi.java @@ -9,6 +9,7 @@ import static uk.gov.justice.services.messaging.Envelope.metadataFrom; import static uk.gov.justice.services.messaging.JsonEnvelope.envelopeFrom; import static uk.gov.justice.services.messaging.JsonObjects.createObjectBuilderWithFilter; +import static uk.gov.moj.cpp.listing.domain.CourtListType.ALPHABETICAL; import static uk.gov.moj.cpp.listing.domain.CourtListType.ONLINE_PUBLIC; import static uk.gov.moj.cpp.listing.domain.CourtListType.PUBLIC; @@ -25,6 +26,7 @@ import uk.gov.moj.cpp.listing.common.xhibit.ReferenceDataLoader; import uk.gov.moj.cpp.listing.domain.CourtListType; import uk.gov.moj.cpp.listing.domain.referencedata.OrganisationUnit; +import uk.gov.moj.cpp.listing.query.api.service.AlphabeticalCourtListService; import uk.gov.moj.cpp.listing.query.api.service.ReferenceDataService; import uk.gov.moj.cpp.listing.query.document.generator.JudiciaryNameMapper; import uk.gov.moj.cpp.listing.query.document.generator.StandardPublicCourtListTemplateAssembler; @@ -103,6 +105,9 @@ public class HearingQueryApi { @Inject private StandardPublicCourtListTemplateAssembler standardPublicCourtListAssembler; + @Inject + private AlphabeticalCourtListService alphabeticalCourtListService; + @Inject private ReferenceDataService referenceDataService; @@ -192,7 +197,9 @@ public JsonEnvelope searchHearingsForCourtListPayload(final JsonEnvelope query) if(courtListType.isPresent()) { final JsonEnvelope queryResponse = hearingQueryView.getCourtListContent(query); - final Optional courtListData = standardPublicCourtListAssembler.assemble(queryResponse, courtCentreId, courtRoomId, courtListType.get(), restricted, includeApplications); + final Optional courtListData = ALPHABETICAL.equals(courtListType.get()) + ? alphabeticalCourtListService.buildAlphabeticalCourtListData(queryResponse, courtCentreId) + : standardPublicCourtListAssembler.assemble(queryResponse, courtCentreId, courtRoomId, courtListType.get(), restricted, includeApplications); if (courtListData.isPresent()) { final JsonObject courtListPayload = courtListData.get(); final boolean isWelsh = referenceDataService.isHearingLanguageWelsh(queryResponse, courtCentreId).orElse(false); @@ -519,7 +526,7 @@ private JsonEnvelope processGetCaseByDefendant(final JsonObject payload, final S } private String getTemplateName(final CourtListType courtListType, boolean welsh) { - if ((PUBLIC.equals(courtListType) || ONLINE_PUBLIC.equals(courtListType)) && welsh) { + if ((ALPHABETICAL.equals(courtListType) || PUBLIC.equals(courtListType) || ONLINE_PUBLIC.equals(courtListType)) && welsh) { return courtListType.getWelshTemplateName(); } return courtListType.getTemplateName(); diff --git a/listing-query/listing-query-api/src/test/java/uk/gov/moj/cpp/listing/query/api/HearingQueryApiTest.java b/listing-query/listing-query-api/src/test/java/uk/gov/moj/cpp/listing/query/api/HearingQueryApiTest.java index f26d3aa78..cd9d18b9d 100644 --- a/listing-query/listing-query-api/src/test/java/uk/gov/moj/cpp/listing/query/api/HearingQueryApiTest.java +++ b/listing-query/listing-query-api/src/test/java/uk/gov/moj/cpp/listing/query/api/HearingQueryApiTest.java @@ -21,6 +21,7 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import static uk.gov.justice.services.messaging.JsonEnvelope.envelopeFrom; @@ -31,6 +32,7 @@ import static uk.gov.justice.services.test.utils.core.matchers.JsonEnvelopeMatcher.jsonEnvelope; import static uk.gov.justice.services.test.utils.core.matchers.JsonEnvelopeMetadataMatcher.metadata; import static uk.gov.justice.services.test.utils.core.matchers.JsonEnvelopePayloadMatcher.payloadIsJson; +import static uk.gov.moj.cpp.listing.domain.CourtListType.ALPHABETICAL; import static uk.gov.moj.cpp.listing.domain.CourtListType.ONLINE_PUBLIC; import static uk.gov.moj.cpp.listing.domain.CourtListType.PRISON; import static uk.gov.moj.cpp.listing.domain.CourtListType.PUBLIC; @@ -49,6 +51,7 @@ import uk.gov.moj.cpp.listing.common.xhibit.ReferenceDataLoader; import uk.gov.moj.cpp.listing.domain.CourtListType; import uk.gov.moj.cpp.listing.domain.referencedata.OrganisationUnit; +import uk.gov.moj.cpp.listing.query.api.service.AlphabeticalCourtListService; import uk.gov.moj.cpp.listing.query.api.service.ReferenceDataService; import uk.gov.moj.cpp.listing.query.api.util.FileUtil; import uk.gov.moj.cpp.listing.query.document.generator.JudiciaryNameMapper; @@ -118,6 +121,9 @@ public class HearingQueryApiTest { @Mock private StandardPublicCourtListTemplateAssembler standardPublicCourtListAssembler; + @Mock + private AlphabeticalCourtListService alphabeticalCourtListService; + @Mock private ReferenceDataService referenceDataService; @@ -1435,6 +1441,74 @@ void shouldReturnWelshTemplateForOnlinePublicCourtListWhenWelsh() { assertThat(returnedEnvelope.payloadAsJsonObject().getString("templateName"), is("OnlinePublicCourtListEnglishWelsh")); } + @Test + void shouldReturnAlphabeticalCourtListPayloadUsingAlphabeticalCourtListService() { + final JsonEnvelope query = envelopeFrom( + metadataBuilder() + .withId(fromString("6d4ced64-b058-4bd4-a652-98d8230b92a5")) + .withName("listing.search.court.list.payload"), + createObjectBuilder() + .add(COURT_CENTRE_ID, randomUUID().toString()) + .add(COURT_ROOM_ID, randomUUID().toString()) + .add(LIST_ID, ALPHABETICAL.toString()) + .build()); + + final JsonEnvelope courtListContent = mock(JsonEnvelope.class); + when(hearingQueryView.getCourtListContent(query)).thenReturn(courtListContent); + when(alphabeticalCourtListService.buildAlphabeticalCourtListData(eq(courtListContent), any(String.class))) + .thenReturn(Optional.of(createObjectBuilder().add("id", "id1").build())); + when(referenceDataService.isHearingLanguageWelsh(any(JsonEnvelope.class), any(String.class))).thenReturn(Optional.of(false)); + + final JsonEnvelope returnedEnvelope = hearingQueryApi.searchHearingsForCourtListPayload(query); + + assertThat(returnedEnvelope.payloadAsJsonObject().getString("id"), is("id1")); + assertThat(returnedEnvelope.payloadAsJsonObject().getString("templateName"), is("CourtList")); + verify(standardPublicCourtListAssembler, never()).assemble(any(), any(), any(), any(), any(boolean.class), any(boolean.class)); + } + + @Test + void shouldReturnWelshTemplateForAlphabeticalCourtListWhenWelsh() { + final JsonEnvelope query = envelopeFrom( + metadataBuilder() + .withId(fromString("6d4ced64-b058-4bd4-a652-98d8230b92a5")) + .withName("listing.search.court.list.payload"), + createObjectBuilder() + .add(COURT_CENTRE_ID, randomUUID().toString()) + .add(COURT_ROOM_ID, randomUUID().toString()) + .add(LIST_ID, ALPHABETICAL.toString()) + .build()); + + when(hearingQueryView.getCourtListContent(query)).thenReturn(mock(JsonEnvelope.class)); + when(alphabeticalCourtListService.buildAlphabeticalCourtListData(any(JsonEnvelope.class), any(String.class))) + .thenReturn(Optional.of(createObjectBuilder().add("id", "id1").build())); + when(referenceDataService.isHearingLanguageWelsh(any(JsonEnvelope.class), any(String.class))).thenReturn(Optional.of(true)); + + final JsonEnvelope returnedEnvelope = hearingQueryApi.searchHearingsForCourtListPayload(query); + + assertThat(returnedEnvelope.payloadAsJsonObject().getString("templateName"), is("CourtListEnglishWelsh")); + } + + @Test + void shouldReturnEmptyResponseWhenAlphabeticalCourtListServiceReturnsEmpty() { + final JsonEnvelope query = envelopeFrom( + metadataBuilder() + .withId(fromString("6d4ced64-b058-4bd4-a652-98d8230b92a5")) + .withName("listing.search.court.list.payload"), + createObjectBuilder() + .add(COURT_CENTRE_ID, randomUUID().toString()) + .add(COURT_ROOM_ID, randomUUID().toString()) + .add(LIST_ID, ALPHABETICAL.toString()) + .build()); + + when(hearingQueryView.getCourtListContent(query)).thenReturn(mock(JsonEnvelope.class)); + when(alphabeticalCourtListService.buildAlphabeticalCourtListData(any(JsonEnvelope.class), any(String.class))) + .thenReturn(Optional.empty()); + + final JsonEnvelope returnedEnvelope = hearingQueryApi.searchHearingsForCourtListPayload(query); + + assertThat(returnedEnvelope.payloadAsJsonObject().size(), is(0)); + } + @Test void shouldNotEnrichApplicationWhenDetailsNotFound() { final String applicationId = "7ab2ed6a-bf9a-4539-848b-48012032c97c";