From 2017599414356160a289748ad2c891da189cfb78 Mon Sep 17 00:00:00 2001 From: Russell Dodd Date: Mon, 17 Jun 2024 09:46:25 +0100 Subject: [PATCH] Filter Courts reference data by business unit --- .../opal/controllers/CourtControllerIntegrationTest.java | 5 +++-- .../uk/gov/hmcts/opal/controllers/CourtController.java | 7 ++++--- .../hmcts/opal/entity/projection/CourtReferenceData.java | 3 ++- .../uk/gov/hmcts/opal/repository/jpa/CourtSpecs.java | 6 ++++-- .../uk/gov/hmcts/opal/service/opal/CourtService.java | 5 +++-- .../gov/hmcts/opal/controllers/CourtControllerTest.java | 9 +++++---- .../uk/gov/hmcts/opal/service/opal/CourtServiceTest.java | 7 +++++-- 7 files changed, 26 insertions(+), 16 deletions(-) diff --git a/src/integrationTest/java/uk/gov/hmcts/opal/controllers/CourtControllerIntegrationTest.java b/src/integrationTest/java/uk/gov/hmcts/opal/controllers/CourtControllerIntegrationTest.java index dbec66c0e..10f1873f9 100644 --- a/src/integrationTest/java/uk/gov/hmcts/opal/controllers/CourtControllerIntegrationTest.java +++ b/src/integrationTest/java/uk/gov/hmcts/opal/controllers/CourtControllerIntegrationTest.java @@ -108,9 +108,10 @@ void testPostCourtsSearch_WhenCourtDoesNotExist() throws Exception { @Test void testGetCourtRefData() throws Exception { - CourtReferenceData refData = new CourtReferenceData(1L, (short)11,"Main Court", null, "MN1234"); + CourtReferenceData refData = new CourtReferenceData(1L, (short)007, (short)11, + "Main Court", null, "MN1234"); - when(courtService.getReferenceData(any())).thenReturn(singletonList(refData)); + when(courtService.getReferenceData(any(), any())).thenReturn(singletonList(refData)); mockMvc.perform(get("/api/court/ref-data") .header("authorization", "Bearer some_value")) diff --git a/src/main/java/uk/gov/hmcts/opal/controllers/CourtController.java b/src/main/java/uk/gov/hmcts/opal/controllers/CourtController.java index 622e953f9..abd950703 100644 --- a/src/main/java/uk/gov/hmcts/opal/controllers/CourtController.java +++ b/src/main/java/uk/gov/hmcts/opal/controllers/CourtController.java @@ -12,6 +12,7 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestHeader; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import uk.gov.hmcts.opal.dto.reference.CourtReferenceDataResults; import uk.gov.hmcts.opal.dto.search.CourtSearchDto; @@ -76,10 +77,10 @@ public ResponseEntity> postCourtsSearch(@RequestBody CourtSear @GetMapping(value = {"/ref-data", "/ref-data/", "/ref-data/{filter}"}) @Operation(summary = "Returns courts as reference data with an optional filter applied") public ResponseEntity getCourtRefData( - @PathVariable Optional filter) { - log.info(":GET:getCourtRefData: query: \n{}", filter); + @PathVariable Optional filter, @RequestParam Optional businessUnit) { + log.info(":GET:getCourtRefData: business unit: {}, filter string: {}", businessUnit, filter); - List refData = opalCourtService.getReferenceData(filter); + List refData = opalCourtService.getReferenceData(filter, businessUnit); log.info(":GET:getCourtRefData: court reference data count: {}", refData.size()); return ResponseEntity.ok(CourtReferenceDataResults.builder().refData(refData).build()); diff --git a/src/main/java/uk/gov/hmcts/opal/entity/projection/CourtReferenceData.java b/src/main/java/uk/gov/hmcts/opal/entity/projection/CourtReferenceData.java index d585a6d13..c3888f56c 100644 --- a/src/main/java/uk/gov/hmcts/opal/entity/projection/CourtReferenceData.java +++ b/src/main/java/uk/gov/hmcts/opal/entity/projection/CourtReferenceData.java @@ -1,5 +1,6 @@ package uk.gov.hmcts.opal.entity.projection; -public record CourtReferenceData(Long courtId, Short courtCode, String name, String nameCy, String nationalCourtCode) { +public record CourtReferenceData(Long courtId, Short businessUnitId, Short courtCode, String name, + String nameCy, String nationalCourtCode) { } diff --git a/src/main/java/uk/gov/hmcts/opal/repository/jpa/CourtSpecs.java b/src/main/java/uk/gov/hmcts/opal/repository/jpa/CourtSpecs.java index 1e102969b..2f91e313f 100644 --- a/src/main/java/uk/gov/hmcts/opal/repository/jpa/CourtSpecs.java +++ b/src/main/java/uk/gov/hmcts/opal/repository/jpa/CourtSpecs.java @@ -27,9 +27,11 @@ public Specification findBySearchCriteria(CourtSearchDto criteria) )); } - public Specification referenceDataFilter(Optional filter) { + public Specification referenceDataFilter(Optional filter, + Optional businessUnitId) { return Specification.allOf(specificationList( - filter.filter(s -> !s.isBlank()).map(this::likeAnyCourt) + filter.filter(s -> !s.isBlank()).map(this::likeAnyCourt), + businessUnitId.map(this::equalsBusinessUnitId) )); } diff --git a/src/main/java/uk/gov/hmcts/opal/service/opal/CourtService.java b/src/main/java/uk/gov/hmcts/opal/service/opal/CourtService.java index 5998e43fe..0e726ce16 100644 --- a/src/main/java/uk/gov/hmcts/opal/service/opal/CourtService.java +++ b/src/main/java/uk/gov/hmcts/opal/service/opal/CourtService.java @@ -39,12 +39,12 @@ public List searchCourts(CourtSearchDto criteria) { return courtsPage.getContent(); } - public List getReferenceData(Optional filter) { + public List getReferenceData(Optional filter, Optional businessUnitId) { Sort codeSort = Sort.by(Sort.Direction.ASC, AddressEntity_.NAME); Page page = courtRepository - .findBy(specs.referenceDataFilter(filter), + .findBy(specs.referenceDataFilter(filter, businessUnitId), ffq -> ffq .sortBy(codeSort) .page(Pageable.unpaged())); @@ -55,6 +55,7 @@ public List getReferenceData(Optional filter) { private CourtReferenceData toRefData(CourtEntity entity) { return new CourtReferenceData( entity.getCourtId(), + entity.getBusinessUnit().getBusinessUnitId(), entity.getCourtCode(), entity.getName(), entity.getNameCy(), diff --git a/src/test/java/uk/gov/hmcts/opal/controllers/CourtControllerTest.java b/src/test/java/uk/gov/hmcts/opal/controllers/CourtControllerTest.java index 4f963312b..5246a35c1 100644 --- a/src/test/java/uk/gov/hmcts/opal/controllers/CourtControllerTest.java +++ b/src/test/java/uk/gov/hmcts/opal/controllers/CourtControllerTest.java @@ -77,21 +77,22 @@ void testGetCourtsRefData_Success() { CourtReferenceData entity = createCourtReferenceData(); List courtList = List.of(entity); - when(courtService.getReferenceData(any())).thenReturn(courtList); + when(courtService.getReferenceData(any(), any())).thenReturn(courtList); // Act Optional filter = Optional.empty(); - ResponseEntity response = courtController.getCourtRefData(filter); + Optional businessUnit = Optional.empty(); + ResponseEntity response = courtController.getCourtRefData(filter, businessUnit); // Assert assertEquals(HttpStatus.OK, response.getStatusCode()); CourtReferenceDataResults refDataResults = response.getBody(); assertEquals(1, refDataResults.getCount()); assertEquals(courtList, refDataResults.getRefData()); - verify(courtService, times(1)).getReferenceData(any()); + verify(courtService, times(1)).getReferenceData(any(), any()); } private CourtReferenceData createCourtReferenceData() { - return new CourtReferenceData(1L, (short)2,"Main Court", null,"MM1234"); + return new CourtReferenceData(1L, (short)007, (short)2,"Main Court", null,"MM1234"); } } diff --git a/src/test/java/uk/gov/hmcts/opal/service/opal/CourtServiceTest.java b/src/test/java/uk/gov/hmcts/opal/service/opal/CourtServiceTest.java index cedbc8d70..193d26294 100644 --- a/src/test/java/uk/gov/hmcts/opal/service/opal/CourtServiceTest.java +++ b/src/test/java/uk/gov/hmcts/opal/service/opal/CourtServiceTest.java @@ -12,6 +12,7 @@ import org.springframework.data.jpa.domain.Specification; import org.springframework.data.repository.query.FluentQuery; import uk.gov.hmcts.opal.dto.search.CourtSearchDto; +import uk.gov.hmcts.opal.entity.BusinessUnitEntity; import uk.gov.hmcts.opal.entity.CourtEntity; import uk.gov.hmcts.opal.entity.projection.CourtReferenceData; import uk.gov.hmcts.opal.repository.CourtRepository; @@ -77,7 +78,8 @@ void testCourtsReferenceData() { FluentQuery.FetchableFluentQuery ffq = Mockito.mock(FluentQuery.FetchableFluentQuery.class); when(ffq.sortBy(any())).thenReturn(ffq); - CourtEntity courtEntity = CourtEntity.builder().build(); + CourtEntity courtEntity = CourtEntity.builder() + .businessUnit(BusinessUnitEntity.builder().businessUnitId((short)007).build()).build(); Page mockPage = new PageImpl<>(List.of(courtEntity), Pageable.unpaged(), 999L); when(courtRepository.findBy(any(Specification.class), any())).thenAnswer(iom -> { iom.getArgument(1, Function.class).apply(ffq); @@ -85,10 +87,11 @@ void testCourtsReferenceData() { }); // Act - List result = courtService.getReferenceData(Optional.empty()); + List result = courtService.getReferenceData(Optional.empty(), Optional.empty()); CourtReferenceData refData = new CourtReferenceData( courtEntity.getCourtId(), + courtEntity.getBusinessUnit().getBusinessUnitId(), courtEntity.getCourtCode(), courtEntity.getName(), courtEntity.getNameCy(),