Skip to content

Commit 9b1482b

Browse files
authored
Merge pull request #159 from companieshouse/alphabetical-paging
Add the additional query params for alphabetical search
2 parents d159c90 + d1b9449 commit 9b1482b

File tree

3 files changed

+70
-5
lines changed

3 files changed

+70
-5
lines changed

src/services/search/alphabetical-search/service.ts

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,28 @@ import Resource from "../../resource";
44

55
export default class AlphabeticalSearchService {
66
constructor (private readonly client: IHttpClient) { }
7-
public async getCompanies (companyName: string, requestId: string): Promise<Resource<CompaniesResource>> {
7+
public async getCompanies (companyName: string, requestId: string,
8+
searchBefore: string | null, searchAfter: string | null, size: number | null): Promise<Resource<CompaniesResource>> {
9+
const SEARCH_BEFORE_QUERY = "&search_before=";
10+
const SEARCH_AFTER_QUERY = "&search_after=";
11+
const SIZE_QUERY = "&size=";
812
const additionalHeaders = {
913
"X-Request-ID": requestId,
1014
"Content-Type": "application/json"
1115
}
12-
const alphabeticalSearchURL = "/alphabetical-search/companies?q=" + companyName;
16+
let alphabeticalSearchURL = "/alphabetical-search/companies?q=" + companyName;
17+
18+
if (searchBefore != null) {
19+
alphabeticalSearchURL += SEARCH_BEFORE_QUERY + searchBefore;
20+
}
21+
22+
if (searchAfter != null) {
23+
alphabeticalSearchURL += SEARCH_AFTER_QUERY + searchAfter;
24+
}
25+
26+
if (size != null) {
27+
alphabeticalSearchURL += SIZE_QUERY + size;
28+
}
1329

1430
const resp = await this.client.httpGet(alphabeticalSearchURL, additionalHeaders);
1531

src/services/search/alphabetical-search/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ export interface Items {
1717
corporate_name: string;
1818
record_type: string;
1919
ordered_alpha_key: string;
20+
ordered_alpha_key_with_id: string;
2021
}
2122

2223
export interface Links {

test/services/search/alphabetical-search/service.spec.ts

Lines changed: 51 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@ const mockResponseBody : CompaniesResource = ({
2121
company_status: "active",
2222
corporate_name: "corporate name",
2323
record_type: "record type",
24-
ordered_alpha_key: "ordered alpha key"
24+
ordered_alpha_key: "ordered alpha key",
25+
ordered_alpha_key_with_id: "COMPANY:00000000"
2526
},
2627
links: {
2728
self: "/company/FC022000"
@@ -32,6 +33,9 @@ const mockResponseBody : CompaniesResource = ({
3233

3334
const mockRequestId = "fdskfhsdoifhsffsif";
3435
const testCompanyName = "TEST COMPANY NAME";
36+
const searchBefore = "TESTCOMPANYTOP:00000000";
37+
const searchAfter = "TESTCOMPANYBOTTOM:00000000";
38+
const size = 20;
3539

3640
describe("create a alphabetical search GET", () => {
3741
beforeEach(() => {
@@ -53,7 +57,7 @@ describe("create a alphabetical search GET", () => {
5357

5458
const mockRequest = sinon.stub(requestClient, "httpGet").resolves(mockGetRequest);
5559
const search: AlphabeticalSearchService = new AlphabeticalSearchService(requestClient);
56-
const data: Resource<CompaniesResource> = await search.getCompanies(testCompanyName, mockRequestId);
60+
const data: Resource<CompaniesResource> = await search.getCompanies(testCompanyName, mockRequestId, null, null, null);
5761

5862
expect(data.httpStatusCode).to.equal(401);
5963
expect(data.resource).to.be.undefined;
@@ -67,7 +71,51 @@ describe("create a alphabetical search GET", () => {
6771

6872
const mockRequest = sinon.stub(requestClient, "httpGet").resolves(mockGetRequest);
6973
const search: AlphabeticalSearchService = new AlphabeticalSearchService(requestClient);
70-
const data: Resource<CompaniesResource> = await search.getCompanies(testCompanyName, mockRequestId);
74+
const data: Resource<CompaniesResource> = await search.getCompanies(testCompanyName, mockRequestId, null, null, null);
75+
76+
expect(data.httpStatusCode).to.equal(200);
77+
expect(data.resource.topHit).to.equal(mockResponseBody.topHit);
78+
expect(data.resource.results[0].ID).to.equal(mockResponseBody.results[0].ID);
79+
expect(data.resource.results[0].company_type).to.equal(mockResponseBody.results[0].company_type)
80+
expect(data.resource.results[0].items.company_number).to.equal(mockResponseBody.results[0].items.company_number);
81+
expect(data.resource.results[0].items.company_status).to.equal(mockResponseBody.results[0].items.company_status);
82+
expect(data.resource.results[0].items.corporate_name).to.equal(mockResponseBody.results[0].items.corporate_name);
83+
expect(data.resource.results[0].items.record_type).to.equal(mockResponseBody.results[0].items.record_type);
84+
expect(data.resource.results[0].items.ordered_alpha_key).to.equal(mockResponseBody.results[0].items.ordered_alpha_key);
85+
expect(data.resource.results[0].links).to.equal(mockResponseBody.results[0].links);
86+
});
87+
88+
it("returns alphabetical search results correctly when searching previous results", async () => {
89+
const mockGetRequest = {
90+
status: 200,
91+
body: mockResponseBody
92+
};
93+
94+
const mockRequest = sinon.stub(requestClient, "httpGet").resolves(mockGetRequest);
95+
const search: AlphabeticalSearchService = new AlphabeticalSearchService(requestClient);
96+
const data: Resource<CompaniesResource> = await search.getCompanies(testCompanyName, mockRequestId, searchBefore, null, size);
97+
98+
expect(data.httpStatusCode).to.equal(200);
99+
expect(data.resource.topHit).to.equal(mockResponseBody.topHit);
100+
expect(data.resource.results[0].ID).to.equal(mockResponseBody.results[0].ID);
101+
expect(data.resource.results[0].company_type).to.equal(mockResponseBody.results[0].company_type)
102+
expect(data.resource.results[0].items.company_number).to.equal(mockResponseBody.results[0].items.company_number);
103+
expect(data.resource.results[0].items.company_status).to.equal(mockResponseBody.results[0].items.company_status);
104+
expect(data.resource.results[0].items.corporate_name).to.equal(mockResponseBody.results[0].items.corporate_name);
105+
expect(data.resource.results[0].items.record_type).to.equal(mockResponseBody.results[0].items.record_type);
106+
expect(data.resource.results[0].items.ordered_alpha_key).to.equal(mockResponseBody.results[0].items.ordered_alpha_key);
107+
expect(data.resource.results[0].links).to.equal(mockResponseBody.results[0].links);
108+
});
109+
110+
it("returns alphabetical search results correctly when searching next results", async () => {
111+
const mockGetRequest = {
112+
status: 200,
113+
body: mockResponseBody
114+
};
115+
116+
const mockRequest = sinon.stub(requestClient, "httpGet").resolves(mockGetRequest);
117+
const search: AlphabeticalSearchService = new AlphabeticalSearchService(requestClient);
118+
const data: Resource<CompaniesResource> = await search.getCompanies(testCompanyName, mockRequestId, null, searchAfter, size);
71119

72120
expect(data.httpStatusCode).to.equal(200);
73121
expect(data.resource.topHit).to.equal(mockResponseBody.topHit);

0 commit comments

Comments
 (0)