Skip to content

Commit

Permalink
Filter Courts reference data by business unit
Browse files Browse the repository at this point in the history
  • Loading branch information
RustyHMCTS committed Jun 18, 2024
1 parent 924e203 commit 2017599
Show file tree
Hide file tree
Showing 7 changed files with 26 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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"))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -76,10 +77,10 @@ public ResponseEntity<List<CourtEntity>> 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<CourtReferenceDataResults> getCourtRefData(
@PathVariable Optional<String> filter) {
log.info(":GET:getCourtRefData: query: \n{}", filter);
@PathVariable Optional<String> filter, @RequestParam Optional<Short> businessUnit) {
log.info(":GET:getCourtRefData: business unit: {}, filter string: {}", businessUnit, filter);

List<CourtReferenceData> refData = opalCourtService.getReferenceData(filter);
List<CourtReferenceData> refData = opalCourtService.getReferenceData(filter, businessUnit);

log.info(":GET:getCourtRefData: court reference data count: {}", refData.size());
return ResponseEntity.ok(CourtReferenceDataResults.builder().refData(refData).build());
Expand Down
Original file line number Diff line number Diff line change
@@ -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) {

}
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,11 @@ public Specification<CourtEntity> findBySearchCriteria(CourtSearchDto criteria)
));
}

public Specification<CourtEntity> referenceDataFilter(Optional<String> filter) {
public Specification<CourtEntity> referenceDataFilter(Optional<String> filter,
Optional<Short> 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)
));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,12 +39,12 @@ public List<CourtEntity> searchCourts(CourtSearchDto criteria) {
return courtsPage.getContent();
}

public List<CourtReferenceData> getReferenceData(Optional<String> filter) {
public List<CourtReferenceData> getReferenceData(Optional<String> filter, Optional<Short> businessUnitId) {

Sort codeSort = Sort.by(Sort.Direction.ASC, AddressEntity_.NAME);

Page<CourtEntity> page = courtRepository
.findBy(specs.referenceDataFilter(filter),
.findBy(specs.referenceDataFilter(filter, businessUnitId),
ffq -> ffq
.sortBy(codeSort)
.page(Pageable.unpaged()));
Expand All @@ -55,6 +55,7 @@ public List<CourtReferenceData> getReferenceData(Optional<String> filter) {
private CourtReferenceData toRefData(CourtEntity entity) {
return new CourtReferenceData(
entity.getCourtId(),
entity.getBusinessUnit().getBusinessUnitId(),
entity.getCourtCode(),
entity.getName(),
entity.getNameCy(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,21 +77,22 @@ void testGetCourtsRefData_Success() {
CourtReferenceData entity = createCourtReferenceData();
List<CourtReferenceData> courtList = List.of(entity);

when(courtService.getReferenceData(any())).thenReturn(courtList);
when(courtService.getReferenceData(any(), any())).thenReturn(courtList);

// Act
Optional<String> filter = Optional.empty();
ResponseEntity<CourtReferenceDataResults> response = courtController.getCourtRefData(filter);
Optional<Short> businessUnit = Optional.empty();
ResponseEntity<CourtReferenceDataResults> 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");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -77,18 +78,20 @@ 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<CourtEntity> 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);
return mockPage;
});

// Act
List<CourtReferenceData> result = courtService.getReferenceData(Optional.empty());
List<CourtReferenceData> result = courtService.getReferenceData(Optional.empty(), Optional.empty());

CourtReferenceData refData = new CourtReferenceData(
courtEntity.getCourtId(),
courtEntity.getBusinessUnit().getBusinessUnitId(),
courtEntity.getCourtCode(),
courtEntity.getName(),
courtEntity.getNameCy(),
Expand Down

0 comments on commit 2017599

Please sign in to comment.