Skip to content

Commit 07db9ce

Browse files
authored
Merge pull request #1742 from companieshouse/origin/feature/roecct-723-bug-fix-mo-correspondence-address
ROECCT-723: Bugfix- Correspondence address for Individual managing officer doesn't reflect in CHS
2 parents ad8fe7a + 367b34c commit 07db9ce

File tree

3 files changed

+45
-11
lines changed

3 files changed

+45
-11
lines changed

src/controllers/update/update.review.individual.managing.officer.ts

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,34 @@
11
import { UPDATE_BENEFICIAL_OWNER_BO_MO_REVIEW_URL, UPDATE_BENEFICIAL_OWNER_TYPE_URL, UPDATE_REVIEW_INDIVIDUAL_MANAGING_OFFICER_PAGE, RELEVANT_PERIOD_QUERY_PARAM } from "../../config";
22
import { NextFunction, Request, Response } from "express";
3-
import { getApplicationData, mapDataObjectToFields, removeFromApplicationData, setApplicationData } from "../../utils/application.data";
3+
import { getApplicationData, removeFromApplicationData, setApplicationData } from "../../utils/application.data";
44
import { logger } from "../../utils/logger";
55
import { ManagingOfficerKey } from "../../model/managing.officer.model";
66
import { setReviewedDateOfBirth } from "./update.review.beneficial.owner.individual";
77
import { Session } from "@companieshouse/node-session-handler";
88
import { ApplicationDataType } from "../../model";
99
import { v4 as uuidv4 } from "uuid";
1010
import { saveAndContinue } from "../../utils/save.and.continue";
11-
import { AddressKeys, InputDate } from "../../model/data.types.model";
11+
import { InputDate } from "../../model/data.types.model";
1212
import { setOfficerData } from "../../utils/managing.officer.individual";
1313
import { HaveDayOfBirthKey, ResignedOnKey } from "../../model/date.model";
1414
import { addResignedDateToTemplateOptions } from "../../utils/update/ceased_date_util";
15-
import { UsualResidentialAddressKey, UsualResidentialAddressKeys } from "../../model/address.model";
1615
import { checkRelevantPeriod } from "../../utils/relevant.period";
16+
import { fetchIndividualMOAddress } from "../../utils/update/review.managing.officer";
1717

