Skip to content

Commit

Permalink
Merge pull request #704 from companieshouse/feature/ecct-618-send-law…
Browse files Browse the repository at this point in the history
…ful-purpose-data-to-api

Send lawful purpose statement to cs-api [ECCT-618]
  • Loading branch information
nevans4-ch authored Dec 18, 2023
2 parents 8c87ca8 + a21b1b1 commit 7bd351f
Show file tree
Hide file tree
Showing 12 changed files with 149 additions and 180 deletions.
8 changes: 4 additions & 4 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
},
"homepage": "https://github.com/companieshouse/confirmation-statement-web#readme",
"dependencies": {
"@companieshouse/api-sdk-node": "^2.0.137",
"@companieshouse/api-sdk-node": "^2.0.140",
"@companieshouse/node-session-handler": "^4.1.9",
"@companieshouse/structured-logging-node": "^1.0.8",
"@companieshouse/web-security-node": "^2.0.0",
Expand Down
4 changes: 4 additions & 0 deletions src/controllers/review.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import { links } from "../utils/constants";
import { toReadableFormat } from "../utils/date";
import { ConfirmationStatementSubmission } from "@companieshouse/api-sdk-node/dist/services/confirmation-statement";
import { getConfirmationStatement } from "../services/confirmation.statement.service";
import { sendLawfulPurposeStatementUpdate } from "../utils/update.confirmation.statement.submission";
import { ecctDayOneEnabled } from "../utils/feature.flag";

export const get = async (req: Request, res: Response, next: NextFunction) => {
Expand Down Expand Up @@ -53,6 +54,9 @@ export const post = async (req: Request, res: Response, next: NextFunction) => {
const companyNumber = urlUtils.getCompanyNumberFromRequestParams(req);
const transactionId = urlUtils.getTransactionIdFromRequestParams(req);
const submissionId = urlUtils.getSubmissionIdFromRequestParams(req);

await sendLawfulPurposeStatementUpdate(req, true);

const paymentUrl: string | undefined = await closeTransaction(session, companyNumber, submissionId, transactionId);

if (!paymentUrl) {
Expand Down
7 changes: 3 additions & 4 deletions src/services/task.list.service.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { ConfirmationStatementSubmission } from "@companieshouse/api-sdk-node/dist/services/confirmation-statement";
import {
TaskList
TaskList, TaskState
} from "../types/task.list";
import { toReadableFormat } from "../utils/date";
import {
Expand All @@ -18,7 +18,6 @@ import {
} from "../types/page.urls";
import { urlUtils } from "../utils/url";
import { toTaskState } from "../utils/task/task.state.mapper";
import { getTaskCompletedCount } from "../utils/task/task.counter";
import { FEATURE_FLAG_FIVE_OR_LESS_OFFICERS_JOURNEY_21102021 } from "../utils/properties";
import { isActiveFeature } from "../utils/feature.flag";

Expand Down Expand Up @@ -63,8 +62,8 @@ export const initTaskList = (companyNumber: string,
url: urlUtils.getUrlWithCompanyNumberTransactionIdAndSubmissionId(STATEMENT_OF_CAPITAL_PATH, companyNumber, transactionId, submissionId)
}
};
const completedTasks = getTaskCompletedCount(csSubmission);
const expectedTasks = Object.keys(allTasks).filter(key => allTasks[key] !== undefined).length;
const completedTasks = Object.keys(allTasks).filter(key => allTasks[key] && allTasks[key].state === TaskState.CHECKED).length;
const expectedTasks = Object.keys(allTasks).filter(key => allTasks[key] !== undefined).length;
const isTasksCompleted = expectedTasks === completedTasks;

return {
Expand Down
1 change: 1 addition & 0 deletions src/utils/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ export const WRONG_PSC_DETAILS_TEXT = "wrong-psc-details";
export const WRONG_PSC_STATEMENT_TEXT = "wrong-psc-statement";
export const EMAIL_ADDRESS_INVALID: string = "Enter an email address in the correct format, like [email protected]";
export const NO_EMAIL_ADDRESS_SUPPLIED: string = "Enter the registered email address";
export const ACCEPT_LAWFUL_PURPOSE_STATEMENT = "acceptLawfulPurposeStatement";

export enum RADIO_BUTTON_VALUE {
NO = "no",
Expand Down
26 changes: 0 additions & 26 deletions src/utils/task/task.counter.ts

This file was deleted.

11 changes: 10 additions & 1 deletion src/utils/update.confirmation.statement.submission.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import {
TradingStatusData
} from "@companieshouse/api-sdk-node/dist/services/confirmation-statement";
import { getConfirmationStatement, updateConfirmationStatement } from "../services/confirmation.statement.service";
import { SECTIONS } from "./constants";
import { SECTIONS, ACCEPT_LAWFUL_PURPOSE_STATEMENT } from "./constants";
import { urlUtils } from "./url";

export const sendUpdate = async (req: Request, sectionName: SECTIONS, status: SectionStatus, extraData?: any ) => {
Expand All @@ -33,6 +33,15 @@ export const sendTradingStatusUpdate = async (req: Request, tradingStatus: boole
await updateConfirmationStatement(session, transactionId, submissionId, csSubmission);
};

export const sendLawfulPurposeStatementUpdate = async (req: Request, acceptLawfulPurposeStatment: boolean ) => {
const transactionId = urlUtils.getTransactionIdFromRequestParams(req);
const submissionId = urlUtils.getSubmissionIdFromRequestParams(req);
const session = req.session as Session;
const csSubmission: ConfirmationStatementSubmission = await getConfirmationStatement(session, transactionId, submissionId);
csSubmission.data[ACCEPT_LAWFUL_PURPOSE_STATEMENT] = acceptLawfulPurposeStatment;
await updateConfirmationStatement(session, transactionId, submissionId, csSubmission);
};

const updateCsSubmission = (currentCsSubmission: ConfirmationStatementSubmission, sectionName: SECTIONS, sectionData: any ): ConfirmationStatementSubmission => {
currentCsSubmission.data[sectionName] = sectionData;
return currentCsSubmission;
Expand Down
20 changes: 19 additions & 1 deletion test/controllers/review.controller.unit.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,8 @@ import { ApiResponse } from "@companieshouse/api-sdk-node/dist/services/resource
import { createAndLogError } from "../../src/utils/logger";
import { dummyPayment, PAYMENT_JOURNEY_URL } from "../mocks/payment.mock";
import { mockConfirmationStatementSubmission } from "../mocks/confirmation.statement.submission.mock";
import { getConfirmationStatement } from "../../src/services/confirmation.statement.service";
import { getConfirmationStatement, updateConfirmationStatement } from "../../src/services/confirmation.statement.service";
import { ConfirmationStatementSubmission } from "@companieshouse/api-sdk-node/dist/services/confirmation-statement";

const PropertiesMock = jest.requireMock('../../src/utils/properties');
jest.mock('../../src/utils/properties', () => ({
Expand All @@ -34,6 +35,8 @@ const mockCreateAndLogError = createAndLogError as jest.Mock;
const mockGetConfirmationStatement = getConfirmationStatement as jest.Mock;
mockGetConfirmationStatement.mockResolvedValue(mockConfirmationStatementSubmission);

const mockUpdateConfirmationStatement = updateConfirmationStatement as jest.Mock;

const dummyError = {
message: "oops"
} as Error;
Expand Down Expand Up @@ -210,6 +213,21 @@ describe("review controller tests", () => {
expect(response.header.location).toEqual(CONFIRMATION_URL);
});

it("Should update the lawful purpose statement", async () => {
await request(app).post(URL);
const csSubmission: ConfirmationStatementSubmission = mockUpdateConfirmationStatement.mock.calls[0][3];
expect(csSubmission.data.acceptLawfulPurposeStatement).toBe(true);
});

it("Should show error page if lawful purpose statement update fails", async () => {
mockUpdateConfirmationStatement.mockRejectedValueOnce("Error");
const response = await request(app)
.post(URL);

expect(response.status).toBe(500);
expect(response.text).toContain(SERVICE_UNAVAILABLE_TEXT);
});

it("Should show error page if payment response has no resource", async () => {
mockCloseTransaction.mockResolvedValueOnce(PAYMENT_URL);
mockStartPaymentsSession.mockResolvedValueOnce({
Expand Down
77 changes: 77 additions & 0 deletions test/mocks/confirmation.statement.submission.mock.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,3 +28,80 @@ export const mockConfirmationStatementSubmission: ConfirmationStatementSubmissio
self: "/somewhere/"
}
};

export const mockConfirmationStatementSubmissionAllConfirmed: ConfirmationStatementSubmission = {
id: "dgshjgdsj",
data: {
confirmationStatementMadeUpToDate: "2020-03-11",
activeOfficerDetailsData: {
sectionStatus: SectionStatus.CONFIRMED,
},
personsSignificantControlData: {
sectionStatus: SectionStatus.CONFIRMED,
},
registeredOfficeAddressData: {
sectionStatus: SectionStatus.CONFIRMED,
},
registeredEmailAddressData: {
sectionStatus: SectionStatus.CONFIRMED,
},
registerLocationsData: {
sectionStatus: SectionStatus.CONFIRMED,
},
shareholderData: {
sectionStatus: SectionStatus.CONFIRMED,
},
sicCodeData: {
sectionStatus: SectionStatus.CONFIRMED,
},
statementOfCapitalData: {
sectionStatus: SectionStatus.CONFIRMED,
statementOfCapital: mockStatementOfCapital
},
tradingStatusData: {
tradingStatusAnswer: true,
},
},
links: {
self: "/somewhere/"
}
};

export const mockConfirmationStatementSubmissionMixedStatuses: ConfirmationStatementSubmission = {
id: "dgshjgdsj",
data: {
confirmationStatementMadeUpToDate: "2020-03-11",
activeOfficerDetailsData: {
sectionStatus: SectionStatus.NOT_CONFIRMED,
},
personsSignificantControlData: {
sectionStatus: SectionStatus.NOT_CONFIRMED,
},
registeredOfficeAddressData: {
sectionStatus: SectionStatus.RECENT_FILING,
},
registeredEmailAddressData: {
sectionStatus: SectionStatus.INITIAL_FILING,
registeredEmailAddress: "[email protected]"
},
registerLocationsData: {
sectionStatus: SectionStatus.CONFIRMED,
},
shareholderData: {
sectionStatus: SectionStatus.CONFIRMED,
},
sicCodeData: {
sectionStatus: SectionStatus.CONFIRMED,
},
statementOfCapitalData: {
sectionStatus: SectionStatus.CONFIRMED,
statementOfCapital: mockStatementOfCapital
},
tradingStatusData: {
tradingStatusAnswer: true,
},
},
links: {
self: "/somewhere/"
}
};
Loading

0 comments on commit 7bd351f

Please sign in to comment.