Skip to content

Commit 75bb71b

Browse files
authored
Merge pull request #771 from companieshouse:feature/add-paging-to-company-pscs
Pass paging query params to company-pscs
2 parents c6720b5 + 9ee158f commit 75bb71b

File tree

3 files changed

+55
-31
lines changed

3 files changed

+55
-31
lines changed

src/services/company-psc/service.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ export default class CompanyPscService {
1414
*
1515
* @param number the company number to look up
1616
*/
17-
public async getCompanyPsc (number: string): Promise<Resource<CompanyPersonsWithSignificantControl>> {
18-
const resp = await this.client.httpGet(`/company/${number}/persons-with-significant-control`);
17+
public async getCompanyPsc (number: string, startIndex: number = 0, itemsPerPage: number = 25): Promise<Resource<CompanyPersonsWithSignificantControl>> {
18+
const resp = await this.client.httpGet(`/company/${number}/persons-with-significant-control?start_index=${startIndex}&items_per_page=${itemsPerPage}`);
1919

2020
const resource: Resource<CompanyPersonsWithSignificantControl> = {
2121
httpStatusCode: resp.status

test/services/company-psc/service.spec.ts

Lines changed: 49 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -11,32 +11,15 @@ const expect = chai.expect;
1111
const requestClient = new RequestClient({ baseUrl: "URL-NOT-USED", oauthToken: "TOKEN-NOT-USED" });
1212

1313
describe("company-psc", () => {
14-
beforeEach(() => {
15-
sinon.reset();
16-
sinon.restore();
17-
});
14+
let mockRequest: sinon.SinonStub;
15+
let companyPsc: CompanyPscService;
16+
let mockResponseBody: CompanyPersonsWithSignificantControlResource;
1817

19-
afterEach(done => {
18+
beforeEach(() => {
2019
sinon.reset();
2120
sinon.restore();
22-
done();
23-
});
2421

25-
it("returns an error response on failure", async () => {
26-
const mockGetResponse = {
27-
status: 401,
28-
error: "An error occurred"
29-
};
30-
const mockRequest = sinon.stub(requestClient, "httpGet").resolves(mockGetResponse);
31-
const companyPsc : CompanyPscService = new CompanyPscService(requestClient);
32-
const data = await companyPsc.getCompanyPsc("NUMBER-NOT-IMPORTANT");
33-
34-
expect(data.httpStatusCode).to.equal(401);
35-
expect(data.resource).to.be.undefined;
36-
});
37-
38-
it("maps the company field data items correctly", async () => {
39-
const mockResponseBody : CompanyPersonsWithSignificantControlResource = ({
22+
mockResponseBody = {
4023
active_count: "1",
4124
ceased_count: "0",
4225
items_per_page: "1",
@@ -85,15 +68,35 @@ describe("company-psc", () => {
8568
ceased_on: "2023-2-1"
8669
}
8770
]
88-
});
71+
};
8972

9073
const mockGetResponse = {
9174
status: 200,
9275
body: mockResponseBody
9376
};
9477

95-
const mockRequest = sinon.stub(requestClient, "httpGet").resolves(mockGetResponse);
96-
const companyPsc : CompanyPscService = new CompanyPscService(requestClient);
78+
mockRequest = sinon.stub(requestClient, "httpGet").resolves(mockGetResponse);
79+
companyPsc = new CompanyPscService(requestClient);
80+
});
81+
82+
afterEach(() => {
83+
sinon.restore();
84+
});
85+
86+
it("returns an error response on failure", async () => {
87+
const mockGetResponse = {
88+
status: 401,
89+
error: "An error occurred"
90+
};
91+
mockRequest.resolves(mockGetResponse);
92+
93+
const data = await companyPsc.getCompanyPsc("NUMBER-NOT-IMPORTANT");
94+
95+
expect(data.httpStatusCode).to.equal(401);
96+
expect(data.resource).to.be.undefined;
97+
});
98+
99+
it("maps the company field data items correctly", async () => {
97100
const data = await companyPsc.getCompanyPsc("123");
98101

99102
expect(data.httpStatusCode).to.equal(200);
@@ -119,20 +122,39 @@ describe("company-psc", () => {
119122
expect(data.resource?.items[0].address.locality).to.equal(mockResponseBody.items[0].address.locality);
120123
expect(data.resource?.items[0].address.postalCode).to.equal(mockResponseBody.items[0].address.postal_code);
121124
expect(data.resource?.items[0].address.region).to.equal(mockResponseBody.items[0].address.region);
122-
expect(data.resource?.items[0].address.region).to.equal(mockResponseBody.items[0].address.region);
123125

124126
expect(data.resource?.items[0].dateOfBirth.month).to.equal(mockResponseBody.items[0].date_of_birth.month);
125127
expect(data.resource?.items[0].dateOfBirth.year).to.equal(mockResponseBody.items[0].date_of_birth.year);
126128

127129
expect(data.resource?.items[0].identification?.legalAuthority).to.equal(mockResponseBody.items[0].identification?.legal_authority);
128130
expect(data.resource?.items[0].identification?.legalForm).to.equal(mockResponseBody.items[0].identification?.legal_form);
129131
expect(data.resource?.items[0].identification?.placeRegistered).to.equal(mockResponseBody.items[0].identification?.place_registered);
130-
expect(data.resource?.items[0].identification?.registrationNumber).to.equal(mockResponseBody.items[0].identification?.registration_number)
132+
expect(data.resource?.items[0].identification?.registrationNumber).to.equal(mockResponseBody.items[0].identification?.registration_number);
131133

132134
expect(data.resource?.items[0].nameElements.title).to.equal(mockResponseBody.items[0].name_elements.title);
133135
expect(data.resource?.items[0].nameElements.forename).to.equal(mockResponseBody.items[0].name_elements.forename);
134136
expect(data.resource?.items[0].nameElements.otherForenames).to.equal(mockResponseBody.items[0].name_elements.other_forenames);
135137
expect(data.resource?.items[0].nameElements.middleName).to.equal(mockResponseBody.items[0].name_elements.middle_name);
136138
expect(data.resource?.items[0].nameElements.surname).to.equal(mockResponseBody.items[0].name_elements.surname);
137139
});
140+
141+
it("uses default values for startIndex and itemsPerPage when not provided", async () => {
142+
await companyPsc.getCompanyPsc("123");
143+
expect(mockRequest.calledWith("/company/123/persons-with-significant-control?start_index=0&items_per_page=25")).to.be.true;
144+
});
145+
146+
it("uses provided startIndex and itemsPerPage values", async () => {
147+
await companyPsc.getCompanyPsc("123", 10, 20);
148+
expect(mockRequest.calledWith("/company/123/persons-with-significant-control?start_index=10&items_per_page=20")).to.be.true;
149+
});
150+
151+
it("uses default startIndex when not provided and itemsPerPage is provided", async () => {
152+
await companyPsc.getCompanyPsc("123", undefined, 10);
153+
expect(mockRequest.calledWith("/company/123/persons-with-significant-control?start_index=0&items_per_page=10")).to.be.true;
154+
});
155+
156+
it("uses default itemsPerPage when not provided and startIndex is provided", async () => {
157+
await companyPsc.getCompanyPsc("123", 10);
158+
expect(mockRequest.calledWith("/company/123/persons-with-significant-control?start_index=10&items_per_page=25")).to.be.true;
159+
});
138160
});

tsconfig.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,12 @@
1010
"baseUrl": "./src",
1111
"emitDecoratorMetadata": true,
1212
"experimentalDecorators": true,
13-
"esModuleInterop": true
13+
"esModuleInterop": true,
14+
"allowSyntheticDefaultImports": true
1415
},
1516
"include": [
16-
"src/**/*"
17+
"src/**/*",
18+
"test/**/*"
1719
],
1820
"exclude": [
1921
"node_modules"

0 commit comments

Comments
 (0)