Skip to content

Commit cf9930d

Browse files
authored
Merge pull request #38 from companieshouse/feature/obj-392-filing-history-required
Feature/obj 392 filing history required
2 parents 25b3497 + ca47780 commit cf9930d

File tree

4 files changed

+261
-0
lines changed

4 files changed

+261
-0
lines changed
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
export * from "./types";
2+
export * from "./service";
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
import {IHttpClient} from "../../http";
2+
import {CompanyFilingHistory, CompanyFilingHistoryResource, FilingHistoryItemResource} from "./types";
3+
import Resource from "../resource";
4+
import {CompanyProfile, CompanyProfileResource} from "../company-profile";
5+
import Mapping from "../../mapping/mapping";
6+
import {CompanyOfficers} from "../company-officers";
7+
8+
/**
9+
* https://developer.companieshouse.gov.uk/api/docs/company/company_number/filing-history/getFilingHistoryList.html
10+
**/
11+
export default class CompanyFilingHistoryService {
12+
constructor (private readonly client: IHttpClient) { }
13+
14+
/**
15+
* Get the filing history for a company
16+
*
17+
*/
18+
public async getCompanyFilingHistory (number: string, category?: string): Promise<Resource<CompanyFilingHistory>> {
19+
let queryString;
20+
if (category) {
21+
queryString = `?category=${category}`;
22+
}
23+
24+
let url = `/company/${number}/filing-history`;
25+
26+
if (queryString) {
27+
url = url.concat(queryString);
28+
}
29+
30+
const resp = await this.client.httpGet(url);
31+
32+
const resource: Resource<CompanyFilingHistory> = {
33+
httpStatusCode: resp.status
34+
};
35+
36+
if (resp.error) {
37+
return resource;
38+
}
39+
40+
// cast the response body to the expected type
41+
const body = resp.body as CompanyFilingHistoryResource;
42+
43+
resource.resource = Mapping.camelCaseKeys<CompanyFilingHistory>(body);
44+
45+
return resource;
46+
}
47+
}
Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
/**
2+
* CompanyFilingHistoryResource is what is returned from the api.
3+
*/
4+
export interface CompanyFilingHistoryResource {
5+
etag: string,
6+
filing_history_status?: string,
7+
items: FilingHistoryItemResource[],
8+
items_per_page: number,
9+
kind: string,
10+
start_index: number,
11+
total_count: number
12+
}
13+
14+
export interface FilingHistoryItemResource {
15+
annotations?: FilingHistoryItemAnnotationResource[],
16+
associated_filings?: FilingHistoryItemAssociatedFilingResource[],
17+
barcode?: string
18+
category: string,
19+
date: string,
20+
description: string,
21+
description_values?: FilingHistoryDescriptionValuesResource,
22+
links?: FilingHistoryItemLinksResource,
23+
pages?: number,
24+
paper_filed?: boolean,
25+
resolutions?: FilingHistoryItemResolutionResource[],
26+
subcategory?: string,
27+
transaction_id: string,
28+
type: string
29+
}
30+
31+
export interface FilingHistoryItemAnnotationResource {
32+
annotation?: string,
33+
category?: string,
34+
date: string,
35+
description: string,
36+
description_values?: FilingHistoryDescriptionValuesResource,
37+
type?: string
38+
}
39+
40+
export interface FilingHistoryItemAssociatedFilingResource {
41+
category?: string,
42+
date: string,
43+
description: string,
44+
description_values?: FilingHistoryDescriptionValuesResource,
45+
type: string
46+
}
47+
48+
export interface FilingHistoryDescriptionValuesResource {
49+
[key:string]: string
50+
}
51+
52+
export interface FilingHistoryItemLinksResource {
53+
document_metadata?: string,
54+
self?: string
55+
}
56+
57+
export interface FilingHistoryItemResolutionResource {
58+
category: string,
59+
description: string,
60+
description_values?: FilingHistoryDescriptionValuesResource,
61+
document_id?: string,
62+
receive_date: string,
63+
subcategory: string
64+
type: string
65+
}
66+
67+
/**
68+
* CompanyFilingHistory is the interface used within the sdk
69+
*/
70+
export interface CompanyFilingHistory {
71+
etag: string,
72+
filingHistoryStatus?: string,
73+
items: FilingHistoryItem[],
74+
itemsPerPage: number,
75+
kind: string,
76+
startIndex: number,
77+
totalCount: number
78+
}
79+
80+
export interface FilingHistoryItem {
81+
annotations?: FilingHistoryItemAnnotation[],
82+
associatedFilings?: FilingHistoryItemAssociatedFiling[],
83+
barcode?: string
84+
category: string,
85+
date: string,
86+
description: string,
87+
descriptionValues?: FilingHistoryDescriptionValues,
88+
links?: FilingHistoryItemLinks,
89+
pages?: number,
90+
paperFiled?: boolean,
91+
resolutions?: FilingHistoryItemResolution[],
92+
subcategory?: string,
93+
transactionId: string,
94+
type: string
95+
}
96+
97+
export interface FilingHistoryItemAnnotation {
98+
annotation?: string,
99+
category?: string,
100+
date: string,
101+
description: string,
102+
descriptionValues?: FilingHistoryDescriptionValues,
103+
type?: string
104+
}
105+
106+
export interface FilingHistoryItemAssociatedFiling {
107+
category?: string,
108+
date: string,
109+
description: string,
110+
descriptionValues?: FilingHistoryDescriptionValues,
111+
type: string
112+
}
113+
114+
export interface FilingHistoryDescriptionValues {
115+
[key:string]: string
116+
}
117+
118+
export interface FilingHistoryItemLinks {
119+
documentMetadata?: string,
120+
self?: string
121+
}
122+
123+
export interface FilingHistoryItemResolution {
124+
category: string,
125+
description: string,
126+
descriptionValues?: FilingHistoryDescriptionValues,
127+
documentId?: string,
128+
receiveDate: string,
129+
subcategory: string
130+
type: string
131+
}
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
import chai from "chai";
2+
import {RequestClient} from "../../../src/http";
3+
import sinon from "sinon";
4+
import CompanyFilingHistoryService from "../../../src/services/company-filing-history/service";
5+
import {
6+
CompanyFilingHistoryResource,
7+
FilingHistoryItemResource
8+
} from "../../../src/services/company-filing-history/types";
9+
10+
const expect = chai.expect;
11+
12+
const requestClient = new RequestClient({ baseUrl: "URL-NOT-USED", oauthToken: "TOKEN-NOT-USED" });
13+
14+
describe("company-filing-history", () => {
15+
beforeEach(() => {
16+
sinon.reset();
17+
sinon.restore();
18+
});
19+
20+
afterEach(done => {
21+
sinon.reset();
22+
sinon.restore();
23+
done();
24+
});
25+
26+
it("returns an error response on failure", async () => {
27+
const mockGetResponse = {
28+
status: 401,
29+
error: "An error occurred"
30+
};
31+
const mockRequest = sinon.stub(requestClient, "httpGet").resolves(mockGetResponse);
32+
const companyFilingService : CompanyFilingHistoryService = new CompanyFilingHistoryService(requestClient);
33+
const data = await companyFilingService.getCompanyFilingHistory("NUMBER-NOT-IMPORTANT");
34+
35+
expect(data.httpStatusCode).to.equal(401);
36+
expect(data.resource).to.be.undefined;
37+
});
38+
39+
it("maps the company filing history data items correctly", async () => {
40+
const mockFilingHistoryItem: FilingHistoryItemResource = {
41+
category: "category",
42+
date: "someDate",
43+
description: "A description",
44+
transaction_id: "transaction id",
45+
type: "a type"
46+
}
47+
const mockResponseBody : CompanyFilingHistoryResource = {
48+
etag: "someEtag",
49+
filing_history_status: "someFilingHistoryStatus",
50+
items: [mockFilingHistoryItem],
51+
items_per_page: 1,
52+
kind: "a kind",
53+
start_index: 0,
54+
total_count: 1
55+
};
56+
57+
const mockGetResponse = {
58+
status: 200,
59+
body: mockResponseBody
60+
};
61+
62+
const mockRequest = sinon.stub(requestClient, "httpGet").resolves(mockGetResponse);
63+
const companyFilingHistoryService : CompanyFilingHistoryService = new CompanyFilingHistoryService(requestClient);
64+
const data = await companyFilingHistoryService.getCompanyFilingHistory("123");
65+
66+
expect(data.httpStatusCode).to.equal(200);
67+
68+
expect(data.resource.etag).to.equal(mockResponseBody.etag)
69+
expect(data.resource.filingHistoryStatus).to.equal(mockResponseBody.filing_history_status)
70+
expect(data.resource.itemsPerPage).to.equal(mockResponseBody.items_per_page)
71+
expect(data.resource.kind).to.equal(mockResponseBody.kind)
72+
expect(data.resource.startIndex).to.equal(mockResponseBody.start_index)
73+
expect(data.resource.totalCount).to.equal(mockResponseBody.total_count)
74+
75+
expect(data.resource.items[0].category).to.equal(mockFilingHistoryItem.category);
76+
expect(data.resource.items[0].date).to.equal(mockFilingHistoryItem.date);
77+
expect(data.resource.items[0].description).to.equal(mockFilingHistoryItem.description);
78+
expect(data.resource.items[0].transactionId).to.equal(mockFilingHistoryItem.transaction_id);
79+
expect(data.resource.items[0].type).to.equal(mockFilingHistoryItem.type);
80+
});
81+
});

0 commit comments

Comments
 (0)