Skip to content

Commit cdab741

Browse files
authored
Merge pull request #236 from companieshouse/BI-8655-add-enhanced-search-api-endpoint-to-sdk
add advanced search service
2 parents 4a73fcc + 99ae2d4 commit cdab741

File tree

7 files changed

+125
-71
lines changed

7 files changed

+125
-71
lines changed

src/client.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@ import { BasketService, OrderService, CertificateService, CertifiedCopiesService
77
import { PaymentService } from "./services/payment/";
88
import CompanyFilingHistoryService from "./services/company-filing-history/service";
99
import { RefreshTokenService } from "./services/refresh-token";
10+
import AdvancedSearchService from "./services/search/advanced-search/service";
1011
import AlphabeticalSearchService from "./services/search/alphabetical-search/service";
1112
import DissolvedSearchService from "./services/search/dissolved-search/service";
12-
import EnhancedSearchService from "./services/search/enhanced-search/service";
1313
import PSCDiscrepancyService from "./services/psc-discrepancies/service";
1414
import PSCDiscrepanciesReportService from "./services/psc-discrepancies-report/service";
1515
import TransactionService from "./services/transaction/service";
@@ -36,7 +36,7 @@ export default class ApiClient {
3636
public readonly refreshToken: RefreshTokenService;
3737
public readonly alphabeticalSearch: AlphabeticalSearchService;
3838
public readonly dissolvedSearch: DissolvedSearchService;
39-
public readonly enhancedSearch: EnhancedSearchService;
39+
public readonly advancedSearch: AdvancedSearchService;
4040
public readonly pscDiscrepancies: PSCDiscrepancyService;
4141
public readonly pscDiscrepancyReport: PSCDiscrepanciesReportService;
4242
public readonly transaction: TransactionService;
@@ -58,7 +58,7 @@ export default class ApiClient {
5858
this.mid = new MidService(apiClient);
5959
this.alphabeticalSearch = new AlphabeticalSearchService(apiClient);
6060
this.dissolvedSearch = new DissolvedSearchService(apiClient);
61-
this.enhancedSearch = new EnhancedSearchService(apiClient);
61+
this.advancedSearch = new AdvancedSearchService(apiClient);
6262
// service on the account/identity domain using the accountClient
6363
// e.g. user profile service can be added here when required
6464
this.refreshToken = new RefreshTokenService(accountClient);
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
export { default as AdvancedSearchService } from "./service";
2+
export * from "./types";
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
import { IHttpClient } from "../../../http";
2+
import { CompaniesResource } from "./types";
3+
import Resource from "../../resource";
4+
import "url-search-params-polyfill";
5+
6+
export default class AdvancedSearchService {
7+
constructor (private readonly client: IHttpClient) { }
8+
public async getCompanies (companyNameIncludes: string | null, companyNameExcludes: string | null, location: string | null, incorporatedFrom: string | null,
9+
incorporatedTo: string | null, sicCodes: string | null, companyStatus: string | null, companyType: string | null, dissolvedFrom: string | null,
10+
dissolvedTo: string | null, requestId: string): Promise<Resource<CompaniesResource>> {
11+
const COMPANY_NAME_INCLUDES_QUERY = "company_name_includes";
12+
const COMPANY_NAME_EXCLUDES_QUERY = "company_name_excludes"
13+
const LOCATION_QUERY = "location";
14+
const INCORPORATED_FROM_QUERY = "incorporated_from";
15+
const INCORPORATED_TO_QUERY = "incorporated_to";
16+
const SIC_CODES_QUERY = "sic_codes";
17+
const COMPANY_STATUS_QUERY = "company_status";
18+
const COMPANY_TYPE_QUERY = "company_type";
19+
const DISSOLVED_FROM_QUERY_PARAMETER = "dissolved_from";
20+
const DISSOLVED_TO_QUERY_PARAMETER = "dissolved_to"
21+
const additionalHeaders = {
22+
"X-Request-ID": requestId,
23+
"Content-Type": "application/json"
24+
}
25+
26+
const buildEnhancedSearchURL = new URLSearchParams("/enhanced-search/companies?");
27+
28+
if (companyNameIncludes !== null) {
29+
buildEnhancedSearchURL.append(COMPANY_NAME_INCLUDES_QUERY, companyNameIncludes)
30+
}
31+
32+
if (companyNameExcludes !== null) {
33+
buildEnhancedSearchURL.append(COMPANY_NAME_EXCLUDES_QUERY, companyNameExcludes)
34+
}
35+
36+
if (location !== null) {
37+
buildEnhancedSearchURL.append(LOCATION_QUERY, location)
38+
}
39+
40+
if (incorporatedFrom !== null) {
41+
buildEnhancedSearchURL.append(INCORPORATED_FROM_QUERY, incorporatedFrom)
42+
}
43+
44+
if (incorporatedTo !== null) {
45+
buildEnhancedSearchURL.append(INCORPORATED_TO_QUERY, incorporatedTo)
46+
}
47+
48+
if (sicCodes !== null) {
49+
buildEnhancedSearchURL.append(SIC_CODES_QUERY, sicCodes)
50+
}
51+
52+
if (companyStatus !== null) {
53+
buildEnhancedSearchURL.append(COMPANY_STATUS_QUERY, companyNameIncludes)
54+
}
55+
56+
if (companyType !== null) {
57+
buildEnhancedSearchURL.append(COMPANY_TYPE_QUERY, companyType)
58+
}
59+
60+
if (dissolvedFrom !== null) {
61+
buildEnhancedSearchURL.append(DISSOLVED_FROM_QUERY_PARAMETER, dissolvedFrom)
62+
}
63+
64+
if (dissolvedTo !== null) {
65+
buildEnhancedSearchURL.append(DISSOLVED_TO_QUERY_PARAMETER, dissolvedTo)
66+
}
67+
68+
const enhancedSearchUrl = buildEnhancedSearchURL.toString();
69+
70+
const resp = await this.client.httpGet(enhancedSearchUrl, additionalHeaders);
71+
72+
const resource: Resource<CompaniesResource> = {
73+
httpStatusCode: resp.status
74+
};
75+
76+
if (resp.error) {
77+
return resource;
78+
}
79+
80+
resource.resource = resp.body as CompaniesResource;
81+
82+
return resource;
83+
}
84+
}

src/services/search/enhanced-search/types.ts renamed to src/services/search/advanced-search/types.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ export interface Items {
1616
date_of_cessation: Date;
1717
date_of_creation: Date;
1818
registered_office_address: Address;
19+
sic_codes: String[];
1920
}
2021

2122
export interface Address {
@@ -24,6 +25,7 @@ export interface Address {
2425
locality: string;
2526
postal_code: string;
2627
premises: string;
28+
region: string;
2729
country: string;
2830
}
2931

@@ -37,6 +39,7 @@ export interface TopHit {
3739
date_of_cessation: Date;
3840
date_of_creation: Date;
3941
registered_office_address: Address;
42+
sic_codes: String[];
4043
}
4144

4245
export interface Links {

src/services/search/enhanced-search/index.ts

Lines changed: 0 additions & 2 deletions
This file was deleted.

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

Lines changed: 0 additions & 52 deletions
This file was deleted.

test/services/search/enhanced-search/service.spec.ts renamed to test/services/search/advanced-search/service.spec.ts

Lines changed: 33 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import chai from "chai";
22
import sinon from "sinon";
33

4-
import { EnhancedSearchService } from "../../../../src/services/search/enhanced-search";
4+
import { AdvancedSearchService } from "../../../../src/services/search/advanced-search";
55
import { RequestClient } from "../../../../src/http";
6-
import { CompaniesResource } from "../../../../src/services/search/enhanced-search/types";
6+
import { CompaniesResource } from "../../../../src/services/search/advanced-search/types";
77
import Resource from "../../../../src/services/resource";
88

99
const expect = chai.expect;
@@ -29,8 +29,12 @@ const mockResponseBody : CompaniesResource = ({
2929
locality: "cardiff",
3030
postal_code: "cf5 6rb",
3131
premises: "premises",
32+
region: "region",
3233
country: "country"
33-
}
34+
},
35+
sic_codes: [
36+
"999999"
37+
]
3438
},
3539
items: [
3640
{
@@ -50,22 +54,32 @@ const mockResponseBody : CompaniesResource = ({
5054
locality: "cardiff",
5155
postal_code: "cf5 6rb",
5256
premises: "premises",
57+
region: "region",
5358
country: "country"
54-
}
59+
},
60+
sic_codes: [
61+
"999999"
62+
]
5563
}
5664
],
5765
kind: "kind",
5866
hits: 1
5967
})
6068

6169
const mockRequestId = "fdskfhsdoifhsffsif";
62-
const testCompanyName = "TEST COMPANY NAME";
70+
const testCompanyNameIncludes = "INCLUDES";
71+
const testCompanyNameExcludes = "EXCLUDES"
6372
const testLocation = "TEST LOCATION";
64-
const testIncorporatedFrom = " TEST INCORPORATED FROM";
65-
const testIncorporatedTo = " TEST INCORPORATED TO";
66-
const searchType = "enhanced";
73+
const testIncorporatedFrom = "TEST INCORPORATED FROM";
74+
const testIncorporatedTo = "TEST INCORPORATED TO";
75+
const testSicCodes = "999999";
76+
const testCompanyStatus = "TEST COMPANY STATUS";
77+
const testCompanyType = "TEST COMPANY TYPE";
78+
const testDissolvedFrom = "TEST DISSOLVED FROM";
79+
const testDissolvedTo = "TEST DISSOLVED TO";
80+
const searchType = "advanced";
6781

68-
describe("create an enhanced search GET", () => {
82+
describe("create an advanced search GET", () => {
6983
beforeEach(() => {
7084
sinon.reset();
7185
sinon.restore();
@@ -84,22 +98,24 @@ describe("create an enhanced search GET", () => {
8498
};
8599

86100
const mockRequest = sinon.stub(requestClient, "httpGet").resolves(mockGetRequest);
87-
const search: EnhancedSearchService = new EnhancedSearchService(requestClient);
88-
const data: Resource<CompaniesResource> = await search.getCompanies(testCompanyName, testLocation, testIncorporatedFrom, testIncorporatedTo, mockRequestId);
101+
const search: AdvancedSearchService = new AdvancedSearchService(requestClient);
102+
const data: Resource<CompaniesResource> = await search.getCompanies(testCompanyNameIncludes, testCompanyNameExcludes, testLocation, testIncorporatedFrom,
103+
testIncorporatedTo, testSicCodes, testCompanyStatus, testCompanyType, testDissolvedFrom, testDissolvedTo, mockRequestId);
89104

90105
expect(data.httpStatusCode).to.equal(401);
91106
expect(data.resource).to.be.undefined;
92107
});
93108

94-
it("returns enhanced search results correctly", async () => {
109+
it("returns advanced search results correctly", async () => {
95110
const mockGetRequest = {
96111
status: 200,
97112
body: mockResponseBody
98113
};
99114

100115
const mockRequest = sinon.stub(requestClient, "httpGet").resolves(mockGetRequest);
101-
const search: EnhancedSearchService = new EnhancedSearchService(requestClient);
102-
const data: Resource<CompaniesResource> = await search.getCompanies(testCompanyName, testLocation, testIncorporatedFrom, testIncorporatedTo, mockRequestId);
116+
const search: AdvancedSearchService = new AdvancedSearchService(requestClient);
117+
const data: Resource<CompaniesResource> = await search.getCompanies(testCompanyNameIncludes, testCompanyNameExcludes, testLocation, testIncorporatedFrom,
118+
testIncorporatedTo, testSicCodes, testCompanyStatus, testCompanyNameIncludes, testDissolvedFrom, testDissolvedTo, mockRequestId);
103119
const item = data.resource.items[0];
104120
const mockItem = mockResponseBody.items[0];
105121

@@ -119,9 +135,11 @@ describe("create an enhanced search GET", () => {
119135
expect(data.resource.top_hit.registered_office_address.postal_code).to.equal(mockResponseBody.top_hit.registered_office_address.postal_code);
120136
expect(data.resource.top_hit.registered_office_address.premises).to.equal(mockResponseBody.top_hit.registered_office_address.premises);
121137
expect(data.resource.top_hit.registered_office_address.country).to.equal(mockResponseBody.top_hit.registered_office_address.country);
138+
expect(data.resource.top_hit.sic_codes).to.equal(mockResponseBody.top_hit.sic_codes);
122139
expect(item.company_name).to.equal(mockItem.company_name);
123140
expect(item.company_number).to.equal(mockItem.company_number);
124141
expect(item.company_status).to.equal(mockItem.company_status);
142+
expect(item.company_type).to.equal(mockItem.company_type);
125143
expect(item.kind).to.equal(mockItem.kind);
126144
expect(item.links.company_profile).to.equal(mockItem.links.company_profile);
127145
expect(item.date_of_cessation).to.equal(mockItem.date_of_cessation);
@@ -131,6 +149,7 @@ describe("create an enhanced search GET", () => {
131149
expect(item.registered_office_address.locality).to.equal(mockItem.registered_office_address.locality);
132150
expect(item.registered_office_address.postal_code).to.equal(mockItem.registered_office_address.postal_code);
133151
expect(item.registered_office_address.premises).to.equal(mockItem.registered_office_address.premises);
152+
expect(item.sic_codes).to.equal(mockItem.sic_codes);
134153
expect(data.resource.kind).to.equal(mockResponseBody.kind);
135154
expect(data.resource.hits).to.equal(mockResponseBody.hits);
136155
});

0 commit comments

Comments
 (0)