Skip to content

Commit 975e31f

Browse files
authored
DSND-2876: Handle null metrics data for PSCs (#187)
* This isn't what I would like this service to look like. However, a ticket to refactor and address low test coverage has been put in the backlog.
1 parent 815ddbb commit 975e31f

File tree

2 files changed

+90
-13
lines changed

2 files changed

+90
-13
lines changed

src/main/java/uk/gov/companieshouse/pscdataapi/service/CompanyPscService.java

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import org.springframework.stereotype.Component;
1515
import uk.gov.companieshouse.api.exemptions.CompanyExemptions;
1616
import uk.gov.companieshouse.api.metrics.MetricsApi;
17+
import uk.gov.companieshouse.api.metrics.PscApi;
1718
import uk.gov.companieshouse.api.metrics.RegisterApi;
1819
import uk.gov.companieshouse.api.metrics.RegistersApi;
1920
import uk.gov.companieshouse.api.model.psc.PscIndividualFullRecordApi;
@@ -395,27 +396,24 @@ private PscList createPscDocumentList(List<PscDocument> pscDocuments, final int
395396
links.setExemptions(String.format("/company/%s/exemptions", companyNumber));
396397
}
397398

398-
if (companyMetrics == null) {
399-
LOGGER.info("No company metrics counts data found", DataMapHolder.getLogMap());
399+
if (companyMetrics == null
400+
|| companyMetrics.getCounts() == null // NOSONAR
401+
|| companyMetrics.getCounts().getPersonsWithSignificantControl() == null) {
402+
LOGGER.info("No company metrics for PSC data found", DataMapHolder.getLogMap());
400403
} else {
404+
PscApi pscCounts = companyMetrics.getCounts().getPersonsWithSignificantControl();
401405
if (registerView) {
402406
final int withdrawnCount = (int) pscData.stream()
403407
.filter(document -> document.getCeasedOn() != null)
404408
.count();
405409

406410
pscList.setCeasedCount(withdrawnCount);
407-
pscList.setTotalResults(companyMetrics.getCounts()
408-
.getPersonsWithSignificantControl().getActivePscsCount()
409-
+ pscList.getCeasedCount());
410-
pscList.setActiveCount(companyMetrics.getCounts()
411-
.getPersonsWithSignificantControl().getActivePscsCount());
411+
pscList.setTotalResults(pscCounts.getActivePscsCount() + pscList.getCeasedCount());
412+
pscList.setActiveCount(pscCounts.getActivePscsCount());
412413
} else {
413-
pscList.setActiveCount(companyMetrics.getCounts()
414-
.getPersonsWithSignificantControl().getActivePscsCount());
415-
pscList.setCeasedCount(companyMetrics.getCounts()
416-
.getPersonsWithSignificantControl().getCeasedPscsCount());
417-
pscList.setTotalResults(companyMetrics.getCounts()
418-
.getPersonsWithSignificantControl().getPscsCount());
414+
pscList.setActiveCount(pscCounts.getActivePscsCount());
415+
pscList.setCeasedCount(pscCounts.getCeasedPscsCount());
416+
pscList.setTotalResults(pscCounts.getPscsCount());
419417
}
420418
}
421419

src/test/java/uk/gov/companieshouse/pscdataapi/service/CompanyPscServiceTest.java

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import static org.junit.jupiter.api.Assertions.assertNotNull;
55
import static org.junit.jupiter.api.Assertions.assertThrows;
66
import static org.mockito.ArgumentMatchers.any;
7+
import static org.mockito.ArgumentMatchers.anyBoolean;
78
import static org.mockito.ArgumentMatchers.anyInt;
89
import static org.mockito.ArgumentMatchers.anyString;
910
import static org.mockito.ArgumentMatchers.eq;
@@ -23,11 +24,16 @@
2324
import java.util.Collections;
2425
import java.util.List;
2526
import java.util.Optional;
27+
import java.util.stream.Stream;
2628
import org.junit.jupiter.api.BeforeEach;
2729
import org.junit.jupiter.api.DisplayName;
30+
import org.junit.jupiter.api.Named;
2831
import org.junit.jupiter.api.Test;
2932
import org.junit.jupiter.api.extension.ExtendWith;
3033
import org.junit.jupiter.api.function.Executable;
34+
import org.junit.jupiter.params.ParameterizedTest;
35+
import org.junit.jupiter.params.provider.Arguments;
36+
import org.junit.jupiter.params.provider.MethodSource;
3137
import org.mockito.ArgumentCaptor;
3238
import org.mockito.Captor;
3339
import org.mockito.InjectMocks;
@@ -36,7 +42,9 @@
3642
import uk.gov.companieshouse.api.exemptions.CompanyExemptions;
3743
import uk.gov.companieshouse.api.exemptions.Exemptions;
3844
import uk.gov.companieshouse.api.exemptions.PscExemptAsTradingOnUkRegulatedMarketItem;
45+
import uk.gov.companieshouse.api.metrics.CountsApi;
3946
import uk.gov.companieshouse.api.metrics.MetricsApi;
47+
import uk.gov.companieshouse.api.metrics.PscApi;
4048
import uk.gov.companieshouse.api.metrics.RegisterApi;
4149
import uk.gov.companieshouse.api.metrics.RegistersApi;
4250
import uk.gov.companieshouse.api.model.psc.PscIndividualFullRecordApi;
@@ -875,4 +883,75 @@ void getIndividualFullRecordShouldReturnFullRecordWhenFound_FlagVerifyStateTrue(
875883
verify(repository).getPscByCompanyNumberAndId(COMPANY_NUMBER, NOTIFICATION_ID);
876884
verify(transformer).transformPscDocToIndividualFullRecord(pscDocument);
877885
}
886+
887+
@Test
888+
void shouldSetFieldsWhenRegisterViewIsTrue() {
889+
// given
890+
MetricsApi metricsApi = new MetricsApi().counts(
891+
new CountsApi().personsWithSignificantControl(
892+
new PscApi().activePscsCount(1))).registers(
893+
new RegistersApi().personsWithSignificantControl(
894+
new RegisterApi().registerMovedTo("public-register")));
895+
896+
Links links = new Links();
897+
links.setSelf("/company/%s/persons-with-significant-control".formatted(COMPANY_NUMBER));
898+
899+
final PscList expected = new PscList()
900+
.itemsPerPage(25)
901+
.links(links)
902+
.startIndex(0)
903+
.items(List.of(new ListSummary()))
904+
.ceasedCount(0)
905+
.totalResults(1)
906+
.activeCount(1);
907+
908+
when(companyMetricsApiService.getCompanyMetrics(anyString())).thenReturn(Optional.of(metricsApi));
909+
when(repository.getListSummaryRegisterView(any(), any(), any(), any())).thenReturn(
910+
Collections.singletonList(pscDocument));
911+
when(transformer.transformPscDocToListSummary(any(), anyBoolean())).thenReturn(new ListSummary());
912+
913+
// when
914+
final PscList actual = service.retrievePscListSummaryFromDb(COMPANY_NUMBER, 0, true, 25);
915+
916+
// then
917+
assertEquals(expected, actual);
918+
}
919+
920+
@ParameterizedTest
921+
@MethodSource("nullCompanyMetricsPscDataArgs")
922+
void shouldTestIfCompanyMetricsPscDataIsNull(MetricsApi metricsApi) {
923+
// given
924+
Links links = new Links();
925+
links.setSelf("/company/%s/persons-with-significant-control".formatted(COMPANY_NUMBER));
926+
927+
final PscList expected = new PscList()
928+
.itemsPerPage(25)
929+
.links(links)
930+
.startIndex(0)
931+
.items(List.of(new ListSummary()));
932+
933+
when(companyMetricsApiService.getCompanyMetrics(anyString())).thenReturn(Optional.of(metricsApi));
934+
when(repository.getListSummaryRegisterView(any(), any(), any(), any())).thenReturn(
935+
Collections.singletonList(pscDocument));
936+
when(transformer.transformPscDocToListSummary(any(), anyBoolean())).thenReturn(new ListSummary());
937+
938+
// when
939+
final PscList actual = service.retrievePscListSummaryFromDb(COMPANY_NUMBER, 0, true, 25);
940+
941+
// then
942+
assertEquals(expected, actual);
943+
}
944+
945+
private static Stream<Arguments> nullCompanyMetricsPscDataArgs() {
946+
return Stream.of(
947+
Arguments.of(Named.of("Metrics with counts but no psc data",
948+
new MetricsApi().counts(new CountsApi()).registers(
949+
new RegistersApi().personsWithSignificantControl(
950+
new RegisterApi().registerMovedTo("public-register"))))),
951+
Arguments.of(Named.of("Metrics without counts",
952+
new MetricsApi().registers(
953+
new RegistersApi().personsWithSignificantControl(
954+
new RegisterApi().registerMovedTo("public-register")))))
955+
);
956+
}
878957
}

0 commit comments

Comments
 (0)