Skip to content

Commit 801cd57

Browse files
authored
Merge pull request #593 from companieshouse/lp-1084-validate-former-names-blank
LP-1084 add previous names missing validation
2 parents c0b68fc + 47739bd commit 801cd57

File tree

13 files changed

+246
-18
lines changed

13 files changed

+246
-18
lines changed

src/infrastructure/gateway/generalPartner/GeneralPartnerGateway.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,21 @@ import {
1212
removeEmptyStringValues,
1313
validateAndFormatPartnerDateEffectiveFrom,
1414
resetFormerNamesIfPreviousNameIsFalse,
15-
validateAndFormatPartnerCeaseDate
15+
validateAndFormatPartnerCeaseDate,
16+
validateFormerNamesNotEmptyIfPreviousNameIsTrue
1617
} from "../utils";
1718

1819
class GeneralPartnerGateway implements IGeneralPartnerGateway {
20+
private readonly partnerType = "general";
21+
1922
async createGeneralPartner(
2023
opt: { access_token: string; refresh_token: string },
2124
transactionId: string,
2225
data: Record<string, any>
2326
): Promise<string> {
2427
validateAndFormatPartnerPersonDateOfBirth(data);
2528
validateAndFormatPartnerDateEffectiveFrom(data);
29+
validateFormerNamesNotEmptyIfPreviousNameIsTrue(data, this.partnerType);
2630
resetFormerNamesIfPreviousNameIsFalse(data);
2731
validateAndFormatPartnerCeaseDate(data);
2832

@@ -93,6 +97,7 @@ class GeneralPartnerGateway implements IGeneralPartnerGateway {
9397
): Promise<void> {
9498
validateAndFormatPartnerPersonDateOfBirth(data);
9599
validateAndFormatPartnerDateEffectiveFrom(data);
100+
validateFormerNamesNotEmptyIfPreviousNameIsTrue(data, this.partnerType);
96101
resetFormerNamesIfPreviousNameIsFalse(data);
97102
validateAndFormatPartnerCeaseDate(data);
98103

src/infrastructure/gateway/generalPartner/GeneralPartnerInMemoryGateway.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,13 @@ import {
1010
resetFormerNamesIfPreviousNameIsFalse,
1111
validateAndFormatPartnerCeaseDate,
1212
validateAndFormatPartnerDateEffectiveFrom,
13-
validateAndFormatPartnerPersonDateOfBirth
13+
validateAndFormatPartnerPersonDateOfBirth,
14+
validateFormerNamesNotEmptyIfPreviousNameIsTrue
1415
} from "../utils";
1516

1617
class GeneralPartnerInMemoryGateway implements IGeneralPartnerGateway {
18+
private readonly partnerType = "general";
19+
1720
generalPartnerId = crypto.randomUUID().toString();
1821
error = false;
1922

@@ -49,6 +52,7 @@ class GeneralPartnerInMemoryGateway implements IGeneralPartnerGateway {
4952

5053
validateAndFormatPartnerPersonDateOfBirth(data);
5154
validateAndFormatPartnerDateEffectiveFrom(data);
55+
validateFormerNamesNotEmptyIfPreviousNameIsTrue(data, this.partnerType);
5256
resetFormerNamesIfPreviousNameIsFalse(data);
5357
validateAndFormatPartnerCeaseDate(data);
5458

@@ -96,6 +100,7 @@ class GeneralPartnerInMemoryGateway implements IGeneralPartnerGateway {
96100

97101
validateAndFormatPartnerPersonDateOfBirth(data);
98102
validateAndFormatPartnerDateEffectiveFrom(data);
103+
validateFormerNamesNotEmptyIfPreviousNameIsTrue(data, this.partnerType);
99104
resetFormerNamesIfPreviousNameIsFalse(data);
100105
validateAndFormatPartnerCeaseDate(data);
101106

src/infrastructure/gateway/limitedPartner/LimitedPartnerGateway.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,21 @@ import {
1212
removeEmptyStringValues,
1313
validateAndFormatPartnerDateEffectiveFrom,
1414
resetFormerNamesIfPreviousNameIsFalse,
15-
validateAndFormatPartnerCeaseDate
15+
validateAndFormatPartnerCeaseDate,
16+
validateFormerNamesNotEmptyIfPreviousNameIsTrue
1617
} from "../utils";
1718

1819
class LimitedPartnerGateway implements ILimitedPartnerGateway {
20+
private readonly partnerType = "limited";
21+
1922
async createLimitedPartner(
2023
opt: { access_token: string; refresh_token: string },
2124
transactionId: string,
2225
data: Record<string, any>
2326
): Promise<string> {
2427
validateAndFormatPartnerPersonDateOfBirth(data);
2528
validateAndFormatPartnerDateEffectiveFrom(data);
29+
validateFormerNamesNotEmptyIfPreviousNameIsTrue(data, this.partnerType);
2630
resetFormerNamesIfPreviousNameIsFalse(data);
2731
validateAndFormatPartnerCeaseDate(data);
2832

@@ -93,6 +97,7 @@ class LimitedPartnerGateway implements ILimitedPartnerGateway {
9397
): Promise<void> {
9498
validateAndFormatPartnerPersonDateOfBirth(data);
9599
validateAndFormatPartnerDateEffectiveFrom(data);
100+
validateFormerNamesNotEmptyIfPreviousNameIsTrue(data, this.partnerType);
96101
resetFormerNamesIfPreviousNameIsFalse(data);
97102
validateAndFormatPartnerCeaseDate(data);
98103

src/infrastructure/gateway/limitedPartner/LimitedPartnerInMemoryGateway.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,11 @@ import { LimitedPartner } from "@companieshouse/api-sdk-node/dist/services/limit
66
import ILimitedPartnerGateway from "../../../domain/ILimitedPartnerGateway";
77
import UIErrors, { ApiErrors } from "../../../domain/entities/UIErrors";
88
import TransactionLimitedPartner from "../../../domain/entities/TransactionLimitedPartner";
9-
import { resetFormerNamesIfPreviousNameIsFalse, validateAndFormatPartnerCeaseDate, validateAndFormatPartnerDateEffectiveFrom, validateAndFormatPartnerPersonDateOfBirth } from "../utils";
9+
import { resetFormerNamesIfPreviousNameIsFalse, validateAndFormatPartnerCeaseDate, validateAndFormatPartnerDateEffectiveFrom, validateAndFormatPartnerPersonDateOfBirth, validateFormerNamesNotEmptyIfPreviousNameIsTrue } from "../utils";
1010

1111
class LimitedPartnerInMemoryGateway implements ILimitedPartnerGateway {
12+
private readonly partnerType = "limited";
13+
1214
limitedPartnerId = crypto.randomUUID().toString();
1315
error = false;
1416

@@ -44,6 +46,7 @@ class LimitedPartnerInMemoryGateway implements ILimitedPartnerGateway {
4446

4547
validateAndFormatPartnerPersonDateOfBirth(data);
4648
validateAndFormatPartnerDateEffectiveFrom(data);
49+
validateFormerNamesNotEmptyIfPreviousNameIsTrue(data, this.partnerType);
4750
resetFormerNamesIfPreviousNameIsFalse(data);
4851
validateAndFormatPartnerCeaseDate(data);
4952

@@ -92,6 +95,7 @@ class LimitedPartnerInMemoryGateway implements ILimitedPartnerGateway {
9295

9396
validateAndFormatPartnerPersonDateOfBirth(data);
9497
validateAndFormatPartnerDateEffectiveFrom(data);
98+
validateFormerNamesNotEmptyIfPreviousNameIsTrue(data, this.partnerType);
9599
resetFormerNamesIfPreviousNameIsFalse(data);
96100
validateAndFormatPartnerCeaseDate(data);
97101

src/infrastructure/gateway/utils.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,3 +145,16 @@ export const resetFormerNamesIfPreviousNameIsFalse = (data: Record<string, any>)
145145
data.former_names = "";
146146
}
147147
};
148+
149+
export const validateFormerNamesNotEmptyIfPreviousNameIsTrue = (data: Record<string, any>, partnerType: string) => {
150+
if (data?.previousName === "true" && (!data?.former_names || data?.former_names.trim() === "")) {
151+
const uiErrors = new UIErrors();
152+
uiErrors.formatValidationErrorToUiErrors({
153+
errors: {
154+
former_names: `Enter the previous name(s) of the ${partnerType} partner`
155+
}
156+
});
157+
158+
throw uiErrors;
159+
}
160+
};

src/presentation/test/integration/postTransition/generalPartner/add-general-partner-person.test.ts

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -125,13 +125,26 @@ describe("Add General Partner Person Page", () => {
125125
});
126126

127127
describe("Post Add General Partner Person", () => {
128-
it("should send the general partner person details", async () => {
129-
const generalPartner = new GeneralPartnerBuilder().isPerson().withNotDisqualifiedStatementChecked(true).build();
128+
it.each([
129+
"true",
130+
"false"
131+
])("should send the general partner person details", async (previousName) => {
132+
const generalPartner = new GeneralPartnerBuilder()
133+
.isPerson()
134+
.withNotDisqualifiedStatementChecked(true)
135+
.build();
136+
137+
if (previousName === "true") {
138+
if (generalPartner.data) {
139+
generalPartner.data.former_names = "john";
140+
}
141+
}
130142

131143
const res = await request(app)
132144
.post(URL)
133145
.send({
134146
pageType: PostTransitionPageType.addGeneralPartnerPerson,
147+
previousName: previousName,
135148
...generalPartner.data
136149
});
137150

@@ -215,5 +228,29 @@ describe("Add General Partner Person Page", () => {
215228
expect(res.text).toContain('<option value="Uzbek" selected>Uzbek</option>');
216229
expect(res.text).toContain('name="not_disqualified_statement_checked" type="checkbox" value="true" checked');
217230
});
231+
232+
it.each([
233+
"",
234+
" ",
235+
undefined
236+
])("should show error message if previous names is Yes but no previous name entered", async (formerNames: string | undefined) => {
237+
const res = await request(app).post(URL).send({
238+
pageType: PostTransitionPageType.addGeneralPartnerPerson,
239+
forename: "forename",
240+
surname: "SURNAME",
241+
former_names: formerNames,
242+
previousName: "true",
243+
"date_of_birth-Day": "01",
244+
"date_of_birth-Month": "11",
245+
"date_of_birth-Year": "1987",
246+
nationality1: "Mongolian",
247+
nationality2: "Uzbek",
248+
not_disqualified_statement_checked: "true"
249+
});
250+
251+
expect(res.status).toBe(200);
252+
expect(res.text).toContain('id="previousNameYes" name="previousName" type="radio" value="true" checked');
253+
expect(res.text).toContain("Enter the previous name(s) of the general partner");
254+
});
218255
});
219256
});

src/presentation/test/integration/postTransition/limitedPartner/add-limited-partner-person.test.ts

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -137,13 +137,27 @@ describe("Add Limited Partner Person Page", () => {
137137
});
138138

139139
describe("Post Add Limited Partner", () => {
140-
it("should send the Limited partner details", async () => {
141-
const limitedPartner = new LimitedPartnerBuilder().isPerson().withNotDisqualifiedStatementChecked(true).build();
140+
it.each([
141+
"true",
142+
"false"
143+
])("should send the Limited partner details", async (previousName) => {
144+
const limitedPartner = new LimitedPartnerBuilder()
145+
.isPerson()
146+
.withNotDisqualifiedStatementChecked(true)
147+
.withFormerNames("john")
148+
.build();
149+
150+
if (previousName === "true") {
151+
if (limitedPartner.data) {
152+
limitedPartner.data.former_names = "john";
153+
}
154+
}
142155

143156
const res = await request(app)
144157
.post(URL)
145158
.send({
146159
pageType: PostTransitionPageType.addLimitedPartnerPerson,
160+
previousName: previousName,
147161
...limitedPartner.data
148162
});
149163

@@ -202,6 +216,30 @@ describe("Add Limited Partner Person Page", () => {
202216
expect(res.text).toContain('<option value="Mongolian" selected>Mongolian</option>');
203217
expect(res.text).toContain('<option value="Uzbek" selected>Uzbek</option>');
204218
});
219+
220+
it.each([
221+
"",
222+
" ",
223+
undefined
224+
])("should show error message if previous names is Yes but no previous name entered", async (formerNames: string | undefined) => {
225+
const res = await request(app).post(URL).send({
226+
pageType: PostTransitionPageType.addLimitedPartnerPerson,
227+
forename: "forename",
228+
surname: "SURNAME",
229+
former_names: formerNames,
230+
previousName: "true",
231+
"date_of_birth-Day": "01",
232+
"date_of_birth-Month": "11",
233+
"date_of_birth-Year": "1987",
234+
nationality1: "Mongolian",
235+
nationality2: "Uzbek",
236+
not_disqualified_statement_checked: "true"
237+
});
238+
239+
expect(res.status).toBe(200);
240+
expect(res.text).toContain('id="previousNameYes" name="previousName" type="radio" value="true" checked');
241+
expect(res.text).toContain("Enter the previous name(s) of the limited partner");
242+
});
205243
});
206244

207245
describe("Patch from Add Limited Partner", () => {

src/presentation/test/integration/registration/generalPartner/add-general-partner-person.test.ts

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,10 +130,15 @@ describe("Add General Partner Person Page", () => {
130130
});
131131

132132
describe("Post Add General Partner", () => {
133-
it("should send the general partner details", async () => {
133+
it.each([
134+
[ "true", "john" ],
135+
[ "false", "" ]
136+
])("should send the general partner details", async (previousName, formerNames) => {
134137
const res = await request(app).post(URL).send({
135138
pageType: RegistrationPageType.addGeneralPartnerPerson,
136-
forename: "test"
139+
forename: "test",
140+
previousName: previousName,
141+
former_names: formerNames
137142
});
138143

139144
expect(res.status).toBe(302);
@@ -185,6 +190,30 @@ describe("Add General Partner Person Page", () => {
185190
expect(res.text).toContain('<option value="Uzbek" selected>Uzbek</option>');
186191
expect(res.text).toContain('name="not_disqualified_statement_checked" type="checkbox" value="true" checked');
187192
});
193+
194+
it.each([
195+
"",
196+
" ",
197+
undefined
198+
])("should show error message if previous names is Yes but no previous name entered", async (formerNames: string | undefined) => {
199+
const res = await request(app).post(URL).send({
200+
pageType: RegistrationPageType.addGeneralPartnerPerson,
201+
forename: "forename",
202+
surname: "SURNAME",
203+
former_names: formerNames,
204+
previousName: "true",
205+
"date_of_birth-Day": "01",
206+
"date_of_birth-Month": "11",
207+
"date_of_birth-Year": "1987",
208+
nationality1: "Mongolian",
209+
nationality2: "Uzbek",
210+
not_disqualified_statement_checked: "true"
211+
});
212+
213+
expect(res.status).toBe(200);
214+
expect(res.text).toContain('id="previousNameYes" name="previousName" type="radio" value="true" checked');
215+
expect(res.text).toContain("Enter the previous name(s) of the general partner");
216+
});
188217
});
189218

190219
describe("Patch from Add General Partner", () => {

src/presentation/test/integration/registration/limitedPartner/add-limited-partner-person.test.ts

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -154,10 +154,15 @@ describe("Add Limited Partner Person Page", () => {
154154
});
155155

156156
describe("Post Add Limited Partner", () => {
157-
it("should send the Limited partner details", async () => {
157+
it.each([
158+
[ "true", "john" ],
159+
[ "false", "" ]
160+
])("should send the Limited partner details", async (previousName, formerNames) => {
158161
const res = await request(app).post(URL).send({
159162
pageType: RegistrationPageType.addLimitedPartnerPerson,
160-
forename: "test"
163+
forename: "test",
164+
previousName: previousName,
165+
former_names: formerNames
161166
});
162167

163168
expect(res.status).toBe(302);
@@ -214,6 +219,29 @@ describe("Add Limited Partner Person Page", () => {
214219
expect(res.text).toContain("Mongolian");
215220
expect(res.text).toContain("Uzbek");
216221
});
222+
223+
it.each([
224+
"",
225+
" ",
226+
undefined
227+
])("should show error message if previous names is Yes but no previous name entered", async (formerNames: string | undefined) => {
228+
const res = await request(app).post(URL).send({
229+
pageType: RegistrationPageType.addLimitedPartnerPerson,
230+
forename: "forename",
231+
surname: "SURNAME",
232+
former_names: formerNames,
233+
previousName: "true",
234+
"date_of_birth-Day": "01",
235+
"date_of_birth-Month": "11",
236+
"date_of_birth-Year": "1987",
237+
nationality1: "Mongolian",
238+
nationality2: "Uzbek",
239+
});
240+
241+
expect(res.status).toBe(200);
242+
expect(res.text).toContain('id="previousNameYes" name="previousName" type="radio" value="true" checked');
243+
expect(res.text).toContain("Enter the previous name(s) of the limited partner");
244+
});
217245
});
218246

219247
describe("Patch from Add Limited Partner", () => {

0 commit comments

Comments
 (0)