1818
export const get = async (req: Request, res: Response, next: NextFunction) => {
1919
try {
2020
logger.debugRequest(req, `${req.method} ${req.route.path}`);
2121
const appData = await getApplicationData(req.session);
22-
const index = req.query.index;
22+
const index = Number(req.query.index);
2323

24-
let dataToReview = {}, residentialAddress = {};
25-
26-
if (appData?.managing_officers_individual){
27-
dataToReview = appData?.managing_officers_individual[Number(index)];
28-
residentialAddress = (dataToReview) ? mapDataObjectToFields(dataToReview[UsualResidentialAddressKey], UsualResidentialAddressKeys, AddressKeys) : {};
29-
}
24+
const { dataToReview, residentialAddress, serviceAddress } = fetchIndividualMOAddress(appData, index);
3025

3126
const templateOptions = {
3227
backLinkUrl: UPDATE_BENEFICIAL_OWNER_BO_MO_REVIEW_URL,
3328
templateName: UPDATE_REVIEW_INDIVIDUAL_MANAGING_OFFICER_PAGE,
3429
...dataToReview,
35-
...residentialAddress
30+
...residentialAddress,
31+
...serviceAddress
3632
};
3733

3834
if (ResignedOnKey in dataToReview) {

src/utils/update/review.managing.officer.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
1+
import { mapDataObjectToFields } from "../../utils/application.data";
12
import { REVIEW_OWNER_INDEX_PARAM, UPDATE_AN_OVERSEAS_ENTITY_URL, UPDATE_REVIEW_INDIVIDUAL_MANAGING_OFFICER_PAGE, UPDATE_REVIEW_MANAGING_OFFICER_CORPORATE_PAGE } from "../../config";
23
import { ApplicationData } from "../../model";
34
import { ManagingOfficerCorporateKey } from "../../model/managing.officer.corporate.model";
45
import { ManagingOfficerKey } from "../../model/managing.officer.model";
56
import { Update } from "../../model/update.type.model";
67
import { reviewAllOwnwers } from "./review.beneficial.owner";
8+
import { ServiceAddressKey, ServiceAddressKeys, UsualResidentialAddressKey, UsualResidentialAddressKeys } from "../../model/address.model";
9+
import { AddressKeys } from "../../model/data.types.model";
710

811
const AllMoTypes = {
912
moIndividualOfficerReview: "review_managing_officers_individual",
@@ -64,3 +67,14 @@ export const checkAndReviewManagingOfficers = (appData: ApplicationData): string
6467

6568
return "";
6669
};
70+
71+
export function fetchIndividualMOAddress(appData: any, index: number) {
72+
let dataToReview = {}, residentialAddress = {}, serviceAddress = {};
73+
74+
if (appData?.managing_officers_individual){
75+
dataToReview = appData?.managing_officers_individual[Number(index)];
76+
residentialAddress = (dataToReview) ? mapDataObjectToFields(dataToReview[UsualResidentialAddressKey], UsualResidentialAddressKeys, AddressKeys) : {};
77+
serviceAddress = (dataToReview) ? mapDataObjectToFields(dataToReview[ServiceAddressKey], ServiceAddressKeys, AddressKeys) : {};
78+
}
79+
return { dataToReview, residentialAddress, serviceAddress };
80+
}

test/controllers/update/update.review.managing.officer.individual.spec.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import {
3030
UPDATE_REVIEW_MANAGING_OFFICER_MOCK_STILL_MO,
3131
RESIDENTIAL_ADDRESS_MOCK,
3232
UPDATE_MANAGING_OFFICER_HAVE_DAY_OF_BIRTH_MOCK,
33+
SERVICE_ADDRESS_MOCK,
3334
} from "../../__mocks__/session.mock";
3435
import { hasUpdatePresenter } from "../../../src/middleware/navigation/update/has.presenter.middleware";
3536
import { ANY_MESSAGE_ERROR, SERVICE_UNAVAILABLE, UPDATE_REVIEW_INDIVIDUAL_MANAGING_OFFICER_HEADING } from '../../__mocks__/text.mock';
@@ -106,6 +107,29 @@ describe('Test review managing officer', () => {
106107
expect(resp.status).toEqual(500);
107108
expect(resp.text).toContain(SERVICE_UNAVAILABLE);
108109
});
110+
111+
test(`render the ${config.UPDATE_REVIEW_INDIVIDUAL_MANAGING_OFFICER_PAGE} page and verifies service and residential address`, async () => {
112+
mockGetApplicationData.mockReturnValueOnce({
113+
...APPLICATION_DATA_EMPTY_BO_MOCK,
114+
});
115+
mockMapDataObjectToFields.mockReturnValueOnce(SERVICE_ADDRESS_MOCK);
116+
mockMapDataObjectToFields.mockReturnValueOnce(RESIDENTIAL_ADDRESS_MOCK);
117+
const resp = await request(app).get(UPDATE_REVIEW_INDIVIDUAL_MANAGING_OFFICER_WITH_PARAM_URL_TEST);
118+
expect(resp.status).toEqual(200);
119+
expect(resp.text).toContain(config.UPDATE_BENEFICIAL_OWNER_BO_MO_REVIEW_URL);
120+
expect(resp.text).toContain("addressLine1");
121+
expect(resp.text).toContain("residential address addressLine1");
122+
});
123+
124+
test('service and residential address not displayed when no address returned', async () => {
125+
mockGetApplicationData.mockReturnValueOnce({
126+
...APPLICATION_DATA_EMPTY_BO_MOCK,
127+
});
128+
const resp = await request(app).get(UPDATE_REVIEW_INDIVIDUAL_MANAGING_OFFICER_WITH_PARAM_URL_TEST);
129+
expect(resp.status).toEqual(200);
130+
expect(resp.text).not.toContain("addressLine1");
131+
expect(resp.text).not.toContain("residential address addressLine1");
132+
});
109133
});
110134

111135
describe(`POST tests`, () => {

0 commit comments

Comments
 (0)