Skip to content

Commit 8345bbe

Browse files
[CVE-2674] add veteranSsnLastFour to form data (#44154)
* persist DOB and SSN last four in form data * add prefillTransformer to extract veteranSsnLastFour from nonPrefill * remove dob changes * gatekeep prefill changes
1 parent 4394fdb commit 8345bbe

4 files changed

Lines changed: 116 additions & 1 deletion

File tree

src/applications/lgy/coe/form/config/form.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import { PreSubmitInfoSelector } from '../containers/selectors/PreSubmitInfoSele
1010
import { GetFormHelp } from '../components/GetFormHelp';
1111
import manifest from '../manifest.json';
1212
import { customCOEsubmit } from './helpers';
13+
import { prefillTransformer } from './prefill-transformer';
1314
import { definitions } from './schemaImports';
1415

1516
// chapter schema imports
@@ -64,6 +65,7 @@ const formConfig = {
6465
formId: '26-1880',
6566
version: 0,
6667
prefillEnabled: true,
68+
prefillTransformer,
6769
footerContent: FormFooter,
6870
preSubmitInfo: { ...preSubmitInfo, CustomComponent: PreSubmitInfoSelector },
6971
getHelp: GetFormHelp,
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import { TOGGLE_KEY } from '../constants';
2+
3+
export const prefillTransformer = (pages, formData, metadata) => {
4+
if (!formData?.[`view:${TOGGLE_KEY}`]) {
5+
return { pages, formData, metadata };
6+
}
7+
8+
const { veteranSsnLastFour = '' } = formData?.nonPrefill || {};
9+
10+
return {
11+
pages,
12+
formData: {
13+
...formData,
14+
veteranSsnLastFour,
15+
},
16+
metadata,
17+
};
18+
};

src/applications/lgy/coe/form/pages/personalInformation.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,15 @@ export default {
1313
hideOnReview: false,
1414
schema: {
1515
type: 'object',
16-
properties: {},
16+
properties: {
17+
veteranSsnLastFour: {
18+
type: 'string',
19+
pattern: '^[0-9]{4}$',
20+
},
21+
dateOfBirth: {
22+
$ref: '#/definitions/date',
23+
},
24+
},
1725
},
1826
uiSchema: {},
1927
};
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
import { expect } from 'chai';
2+
import { prefillTransformer } from '../../config/prefill-transformer';
3+
import { TOGGLE_KEY } from '../../constants';
4+
5+
describe('COE prefill transformer', () => {
6+
const pages = { testPage: 'Page 1' };
7+
const metadata = { version: 0, prefill: true };
8+
const toggleOn = { [`view:${TOGGLE_KEY}`]: true };
9+
10+
it('returns pages and metadata unchanged', () => {
11+
const result = prefillTransformer(pages, toggleOn, metadata);
12+
13+
expect(result.pages).to.equal(pages);
14+
expect(result.metadata).to.equal(metadata);
15+
});
16+
17+
it('leaves formData untouched when the toggle is off', () => {
18+
const formData = {
19+
nonPrefill: { veteranSsnLastFour: '6789' },
20+
};
21+
22+
const { formData: transformed } = prefillTransformer(
23+
pages,
24+
formData,
25+
metadata,
26+
);
27+
28+
expect(transformed).to.equal(formData);
29+
expect(transformed.veteranSsnLastFour).to.be.undefined;
30+
});
31+
32+
it('extracts veteranSsnLastFour from nonPrefill when the toggle is on', () => {
33+
const formData = {
34+
...toggleOn,
35+
nonPrefill: { veteranSsnLastFour: '6789' },
36+
};
37+
38+
const { formData: transformed } = prefillTransformer(
39+
pages,
40+
formData,
41+
metadata,
42+
);
43+
44+
expect(transformed.veteranSsnLastFour).to.equal('6789');
45+
});
46+
47+
it('defaults veteranSsnLastFour to an empty string when nonPrefill is missing', () => {
48+
const { formData: transformed } = prefillTransformer(
49+
pages,
50+
toggleOn,
51+
metadata,
52+
);
53+
54+
expect(transformed.veteranSsnLastFour).to.equal('');
55+
});
56+
57+
it('defaults veteranSsnLastFour to an empty string when not present in nonPrefill', () => {
58+
const formData = { ...toggleOn, nonPrefill: {} };
59+
60+
const { formData: transformed } = prefillTransformer(
61+
pages,
62+
formData,
63+
metadata,
64+
);
65+
66+
expect(transformed.veteranSsnLastFour).to.equal('');
67+
});
68+
69+
it('preserves other top-level formData fields when the toggle is on', () => {
70+
const formData = {
71+
...toggleOn,
72+
fullName: { first: 'Mae', middle: '', last: 'Rivera' },
73+
dateOfBirth: '1931-06-07',
74+
nonPrefill: { veteranSsnLastFour: '6789' },
75+
};
76+
77+
const { formData: transformed } = prefillTransformer(
78+
pages,
79+
formData,
80+
metadata,
81+
);
82+
83+
expect(transformed.fullName).to.deep.equal(formData.fullName);
84+
expect(transformed.dateOfBirth).to.equal('1931-06-07');
85+
expect(transformed.veteranSsnLastFour).to.equal('6789');
86+
});
87+
});

0 commit comments

Comments
 (0)